This is MovieView.m in view mode; [Download] [Up]
#import "MovieView.h"
#import "MovieApp.h"
#import <appkit/Bitmap.h>
#import <appkit/nextstd.h>
#import <appkit/Panel.h>
#import <appkit/Window.h>
#import <objc/List.h>
#import <streams/streams.h>
@implementation MovieView
/* creates a new MovieView instance */
+ newPath:(const char *)thePath Width:(int)w Height:(int)h NumFrames:(int)nf
{
self = [super new];
path = malloc(strlen(thePath));
strcpy(path, thePath);
width = w;
height = h;
currentFrame = 0;
numFrames = nf;
frames = calloc(numFrames, sizeof(id));
return self;
}
/* show a frame, load it if necessary */
- showFrameNumber:(int)frameNumber
{
NXStream *theStream;
NXPoint zeroPoint = {0, 0};
char tempPath[128];
if (frames[frameNumber] == NULL) {
strcpy(tempPath, path);
sprintf(&tempPath[strlen(tempPath)], "/%d.tiff", frameNumber);
frames[frameNumber] = [Bitmap newFromTIFF:tempPath];
if (frames[frameNumber] == NULL) {
NXRunAlertPanel("Error", "Frame %d not found.",
"OK", NULL, NULL, frameNumber);
[window close];
return self;
}
}
currentFrame = frameNumber;
[self lockFocus];
[frames[currentFrame] composite:NX_COPY toPoint:&zeroPoint];
[self unlockFocus];
return self;
}
/* respond to inquiries */
- (int)numFrames
{ return numFrames; }
- (int)currentFrame
{ return currentFrame; }
/* clean up */
- free
{
int i;
for (i = 0; i < numFrames; i++)
if (frames[i])
[frames[i] free];
free(frames);
free(path);
return[super free];
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.