This is FlyingWindow.m in view mode; [Download] [Up]
#import "FlyingWindow.h"
static id contentImage = nil;
@implementation EnhanceFlyingWindow
- initAt:(NXPoint *)thePoint
{ // set up window with image and put it on the screen centered at thePoint
NXRect theFrame; NXPoint zeroPoint = { 0.0, 0.0 };
if (!contentImage)
contentImage = [NXImage findImageNamed:"minienvelope.tiff"];
[contentImage getSize:&(theFrame.size)];
NX_X(&theFrame) = thePoint->x - NX_WIDTH(&theFrame) / 2;
NX_Y(&theFrame) = thePoint->y - NX_HEIGHT(&theFrame) / 2;
[self initContent:&theFrame style:NX_PLAINSTYLE
backing:NX_RETAINED buttonMask:0 defer:NO screen:NULL];
velocity.x = (random() % HORIZ_JUMPS) - HORIZ_JUMPS / 2;
velocity.y = (random() % VERT_JUMPS) + MIN_VERT;
[[self contentView] lockFocus];
[contentImage composite:NX_COPY toPoint:&zeroPoint];
[[self contentView] unlockFocus];
[self orderFront:nil];
return self;
}
- reInitAt:(NXPoint *)thePoint
{ // re-init the window as above, but for already created window.
NXSize theSize;
[contentImage getSize:&theSize];
[self moveTo:(thePoint->x - theSize.width / 2)
:(thePoint->y - theSize.height / 2)];
velocity.x = (random() % HORIZ_JUMPS) - HORIZ_JUMPS / 2;
velocity.y = (random() % VERT_JUMPS) + MIN_VERT;
[self orderFront:nil];
return self;
}
- move
{
NXRect theFrame;
[self getFrame:&theFrame];
[self moveTo:(NX_X(&theFrame) + velocity.x)
:(NX_Y(&theFrame) + velocity.y)];
velocity.y -= GRAVITY;
return self;
}
- (BOOL)onScreen
{
NXRect theFrame; NXScreen *screen;
[self getFrame:&theFrame andScreen:&screen];
// consider us on screen if we're off the top since we'll be
// coming back down sometime
if (!screen) { // no screen returned? Use standard screen size
if ((NX_MAXX(&theFrame) < 0) || (NX_MAXY(&theFrame) < 0) ||
(NX_X(&theFrame) > 1120.0)) return NO;
return YES;
}
if ((NX_MAXX(&theFrame) < NX_X(&(screen->screenBounds))) ||
(NX_X(&theFrame) > NX_MAXX(&(screen->screenBounds))) ||
(NX_MAXY(&theFrame) < NX_Y(&(screen->screenBounds)))) {
return NO;
}
return YES;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.