static void paint_animation(void) { static int pos = 620; static int ini = 0; static GrContext *grc; int ltext, wtext; if (!ini) { grc = GrCreateContext(620, 30, NULL, NULL); if (grc == NULL) return; ini = 1; } grt_left.txo_fgcolor.v = CYAN; grt_left.txo_font = grf_std; ltext = strlen(animatedtext); wtext = GrStringWidth(animatedtext, ltext, &grt_left); GrSetContext(grc); GrClearContext(DARKGRAY); GrDrawString(animatedtext, ltext, pos, 15, &grt_left); GrSetContext(grcglob); GrBitBlt(NULL, 10, 8, grc, 0, 0, 629, 29, GrWRITE); pos -= 1; if (pos <= -wtext) pos = 620; }
void GrClearScreen(GrColor bg) { GrContext save; GrSaveContext(&save); GrSetContext(SCRN); GrClearContext(bg); GrSetContext(&save); }
/* Create bitmap with bm inside. */ struct ws_bitmap *ws_createbitmap(int xsize, int ysize, char *bm) { GrContext *gc; struct ws_bitmap *bmap; char *mem[4]; if (bm != NULL) { mem[0] = bm; mem[1] = mem[2] = mem[3] = NULL; } if ( xsize < 0 || ysize < 0 || xsize > GrSizeX() || ysize > GrSizeY() ) { return NULL; } if ( ( bmap = MALLOC( sizeof(struct ws_bitmap) ) ) == NULL ) { return NULL; } if ( ( gc = GrCreateContext(xsize, ysize, bm != NULL ? mem : NULL, NULL) ) == NULL ) { FREE(bmap); return NULL; } if (bm == NULL) { GrSetContext(gc); GrClearContext(notes.colindex[cv_winfill]); GrSetContext(NULL); } bmap->bitmap = (void *)gc; bmap->xpos = 0; bmap->ypos = 0; bmap->xsize = xsize; bmap->ysize = ysize; bmap->w = NULL; return bmap; }
/* Clear the bitmap (fill it with color c) */ void ws_clearbitmap(struct ws_bitmap *b, int c) { GrSetContext( (GrContext *)b->bitmap ); GrClearContext(c); GrSetContext(NULL); }
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; }