roo_e/thirdparty/grx249/test/curstest.c
2022-05-16 17:59:47 -05:00

106 lines
2.9 KiB
C

/**
** curstest.c ---- test cursors
**
** Copyright (c) 1995 Csaba Biegl, 820 Stirrup Dr, Nashville, TN 37221
** [e-mail: csaba@vuse.vanderbilt.edu]
**
** This is a test/demo file of the GRX graphics library.
** You can use GRX test/demo files as you want.
**
** The GRX graphics library is free software; you can redistribute it
** and/or modify it under some conditions; see the "copying.grx" file
** for details.
**
** This library is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
**
**/
#include "test.h"
char p16d[] = {
0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,
1,2,1,0,0,0,0,0,0,0,0,1,2,2,1,0,
1,2,2,1,0,0,0,0,0,0,1,2,0,0,2,1,
1,2,2,2,1,0,0,0,0,0,1,2,0,0,2,1,
1,2,2,2,2,1,0,0,0,0,0,1,2,2,1,0,
1,2,2,2,2,2,1,0,0,0,0,0,1,1,0,0,
1,2,2,2,2,2,2,1,0,0,0,0,0,0,0,0,
1,2,2,2,2,2,2,2,1,0,0,0,0,0,0,0,
1,2,2,2,2,2,2,2,2,1,0,0,0,0,0,0,
1,2,2,2,2,2,2,2,2,2,1,0,0,0,0,0,
1,2,2,2,2,2,2,2,2,2,2,1,0,0,0,0,
1,2,2,2,2,1,1,1,1,1,1,0,0,0,0,0,
1,2,2,2,1,0,0,0,0,0,0,0,0,0,0,0,
1,2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,
1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
};
TESTFUNC(cursortest)
{
GrColor bgc = GrAllocColor(0,0,128);
GrColor fgc = GrAllocColor(255,255,0);
GrColor msc[3];
GrCursor *cur;
int x,y;
msc[0] = 2;
msc[1] = GrWhite();
msc[2] = GrAllocColor(255,0,0);
cur = GrBuildCursor(p16d,16,16,16,1,1,msc);
x = GrScreenX() / 2;
y = GrScreenY() / 2;
GrMoveCursor(cur,x,y);
GrClearScreen(bgc);
GrSetColor((GrNumColors() - 1),255,255,255);
drawing(0,0,GrSizeX(),GrSizeY(),fgc,GrNOCOLOR);
GrFilledBox(0,0,320,120,GrAllocColor(0,255,255));
GrTextXY( 10,90,"ANDmask",GrBlack(),GrNOCOLOR);
GrTextXY( 90,90,"ORmask", GrBlack(),GrNOCOLOR);
GrTextXY(170,90,"Save", GrBlack(),GrNOCOLOR);
GrTextXY(250,90,"Work", GrBlack(),GrNOCOLOR);
GrDisplayCursor(cur);
for( ; ; ) {
GrBitBlt(
NULL,10,10,
&cur->work,cur->xwork/2,0,cur->xwork/2+cur->xsize-1,cur->ysize-1,
GrWRITE
);
GrBitBlt(
NULL,90,10,
&cur->work,0,0,cur->xsize-1,cur->ysize-1,
GrWRITE
);
GrBitBlt(
NULL,170,10,
&cur->work,0,cur->ysize,cur->xwork-1,cur->ysize+cur->ywork-1,
GrWRITE
);
GrBitBlt(
NULL,250,10,
&cur->work,0,cur->ysize+cur->ywork,cur->xwork-1,cur->ysize+2*cur->ywork-1,
GrWRITE
);
GrTextXY(0,GrMaxY()-20,"Type u d l r U D L R or q to quit",GrWhite(),GrNOCOLOR);
switch(GrKeyRead()) {
case 'u': y--; break;
case 'd': y++; break;
case 'l': x--; break;
case 'r': x++; break;
case 'U': y -= 10; break;
case 'D': y += 10; break;
case 'L': x -= 10; break;
case 'R': x += 10; break;
case 'q': return;
default: continue;
}
if(x < 0) x = 0;
if(x > GrScreenX()) x = GrScreenX();
if(y < 100) y = 100;
if(y > GrScreenY()) y = GrScreenY();
GrMoveCursor(cur,x,y);
}
}