This is EyeView.m in view mode; [Download] [Up]
/* Generated by Interface Builder */
#import "EyeView.h"
#import "eye.h"
#import <math.h>
#import <dpsclient/dpsclient.h>
#import <dpsclient/psops.h>
#define MAX_BALL_RAD 9.0
#define PUPIL_RAD 2.0
#define GAP 3.0
int square(int x)
{
return (x * x);
}
@implementation EyeView
+ newFrame:(const NXRect *) frm;
{
[(self = [super newFrame:frm]) allocateGState];
return self;
}
-init
{
leftCenter.x = bounds.size.width / 4;
rightCenter.x = bounds.size.width * 3 / 4;
leftCenter.y = rightCenter.y = bounds.size.height / 2;
// draw the eye background
[self lockFocus];
PSsetgray(NX_LTGRAY);
PSrectfill(0.0, 0.0, bounds.size.width, bounds.size.height);
PSsetgray(0.0);
PSsetlinewidth(2);
PSarc(leftCenter.x, leftCenter.y, MAX_BALL_RAD + PUPIL_RAD + GAP, 0.0, 360.0);
PSstroke();
PSarc(rightCenter.x, rightCenter.y, MAX_BALL_RAD + PUPIL_RAD + GAP, 0.0, 360.0);
PSstroke();
[self unlockFocus];
[window flushWindow];
NXPing();
}
- drawBalls
{
mouseTemp = mouseLoc;
[window getMouseLocation: &mouseLoc];
[self convertPoint: &mouseLoc fromView: nil];
if (mouseLoc.x == mouseTemp.x && mouseLoc.y == mouseTemp.y) return;
mag = sqrt(square(mouseLoc.x - leftCenter.x) + square(mouseLoc.y - leftCenter.y));
if (mag < MAX_BALL_RAD) {
leftBall.x = mouseLoc.x;
leftBall.y = mouseLoc.y;
} else {
leftBall.x = MAX_BALL_RAD * (mouseLoc.x - leftCenter.x) / mag + leftCenter.x ;
leftBall.y = MAX_BALL_RAD * (mouseLoc.y - leftCenter.y) / mag + leftCenter.y ;
}
mag = sqrt(square(mouseLoc.x - rightCenter.x) + square(mouseLoc.y - rightCenter.y));
if (mag < MAX_BALL_RAD) {
rightBall.x = mouseLoc.x;
rightBall.y = mouseLoc.y;
} else {
rightBall.x = MAX_BALL_RAD * (mouseLoc.x - rightCenter.x) / mag + rightCenter.x;
rightBall.y = MAX_BALL_RAD * (mouseLoc.y - rightCenter.y) / mag + rightCenter.y;
}
[self lockFocus];
eyeball(leftCenter.x, leftCenter.y, rightCenter.x, rightCenter.y, leftBall.x, leftBall.y, rightBall.x, rightBall.y, MAX_BALL_RAD, PUPIL_RAD, GAP);
[window flushWindow];
[self unlockFocus];
NXPing();
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.