static void draw_special(void) { int xpos = MSCURSOR->xcord; int ypos = MSCURSOR->ycord; int check = MOUINFO->docheck; GrContext csave; MOUINFO->docheck = FALSE; GrSaveContext(&csave); GrSetContext(SCRN); switch (CURSORMODE) { case GR_M_CUR_RUBBER: GrBox(xpos, ypos, MOUINFO->x1, MOUINFO->y1, MOUINFO->curscolor); break; case GR_M_CUR_LINE: GrLine(xpos, ypos, MOUINFO->x1, MOUINFO->y1, MOUINFO->curscolor); break; case GR_M_CUR_BOX: GrBox((xpos+MOUINFO->x1), (ypos+MOUINFO->y1), (xpos+MOUINFO->x2), (ypos+MOUINFO->y2), MOUINFO->curscolor); break; } GrSetContext(&csave); MOUINFO->docheck = check; }
static void TestFunc(void) { int x = GrSizeX(); int y = GrSizeY(); int ww = (x / 2) - 10; int wh = (y / 2) - 10; GrColor c; GrContext *w1 = GrCreateSubContext(5, 5, ww+4, wh+4, NULL, NULL); GrContext *w2 = GrCreateSubContext(15+ww, 5, ww+ww+14, wh+4, NULL, NULL); GrContext *w3 = GrCreateSubContext(5, 15+wh, ww+4, wh+wh+14, NULL, NULL); GrContext *w4 = GrCreateSubContext(15+ww, 15+wh, ww+ww+14, wh+wh+14, NULL, NULL); GrSetContext(w1); c = GrAllocColor(200, 100, 100); drawing(0, 0, ww, wh, c, GrBlack()); GrBox(0, 0, ww-1, wh-1, c); GrSetContext(w2); c = GrAllocColor(100, 200, 200); drawing(0, 0, ww, wh, c, GrBlack()); GrBox(0, 0, ww-1, wh-1, c); GrSetContext(w3); c = GrAllocColor(200, 200, 0); drawing(0, 0, ww, wh, c, GrBlack()); GrBox(0, 0,ww-1, wh-1, c); GrSetContext(w4); c = GrAllocColor(0, 100, 200); drawing(0, 0, ww, wh, c, GrBlack()); GrBox(0, 0, ww-1, wh-1, c); GrSetContext(NULL); }
int main(void) { GrContext *grc; int wide, high, maxval; char s[81]; GrEvent ev; /*GrSetMode( GR_default_graphics ); */ GrSetMode(GR_width_height_color_graphics, 640, 480, 32768); GrEventInit(); GrMouseDisplayCursor(); GrQueryPnm(FIMAGEPPM, &wide, &high, &maxval); sprintf(s, "%s %d x %d pixels", FIMAGEPPM, wide, high); GrTextXY(10, 20, s, GrBlack(), GrWhite()); GrBox(10, 40, 10+wide+1, 40+high+1, GrWhite()); grc = GrCreateSubContext(11, 41, 11+wide-1, 41+high-1, NULL, NULL); GrLoadContextFromPnm(grc, FIMAGEPPM); GrSaveContextToPgm(grc, FIMAGEPGM, "TestPnm"); GrDestroyContext(grc); GrTextXY(10, 50+high, "Press RETURN to continue", GrBlack(), GrWhite()); GrEventWaitKeyOrClick(&ev); GrClearScreen(GrBlack()); GrQueryPnm(FIMAGEPGM, &wide, &high, &maxval); sprintf(s, "%s %d x %d pixels", FIMAGEPGM, wide, high); GrTextXY(10, 20, s, GrBlack(), GrWhite()); GrBox(10, 40, 10+wide+1, 40+high+1, GrWhite()); grc = GrCreateSubContext(11, 41, 11+wide-1, 41+high-1, NULL, NULL); GrLoadContextFromPnm(grc,FIMAGEPGM); GrDestroyContext(grc); GrTextXY(10, 50+high, "Press RETURN to continue", GrBlack(), GrWhite()); GrEventWaitKeyOrClick(&ev); GrClearScreen(GrBlack()); GrQueryPnm(FIMAGEPBM, &wide, &high, &maxval); sprintf(s, "%s %d x %d pixels", FIMAGEPBM, wide, high); GrTextXY(10, 20, s, GrBlack(), GrWhite()); GrBox(10, 40, 10+wide+1, 40+high+1, GrWhite()); grc = GrCreateSubContext(11, 41, 11+wide-1, 41+high-1, NULL, NULL); GrLoadContextFromPnm(grc,FIMAGEPBM); GrSaveContextToPbm(grc, FIMAGEPBM2, "TestPnm"); GrDestroyContext(grc); GrTextXY(10, 50+high, "Press RETURN to continue", GrBlack(), GrWhite()); GrEventWaitKeyOrClick(&ev); GrClearScreen(GrBlack()); GrQueryPnm(FIMAGEPPM, &wide, &high, &maxval); GrBox(10, 40, 10+wide+1, 40+high+1, GrWhite()); grc = GrCreateSubContext(11, 41, 11+wide-1, 41+high-1, NULL, NULL); GrLoadContextFromPnm(grc,FIMAGEPPM); GrDestroyContext(grc); GrQueryPnm(FIMAGEPGM, &wide, &high, &maxval); GrBox(110, 140, 110+wide+1, 140+high+1, GrWhite()); grc = GrCreateSubContext(111, 141, 111+wide-1, 141+high-1, NULL, NULL); GrLoadContextFromPnm(grc, FIMAGEPGM); GrDestroyContext(grc); GrQueryPnm(FIMAGEPBM, &wide, &high, &maxval); GrBox(210, 240, 210+wide+1, 240+high+1, GrWhite()); grc = GrCreateSubContext(211, 241, 211+wide-1, 241+high-1, NULL, NULL); GrLoadContextFromPnm(grc,FIMAGEPBM2); GrDestroyContext(grc); GrTextXY(10, 20, "Press RETURN to save screen", GrBlack(), GrWhite()); GrEventWaitKeyOrClick(&ev); GrSaveContextToPpm(NULL, FSCREEN, "TestPnm"); GrClearScreen(GrWhite()); GrTextXY(10, 20, "Press RETURN to reload screen", GrWhite(), GrBlack()); GrEventWaitKeyOrClick(&ev); GrLoadContextFromPnm(NULL, FSCREEN); GrTextXY(10, 20, "Press RETURN to end ", GrBlack(), GrWhite()); GrEventWaitKeyOrClick(&ev); GrEventUnInit(); GrSetMode(GR_default_text); return 0; }
/* Draw a (not-filled) box with color c. */ void ws_drawbox(int x1, int y1, int xsize, int ysize, int c, int xor) { GrBox( x1, y1, x1 + xsize - 1, y1 + ysize - 1, c | (xor ? GrXOR : 0) ); }