This is HitPath.m in view mode; [Download] [Up]
#import "HitPath.h" #import "PSWUPath.h" @implementation HitPath static float officialHitWidth; //************************************************************************ // creating and destroying + initialize { if(self == [HitPath class]) officialHitWidth = 4.0; return self; } - init { [super initCountParams:8 countOps:4]; [self resetFill]; [self moveto:0 :0]; [self rlineto:0 :0]; [self rlineto:0 :0]; [self rlineto:0 :0]; [self closepath]; hitWidth = officialHitWidth; return self; } //************************************************************************ // misc - movePathToPoint:(const NXPoint *)p { bbox[0] = floor(p->x - hitWidth / 2); bbox[1] = floor(p->y - hitWidth / 2); bbox[2] = ceil(p->x + hitWidth / 2); bbox[3] = ceil(p->y + hitWidth / 2); params[0] = p->x - hitWidth / 2; params[1] = p->y - hitWidth / 2; params[3] = hitWidth; params[4] = hitWidth; params[7] = - hitWidth; return self; } - (BOOL)hitPathStroke:(UPath *)aPath { int hit; PSWHitStroke(bboxParams,sizeParams + 4,bboxOps,sizeOps + 2, aPath->bboxParams,aPath->sizeParams + 4,aPath->bboxOps,aPath->sizeOps + 2,&hit); return (BOOL)hit; } - (BOOL)hitPathFill:(UPath *)aPath { int hit; PSWHitFill(bboxParams,sizeParams + 4,bboxOps,sizeOps + 2, aPath->bboxParams,aPath->sizeParams + 4,aPath->bboxOps,aPath->sizeOps + 2,&hit); return (BOOL)hit; } - awake { [super awake]; hitWidth = officialHitWidth; return self; } - scaleHitWidthTo:(float)aScale { NXPoint aPoint; aPoint.x = params[0] + hitWidth / 2; aPoint.y = params[1] + hitWidth / 2; hitWidth = officialHitWidth * (1.0 / aScale); [self movePathToPoint:&aPoint]; return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.