This is xtNXBitmapImageRep.m in view mode; [Download] [Up]
/* NXBitmapImageRep - image representation for bitmapped images Copyright (C) 1993, Adam Fedor. Implementation of display specific methods for X-Windows */ #include "NXBitmapImageRep.h" #include "Application.h" #include "dpsclient/XtGState.h" #include "dpsclient/xwfriends.h" #include "appkit/stdmacros.h" #include "dpsclient/xttools.h" #include <stdlib.h> const char *NXBitmapImageRepInstanceName(void) { return "NXBitmapImageRep"; } @implementation NXBitmapImageRep(ToolKit) - (BOOL)_displayDraw { XWContext context; XtGState *gstate; XImage *image; NSSize pixsize; unsigned char *mapped; u_int depth; PSxwcontext(&context); gstate = (XtGState *)context->gstate; if (!gstate || ![gstate hasDrawable]) { fprintf(stderr, "Error (BitmapImageRep): Focus not locked on any view\n"); return NO; } if (![gstate hasGraphicContext]) { fprintf(stderr, "Error (BitmapImageRep): gstate has no graphic context\n"); return NO; } // Map the colors correctly mapped = _data[0]; depth = DefaultDepth(context->display, DefaultScreen(context->display)); if (context->vinfo.class == PseudoColor) { /* FIXME: Take account for MINISWHITE images */ if (_repFlags.bitsPerSample > 1) { NX_MALLOC(mapped, char, _pixelsWide*_pixelsHigh); xtMapColors(context, _data, (int)_colorSpace, _repFlags.bitsPerSample, _repFlags.numColors, _pixelsWide*_pixelsHigh, _moreRepFlags.isPlanar, mapped); } image = XCreateImage(context->display, context->vinfo.visual, (bitsPerPixel == 1) ? 1 : depth, (bitsPerPixel == 1) ? XYBitmap : ZPixmap, 0, mapped, _pixelsWide, _pixelsHigh, 8, 0); } else image = XCreateImage(context->display, context->vinfo.visual, bitsPerPixel, (bitsPerPixel == 1) ? XYBitmap : ZPixmap, 0, _data[0], _pixelsWide, _pixelsHigh, 8, 0); if (!image) { fprintf(stderr, "Error (BitmapImageRep): Problem creating X image.\n"); return NO; } pixsize.width = _pixelsWide; pixsize.height = _pixelsHigh; [gstate copyImage:image ofSize: &pixsize]; XFree(image); if (mapped != _data[0]) NX_FREE(mapped); return YES; } - (BOOL)_displayDrawIn:(const NXRect *)rect { // We can't scale in X11 so just draw it return [self _displayDraw]; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.