This is MyView.m in view mode; [Download] [Up]
/*
Fred
Implementation
Created: November 1991
Last Edited: April 1992
Sean Luke
Modified Todd Anthony Nathan
April 10, 1992
Cleaned up code, and got slider to work
*/
#import "MyView.h"
#define DISTANCE 2.0
@implementation MyView
// Prototypes
DPSTimedEntryProc movewindow(DPSTimedEntry teNum,double now, void* TheWindow);
- appDidInit:sender
// Init some things for later use.
{
interval = 0.5;
priority = NX_RUNMODALTHRESHOLD;
thisWindow = [NXApp appIcon];
// put in the first timed entry...
teNum = DPSAddTimedEntry((double) interval, (DPSTimedEntryProc) movewindow,
(void*) thisWindow, (int) priority);
return self;
}
- appWillTerminate:sender
// Clean up and go home when user quits
{
if (teNum) DPSRemoveTimedEntry(teNum);
return self;
}
- changeSpeed:sender
{
interval = [theSlider floatValue];
printf("The slider value is = %f\n", interval);
if (teNum) DPSRemoveTimedEntry(teNum);
teNum = DPSAddTimedEntry((double) interval, (DPSTimedEntryProc) movewindow,
(void*) thisWindow, (int) priority);
return self;
}
DPSTimedEntryProc movewindow(DPSTimedEntry teNum,double now, void* TheWindow)
{
id theWindow;
int z;
float x,
y,
a,
b,
width,
height,
angle;
NXPoint ThePoint;
NXRect TheRect;
for (z = 0 ; z <= 20 ; z++) {
theWindow = (id)TheWindow;
[theWindow getMouseLocation:&ThePoint];
x = ThePoint.x;
y = ThePoint.y;
[theWindow getFrame: &TheRect];
a = TheRect.origin.x;
b = TheRect.origin.y;
width = TheRect.size.width;
height = TheRect.size.height;
angle = atan2( y - height / 2.0, x - width / 2.0);
if ((x + y - height / 2.0 - width / 2.0 > 1.5) || (x + y - height / 2.0 - width / 2.0 < - 1.5))
[theWindow moveTo:DISTANCE * cos(angle) + a :DISTANCE * sin(angle) + b];
}
return (void*) NULL;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.