ftp.nice.ch/Attic/openStep/implementation/gnustep/sources/objcX-0.87.tgz#/objcX-0.87/examples/NXImage/MyView.m

This is MyView.m in view mode; [Download] [Up]

/* Generated by Interface Builder */

#import "MyView.h"
#import <appkit/NXImage.h>
#import <appkit/OpenPanel.h>
#ifdef NeXT
#import <appkit/nextstd.h>
#else
#import <appkit/stdmacros.h>
#import <appkit/graphics.h>
#endif
#import <dpsclient/wraps.h>

@implementation MyView

- readFile:sender
{
    id          openPanel;
    const char *filename;
    const char *const types[] = {"tiff", "tif", "eps", NULL};

    openPanel = [OpenPanel new];
    [openPanel allowMultipleFiles:NO];
    if ([openPanel runModalForTypes:types] &&
		(filename = [openPanel filename])) {
	NX_FREE(theFile);
	theFile = NXCopyStringBuffer(filename);
    	[self display];
    }
    return self;
}

- drawSelf:(const NXRect *)rects :(int)rectCount
{
    NXSize	scaledSize;
    NXSize	imageSize;
    NXPoint	factor;
    NXImage	*image;

    PSsetgray(NX_WHITE);
    NXRectFill(&bounds);
    
    if (!theFile)
        return self;

    image = [[NXImage alloc] initFromFile:theFile];
    
    if (!image) {
	NXRunAlertPanel("Alert", "Error: Cannot load image file.",
		"OK", NULL, NULL);
	return nil;
    }
    [[self window] setTitleAsFilename:theFile];
    [image setScalable:YES];
    [image getSize:&imageSize];


    // Size to current view's size 
    if (!imageSize.width || !imageSize.height) {
        NXRunAlertPanel("Alert",
                        "Error: zero size image- LIB_TIFF is not selected?",
                        "OK", NULL, NULL);
	return nil;
    }
    factor.x = bounds.size.width / imageSize.width;
    factor.y = bounds.size.height / imageSize.height;
    factor.x = factor.y = (factor.x < factor.y) ? factor.x : factor.y;
    scaledSize = bounds.size;
    scaledSize.width = imageSize.width * factor.x;
    scaledSize.height = imageSize.height * factor.y;
    [image setSize:&scaledSize];
    [image composite:NX_SOVER toPoint:&bounds.origin];
    [image free];
    return self;
}

- free
{
    NX_FREE(theFile);
    return [super free];
}

@end

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.