This is ColeSlaw.m in view mode; [Download] [Up]
#import "ColeSlaw.h"
#import "ScaledViewPart.h"
#import "DesquamateViewPart.h"
#import "PolyFrogViewPart.h"
#import "FooFaraw.h"
#import <appkit/Window.h>
#import <appkit/View.h>
#import <appkit/graphics.h>
#import <appkit/Application.h>
#import <appkit/Matrix.h>
@implementation ColeSlaw
- init
{
[super init];
inited=NO;
return self;
}
- doFirstInit
{
NXRect bowlSize;
ginsuView=[saladBowl contentView];
[ginsuView getBounds:&bowlSize];
redLettuce=[[ScaledView alloc] initFrame:&bowlSize];
greenPeppers=[[PolyFrogView alloc] initFrame:&bowlSize];
[ginsuView setAutoresizeSubviews:YES];
[ginsuView setAutosizing:NX_WIDTHSIZABLE | NX_HEIGHTSIZABLE];
// Sam''s majic window code
[saladBowl useOptimizedDrawing:YES];
[saladBowl setOneShot:YES];
[saladBowl setDelegate:self];
[saladBowl setBackgroundGray:NX_BLACK];
inited=YES;
return self;
}
- windowDidResize:sender
{
NXRect aRect;
[ginsuView getFrame:&aRect];
aRect.origin.x=0.0;
aRect.origin.y=0.0;
[redLettuce setFrame:&aRect];
[greenPeppers setFrame:&aRect];
return self;
}
- advancePhase
{
int eMask=NX_ALLEVENTS;
NXEvent anEvent,*theEvent;
[ginsuView lockFocus];
do {
[[redLettuce oneStep] oneStep];
[[greenPeppers oneStep] oneStep];
if([NXApp peekNextEvent:NX_FLAGSCHANGEDMASK
into:&anEvent]){
theEvent=[NXApp getNextEvent:NX_FLAGSCHANGEDMASK];
if(theEvent->flags & NX_COMMANDMASK) {
if([redLettuce respondsTo:@selector(commandKey)]){
[redLettuce commandKey];
}
if([greenPeppers respondsTo:@selector(commandKey)]){
[greenPeppers commandKey];
}
} else if (theEvent->flags & NX_ALTERNATEMASK) {
if([redLettuce respondsTo:@selector(alternateKey)]){
[redLettuce alternateKey];
}
if([greenPeppers respondsTo:@selector(alternateKey)]){
[greenPeppers alternateKey];
}
}else noDiversions = NO;
}
noDiversions= noDiversions ? ([NXApp
peekNextEvent:eMask into:&anEvent
waitFor:0.0
threshold:NX_BASETHRESHOLD]==NULL) : NO;
} while (cuisanartOn && noDiversions);
[ginsuView unlockFocus];
return self;
}
void phase_advance(DPSTimedEntry teNumber, double now,void *theColeSlaw)
{
[(id) theColeSlaw advancePhase];
}
- startShredder:sender
{
if (!inited) [self doFirstInit];
if (!cuisanartOn){
NXRect bounds;
[[sender selectedCell] setTitle:"noShred"];
cuisanartOn=YES;
[ginsuView lockFocus];
NXSetColor(NX_COLORBLACK);
[ginsuView getBounds:&bounds];
NXRectFill(&bounds);
[saladBowl flushWindow];
[ginsuView unlockFocus];
motor=DPSAddTimedEntry(0.02, &phase_advance,self,
NX_BASETHRESHOLD);
} else {
[[sender selectedCell] setTitle:"Shred"];
cuisanartOn=NO;
DPSRemoveTimedEntry(motor);
}
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.