This is PXKTestImage.m in view mode; [Download] [Up]
/* PXKTestImage.m Copyright (C) 1996 Free Software Foundation, Inc. Author: Pascal Forget <pascal@wsc.com> Date: October 1995 This file is part of the GNUstep GUI X/DPS Backend. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. If you are interested in a warranty or support for this source code, contact Scott Christley <scottc@net-community.com> for more information. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include <gnustep/xdps/PXKTestImage.h> #include <gnustep/xdps/PXKScreen.h> NSMutableArray *_pxkImages; @implementation PXKTestImage + imageNamed:(const char *)str; { int i, count = [_pxkImages count]; id image; #if 0 fprintf(stdout, "images: %d\n", count); #endif for (i=0; i<count; i++) { image = [_pxkImages objectAtIndex:i]; if (!strcmp((const char *)[image name], str)) { return image; } } puts("PXKImage imageNamed: Image not found\n"); return nil; } + initialize; { if (!_pxkImages) { _pxkImages = [[NSMutableArray alloc] initWithCapacity:15]; } return self; } - drawInView:(PXKView *)view at:(NSPoint)location; { NSPoint p = location; XPutImage(pxkDisplay, [view xWindow], pxkBlackGC, xImage, 0, 0, p.x, p.y, frame.size.width, frame.size.height); return self; } - buildImageFromString:(const char *)image; { char buf[15]; int version; int width; int height; int x, y; char pixel; XColor c1, c2; unsigned int white = WhitePixel(pxkDisplay, [(PXKScreen *)[NSScreen mainScreen] xScreen]); unsigned int lightgray; unsigned int darkgray; unsigned int black = BlackPixel(pxkDisplay, [(PXKScreen *)[NSScreen mainScreen] xScreen]); strncpy(buf, image+12, 4); width = atoi(buf); strncpy(buf, image+16, 4); height = atoi(buf); #if 0 fprintf(stdout, "width: %d height: %d\n", width, height); #endif XAllocNamedColor(pxkDisplay, XDefaultColormap(pxkDisplay, [(PXKScreen *)[NSScreen mainScreen] xScreen]), "light gray", &c1, &c2); lightgray = c1.pixel; XAllocNamedColor(pxkDisplay, XDefaultColormap(pxkDisplay, [(PXKScreen *)[NSScreen mainScreen] xScreen]), "dark gray", &c1, &c2); darkgray = c1.pixel; for (y=0; y<height; y++) { for (x=0; x<width; x++) { pixel = image[20 + x + y*width]; #if 0 fprintf(stdout, "%c", pixel); #endif switch(pixel) { case 'g': XPutPixel(xImage, x, y, lightgray); break; case 'b': XPutPixel(xImage, x, y, black); break; case 'G': XPutPixel(xImage, x, y, darkgray); break; case 'w': XPutPixel(xImage, x, y, white); break; default: break; } } #if 0 fprintf(stdout, "\n"); #endif } return self; } - initWithSize:(NSSize)initialSize; { int x, y; XColor c1, c2; NSSize si = initialSize; [super init]; size = si; #if 0 puts("PXKImage: initWithSize:"); #endif /* * This is the only way I found to reliably create an x image. */ xImage = XGetImage(pxkDisplay, RootWindow(pxkDisplay, [(PXKScreen *)[NSScreen mainScreen] xScreen]), 0,0, size.width, size.height, AllPlanes, XYPixmap); #if 0 /* * Fill the image with the default color, lightgray */ XAllocNamedColor(pxkDisplay, XDefaultColormap(pxkDisplay, [(PXKScreen *)[NSScreen mainScreen] xScreen]), "light gray", &c1, &c2); for (x=0; x<size.width; x++) { for (y=0; y<size.height; y++) { XPutPixel(xImage, x, y, c1.pixel); } } XPutPixel(xImage, 5,5, BlackPixel(pxkDisplay, [(PXKScreen *)[NSScreen mainScreen] xScreen])); XPutPixel(xImage, 5,6, BlackPixel(pxkDisplay, [(PXKScreen *)[NSScreen mainScreen] xScreen])); XPutPixel(xImage, 5,7, BlackPixel(pxkDisplay, [(PXKScreen *)[NSScreen mainScreen] xScreen])); XPutPixel(xImage, 5,8, BlackPixel(pxkDisplay, [(PXKScreen *)[NSScreen mainScreen] xScreen])); XPutPixel(xImage, 6,5, BlackPixel(pxkDisplay, [(PXKScreen *)[NSScreen mainScreen] xScreen])); XPutPixel(xImage, 6,6, BlackPixel(pxkDisplay, [(PXKScreen *)[NSScreen mainScreen] xScreen])); XPutPixel(xImage, 6,7, BlackPixel(pxkDisplay, [(PXKScreen *)[NSScreen mainScreen] xScreen])); XPutPixel(xImage, 6,8, BlackPixel(pxkDisplay, [(PXKScreen *)[NSScreen mainScreen] xScreen])); XPutPixel(xImage, 7,5, BlackPixel(pxkDisplay, [(PXKScreen *)[NSScreen mainScreen] xScreen])); XPutPixel(xImage, 7,6, BlackPixel(pxkDisplay, [(PXKScreen *)[NSScreen mainScreen] xScreen])); XPutPixel(xImage, 7,7, BlackPixel(pxkDisplay, [(PXKScreen *)[NSScreen mainScreen] xScreen])); XPutPixel(xImage, 7,8, BlackPixel(pxkDisplay, [(PXKScreen *)[NSScreen mainScreen] xScreen])); #endif [_pxkImages addObject:self]; return self; } - initFromBitmap:(char *)bits size:(NSSize)newSize; { NSSize si = newSize; [super init]; size = si; /* See X book number 1, page 157-158 */ fprintf(stdout, "w: %d h:%d\n", size.width, size.height); #if 0 xPixmap = XCreateBitmapFromData(pxkDisplay, RootWindow(pxkDisplay, [(PXKScreen *)[NSScreen mainScreen] xScreen]), _pxkRightArrow_bitmap, 15, 15); #endif puts("Pixmap created"); [_pxkImages addObject:self]; puts("image added"); return self; } - initFromPath:(const char *)filename size:(NSSize)newSize; { NSSize si = newSize; size = si; /* Not implemented, see X book number 1, page 157-158 */ [_pxkImages addObject:self]; return self; } - (const char *)name; { return name; } - setName:(const char *)newName; { if (name != NULL) { free(name); } if (newName != NULL) { name = (char *)malloc(strlen(newName) + 1); strcpy(name, newName); } return self; } - (NSSize)size; { return size; } - (XImage *)xImage; { return xImage; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.