mirror of
https://github.com/id-Software/Quake-Tools.git
synced 2026-03-19 16:39:31 +01:00
Source release of QuakeEd, the map editing application on NEXTSTEP for Quake.
This commit is contained in:
152
QuakeEd/TextureView.m
Normal file
152
QuakeEd/TextureView.m
Normal file
@@ -0,0 +1,152 @@
|
||||
|
||||
#import "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 NXRect *)rects :(int)rectCount
|
||||
{
|
||||
int i;
|
||||
int max;
|
||||
id list_i;
|
||||
texpal_t *t;
|
||||
int x;
|
||||
int y;
|
||||
NXPoint p;
|
||||
NXRect r;
|
||||
int selected;
|
||||
|
||||
selected = [parent_i getSelectedTexture];
|
||||
list_i = [parent_i getList];
|
||||
PSselectfont("Helvetica-Medium",FONTSIZE);
|
||||
PSrotate(0);
|
||||
|
||||
PSsetgray(NX_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(NXGrayComponent(NX_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 (NXIntersectsRect(&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:(NXEvent *)theEvent
|
||||
{
|
||||
NXPoint loc;
|
||||
int i;
|
||||
int max;
|
||||
int oldwindowmask;
|
||||
texpal_t *t;
|
||||
id list;
|
||||
NXRect r;
|
||||
|
||||
oldwindowmask = [window addToEventMask:NX_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 (NXPointInRect(&loc,&r) == YES)
|
||||
{
|
||||
[self deselect];
|
||||
[parent_i setSelectedTexture:i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
[window setEventMask:oldwindowmask];
|
||||
return self;
|
||||
}
|
||||
|
||||
@end
|
||||
Reference in New Issue
Block a user