mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2024-12-18 08:33:37 +00:00
152 lines
2.6 KiB
Objective-C
152 lines
2.6 KiB
Objective-C
|
|
#include "qedefs.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
|
|
|
|
- init
|
|
{
|
|
deselectIndex = -1;
|
|
return self;
|
|
}
|
|
|
|
- setParent:(id)from
|
|
{
|
|
parent_i = from;
|
|
return self;
|
|
}
|
|
|
|
- (BOOL)acceptsFirstMouse
|
|
{
|
|
return YES;
|
|
}
|
|
|
|
- drawSelf:(const NSRect *)rects :(int)rectCount
|
|
{
|
|
int i;
|
|
int max;
|
|
id list_i;
|
|
texpal_t *t;
|
|
int x;
|
|
int y;
|
|
NSPoint p;
|
|
NSRect r;
|
|
int selected;
|
|
|
|
selected = [parent_i getSelectedTexture];
|
|
list_i = [parent_i getList];
|
|
PSselectfont("Helvetica-Medium",FONTSIZE);
|
|
PSrotate(0);
|
|
|
|
PSsetgray(NS_LTGRAY);
|
|
PSrectfill(rects->origin.x, rects->origin.y,
|
|
rects->size.width, rects->size.height);
|
|
|
|
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;
|
|
|
|
PSsetgray(NSGrayComponent(NS_COLORLTGRAY));
|
|
PSrectfill(r.origin.x, r.origin.y,
|
|
r.size.width, r.size.height);
|
|
p = t->r.origin;
|
|
p.y += TEX_SPACING;
|
|
[t->image drawAt:&p];
|
|
PSsetgray(0);
|
|
x = t->r.origin.x;
|
|
y = t->r.origin.y + 7;
|
|
PSmoveto(x,y);
|
|
PSshow(t->name);
|
|
PSstroke();
|
|
deselectIndex = -1;
|
|
}
|
|
|
|
max = [list_i count];
|
|
PSsetgray(0);
|
|
|
|
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[0],&r) == YES &&
|
|
t->display)
|
|
{
|
|
if (selected == i)
|
|
{
|
|
PSsetgray(1);
|
|
PSrectfill(r.origin.x,r.origin.y,
|
|
r.size.width,r.size.height);
|
|
PSsetrgbcolor(1,0,0);
|
|
PSrectstroke(r.origin.x, r.origin.y,
|
|
r.size.width, r.size.height);
|
|
PSsetgray(0);
|
|
}
|
|
|
|
p = t->r.origin;
|
|
p.y += TEX_SPACING;
|
|
[t->image drawAt:&p];
|
|
x = t->r.origin.x;
|
|
y = t->r.origin.y + 7;
|
|
PSmoveto(x,y);
|
|
PSshow(t->name);
|
|
}
|
|
}
|
|
PSstroke();
|
|
return self;
|
|
}
|
|
|
|
- deselect
|
|
{
|
|
deselectIndex = [parent_i getSelectedTexture];
|
|
return self;
|
|
}
|
|
|
|
- mouseDown:(NSEvent *)theEvent
|
|
{
|
|
NSPoint loc;
|
|
int i;
|
|
int max;
|
|
int oldwindowmask;
|
|
texpal_t *t;
|
|
id list;
|
|
NSRect r;
|
|
|
|
oldwindowmask = [window addToEventMask:NS_LMOUSEDRAGGEDMASK];
|
|
loc = theEvent->location;
|
|
[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
|