This is ns_main.m in view mode; [Download] [Up]
/* * Filename: ns_main.m * Project: Pascal's NSX Kit * * Author: Pascal Forget * Date: January 1996 * * Copyright (C) 1996 Free Software Foundation */ #include "ns_main.h" #include <gnustep/PXKDrawingEngine.h> #include <AppKit/NSWindow.h> void drawLines(NSWindow *win) { NSPoint a, b; NSRect aLine; NSRect rect; a.x = 10; a.y = 5; b.x = 100; b.y = 50; [(NSView *)[win contentView] lockFocus]; aLine.origin.x = a.x; aLine.origin.y = a.y; aLine.size.width = 90; aLine.size.height = 35; rect.origin.x = 20.0; rect.origin.y = 10.0; rect.size.width = 300.0; rect.size.height = 150.0; aLine = clipLineToRect(aLine, rect); a.x = aLine.origin.x; a.y = aLine.origin.y; b.x = aLine.origin.x + aLine.size.width; b.y = aLine.origin.y + aLine.size.height; fprintf(stderr, "clipped line: %3.0f %3.0f %3.0f %3.0f\n", a.x, a.y, b.x, b.y); pxkDrawLine(a,b,[NSColor blackColor]); [(NSView *)[win contentView] unlockFocus]; [win display]; } void testLineIntersection(void) { NSRect rectA, rectB; NSPoint intersect; rectA.origin.x = 100.0; rectA.origin.y = 100.0; rectA.size.width = 100.0; rectA.size.height = 0.0; rectB.origin.x = 150.0; rectB.origin.y = 100.0; rectB.size.width = 0.0; rectB.size.height = 100.0; intersect = intersectionPoint(rectA, rectB); fprintf(stdout, "intersection: %3.0f %3.0f\n", intersect.x, intersect.y); } void drawRect(NSWindow *win) { NSRect rect; fprintf(stderr, "Drawing rect...\n"); rect.origin.x = 20.0; rect.origin.y = 10.0; rect.size.width = 300.0; rect.size.height = 150.0; [(NSView *)[win contentView] lockFocus]; NSFrameRect(rect); [(NSView *)[win contentView] unlockFocus]; [win display]; printf("Done.\n"); sleep(1); } void drawButtons(NSWindow *win) { NSPoint a, b; NSRect aLine; NSRect rect; a.x = 60; a.y = 200; b.x = 100; b.y = 220; [(NSView *)[win contentView] lockFocus]; aLine.origin.x = a.x; aLine.origin.y = a.y; aLine.size.width = 90; aLine.size.height = 35; rect.origin.x = 0.0; rect.origin.y = 0.0; rect.size.width = 900.0; rect.size.height = 950.0; NSDrawButton(aLine, rect); /* here the button fits entirely in clipRect */ aLine.origin.x = 200.0; rect.origin.x = 220.0; /* here we'll have to clip */ NSDrawButton(aLine, rect); [(NSView *)[win contentView] unlockFocus]; [win display]; } void drawBox(NSWindow *win) { NSRect aLine; NSRect rect; [(NSView *)[win contentView] lockFocus]; aLine.origin.x = 60; aLine.origin.y = 40; aLine.size.width = 100; aLine.size.height = 60; rect.origin.x = 0.0; rect.origin.y = 0.0; rect.size.width = 900.0; rect.size.height = 950.0; NSDrawGroove(aLine, rect); [(NSView *)[win contentView] unlockFocus]; [win display]; } void drawBezel(NSWindow *win) { NSRect aLine; NSRect rect; [(NSView *)[win contentView] lockFocus]; aLine.origin.x = 200; aLine.origin.y = 40; aLine.size.width = 60; aLine.size.height = 60; rect.origin.x = 100.0; rect.origin.y = 0.0; rect.size.width = 400.0; rect.size.height = 400.0; pxkFillRect(aLine, [NSColor whiteColor]); NSDrawGrayBezel(aLine, rect); [(NSView *)[win contentView] unlockFocus]; [win display]; } int main(int argc, char **argv) { NSRect rect; int i; int windowId; NSWindow *win; initializeDrawingEngine(); /* Create a new window */ #if 0 rect.origin.x = 0; rect.origin.y = 0; rect.size.width = 400; rect.size.height = 300; win = [[NSWindow alloc] initWithContentRect:rect styleMask:0 backing:NSBackingStoreBuffered defer:NO]; /* Display the window */ [win display]; windowId = [win windowNumber]; #endif #if 0 [win close]; sleep(2); [win display]; sleep(2); /* Resize the window */ printf("Heightening window\n"); for (i=0; i<4; i++ ) { rect.size.height += 50; //setWindowFrameSize(windowId, rect.size); //displayWindow(windowId); [win setFrame:rect display:YES]; sleep(1); } printf("done.\n"); sleep(1); printf("Widening window\n"); for (i=0; i<4; i++ ) { rect.size.width += 50; setWindowFrameSize(windowId, rect.size); displayWindow(windowId); sleep(1); } printf("done.\n"); sleep(1); #endif #if 0 /* Move and resize at the same time */ printf("Moving and resizing window\n"); for (i=0; i<200; i+=50) { rect.origin.x = 100 + i; rect.origin.y = 300 + i; rect.size.width = 400 + i; rect.size.height = 200 + i; [win setFrame:rect display:YES]; //setWindowFrame(windowId, rect); //displayWindow(windowId); sleep(1); } printf("done.\n"); #endif /* Draw lines in the content view */ drawLines(win); /* Test the intersection of two 2D lines */ testLineIntersection(); drawRect(win); drawButtons(win); sleep(1); drawBox(win); drawBezel(win); sleep(8); return 0; }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.