#include "QF/sys.h" #include "KeypairView.h" #include "TextureView.h" #include "TexturePalette.h" #include "Storage.h" /* NOTE: I am specifically not using cached image reps, because the data is also needed for texturing the views, and a cached rep would waste tons of space. */ @implementation TextureView - (id) init { font = [[NSFont systemFontOfSize: FONTSIZE] retain]; deselectIndex = -1; return self; } - (BOOL) isOpaque { return YES; } - (id) setParent: (id)from { parent_i = from; return self; } - (BOOL) acceptsFirstMouse { return YES; } - (id) drawRect: (NSRect)rects { int i; int max; id list_i; texpal_t *t; int x; int y; NSPoint p; NSRect r; int selected; NSMutableDictionary *attribs = [NSMutableDictionary dictionary]; selected = [parent_i getSelectedTexture]; list_i = [parent_i getList]; [font set]; [[NSColor lightGrayColor] set]; NSRectFill (rects); if (!list_i) // WADfile didn't init return self; if (deselectIndex != -1) { t = [list_i elementAt: deselectIndex]; r = t->r; r.origin.x -= TEX_INDENT; r.origin.y -= TEX_INDENT; r.size.width += TEX_INDENT * 2; r.size.height += TEX_INDENT * 2; [[NSColor lightGrayColor] set]; NSRectFill (r); p = t->r.origin; p.y += TEX_SPACING; [t->image drawAtPoint: p]; [[NSColor blackColor] set]; x = t->r.origin.x; y = t->r.origin.y + 7; [[NSString stringWithCString: t->name] drawAtPoint: NSMakePoint (x, y) withAttributes: attribs]; deselectIndex = -1; } max = [list_i count]; [[NSColor blackColor] set]; for (i = 0; i < max; i++) { t = [list_i elementAt: i]; r = t->r; r.origin.x -= TEX_INDENT / 2; r.size.width += TEX_INDENT; r.origin.y += 4; if (NSIntersectsRect (rects, r) == YES && t->display) { if (selected == i) { [[NSColor whiteColor] set]; NSRectFill (r); [[NSColor redColor] set]; NSFrameRect (r); [[NSColor blackColor] set]; } p = t->r.origin; p.y += TEX_SPACING; [t->image drawAtPoint: p]; x = t->r.origin.x; y = t->r.origin.y + 7; [[NSString stringWithCString: t->name] drawAtPoint: NSMakePoint (x, y) withAttributes: attribs]; } } return self; } - (id) deselect { deselectIndex = [parent_i getSelectedTexture]; return self; } - (id) mouseDown: (NSEvent *)theEvent { NSPoint loc; int i; int max; // int oldwindowmask; texpal_t *t; id list; NSRect r; // oldwindowmask = [window addToEventMask:NSLeftMouseDraggedMask]; loc = [theEvent locationInWindow]; loc = [self convertPoint: loc fromView: NULL]; list = [parent_i getList]; max = [list count]; for (i = 0; i < max; i++) { t = [list elementAt: i]; r = t->r; if (NSPointInRect (loc, r) == YES) { [self deselect]; [parent_i setSelectedTexture: i]; break; } } // [window setEventMask:oldwindowmask]; return self; } @end