?? vid_next.m
字號:
psrc = (byte *)src;
// srcdelta += width;
// rowdelta += width;
for (y = height ; y ; y--)
{
for (x = xcount ; x ;x--)
{
pdest[0] = ((byte *)pcolormap[0])[psrc[0]];
pdest[1] = ((byte *)pcolormap[0])[psrc[1]];
pdest[2] = ((byte *)pcolormap[0])[psrc[2]];
pdest[3] = ((byte *)pcolormap[0])[psrc[3]];
pdest[4] = ((byte *)pcolormap[0])[psrc[4]];
pdest[5] = ((byte *)pcolormap[0])[psrc[5]];
pdest[6] = ((byte *)pcolormap[0])[psrc[6]];
pdest[7] = ((byte *)pcolormap[0])[psrc[7]];
pdest += 8; psrc += 8;
}
psrc += srcdelta;
pdest += rowdelta;
}
}
}
}
/*
===================
Update16_1
===================
*/
void Update16_1 (pixel_t *src, unsigned short *dest, int width,
int height, int destrowbytes)
{
int x,y;
unsigned rowdelta, srcdelta;
unsigned xcount;
pixel_t *psrc;
unsigned short *pdest;
int xwidth;
psrc = src;
pdest = dest;
xcount = width >> 3;
srcdelta = vid.width - width;
xwidth = width - (xcount << 3);
if (xwidth)
Sys_Error ("Width not multiple of 8");
if ((vid_display == disp_framebuffer) && (vid_scale == 2))
{
int nextrow = destrowbytes >> 1;
rowdelta = (destrowbytes - ((width << 1) << 1) + destrowbytes) >> 1;
if (dither)
{
for (y = height ; y ; y--)
{
for (x = xcount ; x ;x--)
{
unsigned temp;
temp = psrc[0];
pdest[0] = ((unsigned short *)pcolormap[0])[temp];
pdest[1] = ((unsigned short *)pcolormap[1])[temp];
pdest[nextrow] = ((unsigned short *)pcolormap[2])[temp];
pdest[nextrow + 1] = ((unsigned short *)pcolormap[3])[temp];
temp = psrc[1];
pdest[2] = ((unsigned short *)pcolormap[0])[temp];
pdest[3] = ((unsigned short *)pcolormap[1])[temp];
pdest[nextrow + 2] = ((unsigned short *)pcolormap[2])[temp];
pdest[nextrow + 3] = ((unsigned short *)pcolormap[3])[temp];
temp = psrc[2];
pdest[4] = ((unsigned short *)pcolormap[0])[temp];
pdest[5] = ((unsigned short *)pcolormap[1])[temp];
pdest[nextrow + 4] = ((unsigned short *)pcolormap[2])[temp];
pdest[nextrow + 5] = ((unsigned short *)pcolormap[3])[temp];
temp = psrc[3];
pdest[6] = ((unsigned short *)pcolormap[0])[temp];
pdest[7] = ((unsigned short *)pcolormap[1])[temp];
pdest[nextrow + 6] = ((unsigned short *)pcolormap[2])[temp];
pdest[nextrow + 7] = ((unsigned short *)pcolormap[3])[temp];
temp = psrc[4];
pdest[8] = ((unsigned short *)pcolormap[0])[temp];
pdest[9] = ((unsigned short *)pcolormap[1])[temp];
pdest[nextrow + 8] = ((unsigned short *)pcolormap[2])[temp];
pdest[nextrow + 9] = ((unsigned short *)pcolormap[3])[temp];
temp = psrc[5];
pdest[10] = ((unsigned short *)pcolormap[0])[temp];
pdest[11] = ((unsigned short *)pcolormap[1])[temp];
pdest[nextrow + 10] = ((unsigned short *)pcolormap[2])[temp];
pdest[nextrow + 11] = ((unsigned short *)pcolormap[3])[temp];
temp = psrc[6];
pdest[12] = ((unsigned short *)pcolormap[0])[temp];
pdest[13] = ((unsigned short *)pcolormap[1])[temp];
pdest[nextrow + 12] = ((unsigned short *)pcolormap[2])[temp];
pdest[nextrow + 13] = ((unsigned short *)pcolormap[3])[temp];
temp = psrc[7];
pdest[14] = ((unsigned short *)pcolormap[0])[temp];
pdest[15] = ((unsigned short *)pcolormap[1])[temp];
pdest[nextrow + 14] = ((unsigned short *)pcolormap[2])[temp];
pdest[nextrow + 15] = ((unsigned short *)pcolormap[3])[temp];
pdest += 16; psrc += 8;
}
psrc += srcdelta;
pdest += rowdelta;
}
}
else
{
for (y = height ; y ; y--)
{
for (x = xcount ; x ;x--)
{
pdest[0] = pdest[1] = pdest[nextrow] =
pdest[nextrow + 1] = pcolormap[0][psrc[0]];
pdest[2] = pdest[3] = pdest[nextrow + 2] =
pdest[nextrow + 3] = pcolormap[0][psrc[1]];
pdest[4] = pdest[5] = pdest[nextrow + 4] =
pdest[nextrow + 5] = pcolormap[0][psrc[2]];
pdest[6] = pdest[7] = pdest[nextrow + 6] =
pdest[nextrow + 7] = pcolormap[0][psrc[3]];
pdest[8] = pdest[9] = pdest[nextrow + 8] =
pdest[nextrow + 9] = pcolormap[0][psrc[4]];
pdest[10] = pdest[11] = pdest[nextrow + 10] =
pdest[nextrow + 11] = pcolormap[0][psrc[5]];
pdest[12] = pdest[13] = pdest[nextrow + 12] =
pdest[nextrow + 13] = pcolormap[0][psrc[6]];
pdest[14] = pdest[15] = pdest[nextrow + 14] =
pdest[nextrow + 15] = pcolormap[0][psrc[7]];
pdest += 16; psrc += 8;
}
psrc += srcdelta;
pdest += rowdelta;
}
}
}
else
{
rowdelta = (destrowbytes - (width<<1))>>1;
if (dither)
{
for (y = height ; y>0 ; y -= 2)
{
for (x = xcount ; x ;x--)
{
pdest[0] = ((unsigned short *)pcolormap[0])[psrc[0]];
pdest[1] = ((unsigned short *)pcolormap[1])[psrc[1]];
pdest[2] = ((unsigned short *)pcolormap[0])[psrc[2]];
pdest[3] = ((unsigned short *)pcolormap[1])[psrc[3]];
pdest[4] = ((unsigned short *)pcolormap[0])[psrc[4]];
pdest[5] = ((unsigned short *)pcolormap[1])[psrc[5]];
pdest[6] = ((unsigned short *)pcolormap[0])[psrc[6]];
pdest[7] = ((unsigned short *)pcolormap[1])[psrc[7]];
pdest += 8; psrc += 8;
}
psrc += srcdelta;
pdest += rowdelta;
for (x = xcount ; x ;x--)
{
pdest[0] = ((unsigned short *)pcolormap[2])[psrc[0]];
pdest[1] = ((unsigned short *)pcolormap[3])[psrc[1]];
pdest[2] = ((unsigned short *)pcolormap[2])[psrc[2]];
pdest[3] = ((unsigned short *)pcolormap[3])[psrc[3]];
pdest[4] = ((unsigned short *)pcolormap[2])[psrc[4]];
pdest[5] = ((unsigned short *)pcolormap[3])[psrc[5]];
pdest[6] = ((unsigned short *)pcolormap[2])[psrc[6]];
pdest[7] = ((unsigned short *)pcolormap[3])[psrc[7]];
pdest += 8; psrc += 8;
}
psrc += srcdelta;
pdest += rowdelta;
}
}
else
{
for (y = height ; y ; y--)
{
for (x = xcount ; x ;x--)
{
pdest[0] = pcolormap[0][psrc[0]];
pdest[1] = pcolormap[0][psrc[1]];
pdest[2] = pcolormap[0][psrc[2]];
pdest[3] = pcolormap[0][psrc[3]];
pdest[4] = pcolormap[0][psrc[4]];
pdest[5] = pcolormap[0][psrc[5]];
pdest[6] = pcolormap[0][psrc[6]];
pdest[7] = pcolormap[0][psrc[7]];
pdest += 8; psrc += 8;
}
psrc += srcdelta;
pdest += rowdelta;
}
}
}
}
/*
===================
Update32_1
===================
*/
void Update32_1 (pixel_t *src, unsigned *dest, int width, int height,
int destrowbytes)
{
int x,y;
unsigned rowdelta, srcdelta;
unsigned xcount;
pixel_t *psrc;
unsigned *pdest;
int xwidth;
psrc = src;
pdest = dest;
xcount = width >> 3;
srcdelta = vid.width - width;
xwidth = width - (xcount << 3);
if (xwidth)
Sys_Error ("Width not multiple of 8");
if ((vid_display == disp_framebuffer) && (vid_scale == 2))
{
int nextrow = destrowbytes >> 2;
rowdelta = ((destrowbytes - ((width << 1) << 2)) >> 2) +
(destrowbytes >> 2);
for (y = height ; y ; y--)
{
for (x = xcount ; x ;x--)
{
pdest[0] = pdest[1] = pdest[nextrow] =
pdest[nextrow + 1] = pcolormap[0][psrc[0]];
pdest[2] = pdest[3] = pdest[nextrow + 2] =
pdest[nextrow + 3] = pcolormap[0][psrc[1]];
pdest[4] = pdest[5] = pdest[nextrow + 4] =
pdest[nextrow + 5] = pcolormap[0][psrc[2]];
pdest[6] = pdest[7] = pdest[nextrow + 6] =
pdest[nextrow + 7] = pcolormap[0][psrc[3]];
pdest[8] = pdest[9] = pdest[nextrow + 8] =
pdest[nextrow + 9] = pcolormap[0][psrc[4]];
pdest[10] = pdest[11] = pdest[nextrow + 10] =
pdest[nextrow + 11] = pcolormap[0][psrc[5]];
pdest[12] = pdest[13] = pdest[nextrow + 12] =
pdest[nextrow + 13] = pcolormap[0][psrc[6]];
pdest[14] = pdest[15] = pdest[nextrow + 14] =
pdest[nextrow + 15] = pcolormap[0][psrc[7]];
pdest += 16; psrc += 8;
}
psrc += srcdelta;
pdest += rowdelta;
}
}
else
{
rowdelta = (destrowbytes - (width<<2))>>2;
for (y = height ; y ; y--)
{
for (x = xcount ; x ;x--)
{
pdest[0] = pcolormap[0][psrc[0]];
pdest[1] = pcolormap[0][psrc[1]];
pdest[2] = pcolormap[0][psrc[2]];
pdest[3] = pcolormap[0][psrc[3]];
pdest[4] = pcolormap[0][psrc[4]];
pdest[5] = pcolormap[0][psrc[5]];
pdest[6] = pcolormap[0][psrc[6]];
pdest[7] = pcolormap[0][psrc[7]];
pdest += 8; psrc += 8;
}
psrc += srcdelta;
pdest += rowdelta;
}
}
}
/*
==========================================================================
NEXTSTEP VIEW CLASS
==========================================================================
*/
@implementation QuakeView
/*
=================
windowDidMove
=================
*/
- windowDidMove:sender
{
NXPoint aPoint;
NXRect winframe;
aPoint.x = aPoint.y = 0;
[self convertPoint:&aPoint toView:nil];
[window convertBaseToScreen: &aPoint];
[window getFrame: &winframe];
if ((int)aPoint.x & 7)
{
[window moveTo:winframe.origin.x - ((int)aPoint.x&7)
:winframe.origin.y];
[window getFrame: &winframe];
}
return self;
}
- windowWillResize:sender toSize:(NXSize *)frameSize
{
NXRect fr, cont;
fr.origin.x = fr.origin.y = 0;
fr.size = *frameSize;
[Window getContentRect:&cont forFrameRect: &fr style:[window style]];
cont.size.width = (int)cont.size.width & ~15;
if (cont.size.width < 128)
cont.size.width = 128;
cont.size.height = (int)cont.size.height & ~3;
if (cont.size.height < 32)
cont.size.height = 32;
[Window getFrameRect:&fr forContentRect: &cont style:[window style]];
*frameSize = fr.size;
return self;
}
- windowDidResize:sender
{
if (vid_display == disp_framebuffer)
Sys_Error ("How the heck are you resizing a framebuffer window?!?");
vid.width = bounds.size.width/vid_scale;
vid.height = bounds.size.height/vid_scale;
//
// allocate memory for the back and translation buffers
//
vid.rowbytes = vid.width;
rowbytesnative = vid.width * pixbytesnative;
AllocBuffers (true);
vid.conbuffer = vid.buffer;
vid.conrowbytes = vid.rowbytes;
vid.conwidth = vid.width;
vid.conheight = vid.height;
vid.recalc_refdef = 1;
return self;
}
-(BOOL) acceptsFirstResponder
{
return YES;
}
typedef struct
{
int source, dest;
} keymap_t;
keymap_t keymaps[] =
{
{103, K_RIGHTARROW},
{102, K_LEFTARROW},
{100, K_UPARROW},
{101, K_DOWNARROW},
{111, K_PAUSE},
{59, K_F1},
{60, K_F2},
{61, K_F3},
{62, K_F4},
{63, K_F5},
{64, K_F6},
{65, K_F7},
{66, K_F8},
{67, K_F9},
{68, K_F10},
{87, K_F11},
{88, K_F12},
{-1,-1}
};
keymap_t flagmaps[] =
{
{NX_SHIFTMASK, K_SHIFT},
{NX_CONTROLMASK, K_CTRL},
{NX_ALTERNATEMASK, K_ALT},
{NX_COMMANDMASK, K_ALT},
{-1,-1}
};
/*
===================
keyboard methods
===================
*/
- keyDown:(NXEvent *)theEvent
{
int ch;
keymap_t *km;
PSobscurecursor ();
// check for non-ascii first
ch = theEvent->data.key.keyCode;
for (km=keymaps;km->source!=-1;km++)
if (ch == km->source)
{
Key_Event (km->dest, true);
return self;
}
ch = theEvent->data.key.charCode;
if (ch >= 'A' && ch <= 'Z')
ch += 'a' - 'A';
if (ch>=256)
return self;
Key_Event (ch, true);
return self;
}
- flagsChanged:(NXEvent *)theEvent
{
static int oldflags;
int newflags;
int delta;
keymap_t *km;
int i;
PSobscurecursor ();
newflags = theEvent->flags;
delta = newflags ^ oldflags;
for (i=0 ; i<32 ; i++)
{
if ( !(delta & (1<<i)))
continue;
// changed
for (km=flagmaps;km->source!=-1;km++)
if ( (1<<i) == km->source)
{
if (newflags & (1<<i))
Key_Event (km->dest, true);
else
Key_Event (km->dest, false);
}
}
oldflags = newflags;
return self;
}
- keyUp:(NXEvent *)theEvent
{
int ch;
keymap_t *km;
// check for non-ascii first
ch = theEvent->data.key.keyCode;
for (km=keymaps;km->source!=-1;km++)
if (ch == km->source)
{
Key_Event (km->dest, false);
return self;
}
ch = theEvent->data.key.charCode;
if (ch >= 'A' && ch <= 'Z')
ch += 'a' - 'A';
if (ch>=256)
return self;
Key_Event (ch, false);
return self;
}
- tiffShot
{
id imagerep, image;
NXRect r;
NXStream *stream;
int fd;
int i;
char tiffname[80];
[vid_window_i getFrame: &r];
r.origin.x = r.origin.y = 0;
image = [[NXImage alloc] initSize: &r.size];
imagerep = [[NXCachedImageRep alloc] initFromWindow:vid_window_i rect:&r];
[image lockFocus];
[imagerep draw];
[image unlockFocus];
//
// find a file name to save it to
//
strcpy(tiffname,"quake00.tif");
for (i=0 ; i<=99 ; i++)
{
tiffname[5] = i/10 + '0';
tiffname[6] = i%10 + '0';
if (Sys_FileTime(tiffname) == -1)
break; // file doesn't exist
}
if (i==100)
Sys_Error ("SCR_ScreenShot_f: Couldn't create a tiff");
fd = open (tiffname, O_RDWR|O_CREAT|O_TRUNC, 0666);
stream = NXOpenFile (fd, NX_READWRITE);
[image writeTIFF: stream];
NXClose (stream);
close (fd);
printf ("wrote %s\n", tiffname);
[image free];
[imagerep free];
return self;
}
- screenShot: sender
{
return [self tiffShot];
}
- setScaleFullScreen: sender
{
VID_Shutdown ();
if (vid_fullscreen)
{
vid_fullscreen = 0;
VID_Restart (vid_display, vid_scale);
}
else
{
vid_fullscreen = 1;
VID_Restart (vid_display, vid_scale);
}
return self;
}
@end
//============================================================================
@implementation FrameWindow
- windowExposed:(NXEvent *)theEvent
{
return self;
}
@end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -