/* ** Open graphics */ static PSD DJGR_open(PSD psd) { int x; int y; int c; GrVideoMode *md_info; x = 640; y = 480; c = 256; GrSetMode(GR_width_height_color_graphics,x,y,c); md_info = (GrVideoMode *) GrCurrentVideoMode(); psd->xres = psd->xvirtres = GrScreenX(); psd->yres = psd->yvirtres = GrScreenY(); psd->linelen = md_info->lineoffset; psd->planes = 1; psd->bpp = md_info->bpp; psd->ncolors = GrNumColors(); psd->flags = PSF_SCREEN; psd->addr = 0; /* FIXME */ /* note: must change psd->pixtype here for truecolor systems*/ psd->pixtype = MWPF_PALETTE; return psd; }
static void ini_graphics(void) { gfaz_ini(gwidth, gheight, gbpp); gwidth = GrScreenX(); gheight = GrScreenY(); grcglob = NULL; if (gwidth > 640 || gheight > 480) { GrClearScreen(GrAllocColor(120, 90, 60)); worg = (gwidth - 640) / 2; horg = (gheight - 480) / 2; grcglob = GrCreateSubContext(worg, horg, worg + 639, horg + 479, NULL, NULL); GrSetContext(grcglob); } }
int main(void) { static int firstgr = 1; GrEvent ev; GrSetDriver(NULL); if(GrCurrentVideoDriver() == NULL) { printf("No graphics driver found\n"); exit(1); } for( ; ; ) { int i,w,h,px,py; char m1[41]; nmodes = (int)(collectmodes(GrCurrentVideoDriver(),grmodes) - grmodes); if(nmodes == 0) { printf("No graphics modes found\n"); exit(1); } qsort(grmodes,nmodes,sizeof(grmodes[0]),vmcmp); printf( "Graphics driver: \"%s\"\n" " graphics defaults: %dx%d %ld colors\n" " text defaults: %dx%d %ld colors\n\n", GrCurrentVideoDriver()->name, GrDriverInfo->defgw, GrDriverInfo->defgh, (long)GrDriverInfo->defgc, GrDriverInfo->deftw, GrDriverInfo->defth, (long)GrDriverInfo->deftc ); PrintModes(); printf("\nEnter choice #, or anything else to quit> "); fflush(stdout); if(!fgets(m1,40,stdin) || (sscanf(m1,"%d",&i) != 1) || (i < 1) || (i > nmodes)) { exit(0); } if(firstgr) { printf( "When in graphics mode, press any key to return to menu.\n" "Now press <CR> to continue..." ); fflush(stdout); fgets(m1,40,stdin); firstgr = 0; } i--; GrSetMode( GR_width_height_bpp_graphics, grmodes[i].w, grmodes[i].h, grmodes[i].bpp ); if(grmodes[i].bpp<15) { w = GrScreenX() >> 1; h = GrScreenY() >> 1; px = w + 5; py = h + 5; w -= 10; h -= 10; drawing( 5,5,w,h, GrBlack(), GrWhite() ); drawing( px,5,w,h, GrAllocColor(255,0,0), GrAllocColor(0,255,0) ); drawing( 5,py,w,h, GrAllocColor(0,0,255), GrAllocColor(255,255,0) ); drawing( px,py,w,h, GrAllocColor(255,0,255), GrAllocColor(0,255,255) ); } else {
GrAllocColor(255,0,0), GrAllocColor(0,255,0) ); drawing( 5,py,w,h, GrAllocColor(0,0,255), GrAllocColor(255,255,0) ); drawing( px,py,w,h, GrAllocColor(255,0,255), GrAllocColor(0,255,255) ); } else { int y,sx; sx=GrScreenX()>>2; for(y=0;y<GrScreenY();y++) { int yy = y & 255; GrHLine(0,sx-1,y,GrBuildRGBcolorT(yy,0,0)); GrHLine(sx,2*sx-1,y,GrBuildRGBcolorT(0,yy,0)); GrHLine(2*sx,3*sx-1,y,GrBuildRGBcolorT(0,0,yy)); GrHLine(3*sx,4*sx-1,y,GrBuildRGBcolorT(yy,yy,yy)); } } PrintInfo(); GrEventInit(); GrMouseDisplayCursor(); GrEventWait(&ev); GrEventUnInit(); GrSetMode(GR_default_text); }
int main(void) { GrContext *pContext; int sizex = 40; int sizey = 40; int x = 0; int y = 40; GrColor fcolor, bcolor; int k; GrEvent ev; GrSetMode(GR_default_graphics); GrEventInit(); GrMouseDisplayCursor(); /* Create a 1bpp bitmap */ pContext = GrCreateFrameContext(GR_frameRAM1, sizex, sizey, NULL, NULL); /* draw something (black and white) into the bitmap */ GrSetContext(pContext); GrClearContext(GrBlack()); GrLine(0, 0, sizex-1, sizey-1, GrWhite()); GrLine(0, sizey-1, sizex-1, 0, GrWhite()); GrSetContext(NULL); fcolor = GrAllocColor(255, 0, 0); bcolor = GrAllocColor(0, 0, 255); GrTextXY(0, 0, "Type u d l r U D L R to move, 1 2 to change color, q to quit", GrWhite(), GrNOCOLOR); GrSetClipBox(0, 40, GrScreenX(), GrScreenY()); /* Put the bitmap into the screen */ GrBitBlt1bpp(NULL, x, y, pContext, 0, 0, sizex-1, sizey-1, fcolor, bcolor); while (1) { k = '\0'; GrEventWait(&ev); if (ev.type == GREV_KEY) k = ev.p1; if (k == 'q') break; switch (k) { 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 '1': fcolor = GrAllocColor(255, 0, 0); bcolor = GrAllocColor(0, 0, 255); break; case '2': fcolor = GrAllocColor(0, 255, 255); bcolor = GrAllocColor(255, 255, 0); break; default: continue; } if (x < -40) x = -40; if (x > GrScreenX()) x = GrScreenX(); if (y < 0) y = 0; if (y > GrScreenY()) y = GrScreenY(); GrBitBlt1bpp( NULL, x, y, pContext, 0, 0, sizex-1, sizey-1, fcolor, bcolor); } /* Destroy */ GrDestroyContext(pContext); GrEventUnInit(); GrSetMode(GR_default_text); return 0; }
/* ** Open graphics */ static PSD DJGR_open(PSD psd) { PSUBDRIVER subdriver; GrVideoMode *md_info; int vwidth,vheight,vbpp; vwidth = SCREEN_WIDTH; vheight = SCREEN_HEIGHT; if(SCREEN_PIXTYPE == MWPF_TRUECOLOR8888) { vbpp=32; } else if(SCREEN_PIXTYPE == MWPF_TRUECOLOR888) { vbpp=24; } else if(SCREEN_PIXTYPE == MWPF_TRUECOLOR565) { vbpp=16; } else { vbpp=8; //palette } GrSetMode(GR_width_height_bpp_graphics,vwidth,vheight,vbpp); md_info = (GrVideoMode *) GrCurrentVideoMode(); psd->xres = psd->xvirtres = GrScreenX(); psd->yres = psd->yvirtres = GrScreenY(); psd->planes = 1; psd->bpp = md_info->bpp; psd->ncolors = psd->bpp >= 24 ? (1 << 24) : (1 << psd->bpp); psd->flags = PSF_SCREEN | PSF_ADDRMALLOC; /* Calculate the correct size and linelen here */ GdCalcMemGCAlloc(psd, psd->xres, psd->yres, psd->planes, psd->bpp, &psd->size, &psd->pitch); if(psd->bpp == 32) { psd->pixtype = MWPF_TRUECOLOR8888; } else if(psd->bpp == 16) { psd->pixtype = MWPF_TRUECOLOR565; } else if(psd->bpp == 24) { psd->pixtype = MWPF_TRUECOLOR888; } else { psd->pixtype = MWPF_PALETTE; } psd->portrait = MWPORTRAIT_NONE; psd->data_format = set_data_format(psd); /* * set and initialize subdriver into screen driver * psd->size is calculated by subdriver init */ subdriver = select_fb_subdriver(psd); psd->orgsubdriver = subdriver; set_subdriver(psd, subdriver); if ((psd->addr = malloc(psd->size)) == NULL) return NULL; return psd; }