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 displayfont(GrFont *font,char *text,int len) { GrTextOption opt; int ww,hh; int bx,by; int bw,bh; GrEvent ev; memset(&opt,0,sizeof(opt)); opt.txo_font = font; opt.txo_xalign = GR_ALIGN_LEFT; opt.txo_yalign = GR_ALIGN_TOP; GrFilledBox(0,0,GrSizeX(),GrSizeY(),GrBlack()); opt.txo_direct = GR_TEXT_RIGHT; opt.txo_fgcolor.v = GrBlack(); opt.txo_bgcolor.v = c1; ww = GrStringWidth(text,len,&opt); hh = GrStringHeight(text,len,&opt); bw = ww+2*hh; bh = ww; bx = cx - bw/2; by = cy - bh/2; GrDrawString(text,len,bx+hh,by,&opt); opt.txo_direct = GR_TEXT_DOWN; opt.txo_bgcolor.v = c2; GrDrawString(text,len,bx+bw-hh,by,&opt); opt.txo_direct = GR_TEXT_LEFT; opt.txo_bgcolor.v = c3; GrDrawString(text,len,bx+bw-ww-hh,by+bh-hh,&opt); opt.txo_direct = GR_TEXT_UP; opt.txo_bgcolor.v = c4; GrDrawString(text,len,bx,by+bh-ww,&opt); GrEventWaitKeyOrClick(&ev); GrClearClipBox(GrBlack()); opt.txo_direct = GR_TEXT_RIGHT; opt.txo_fgcolor.v = c1; opt.txo_bgcolor.v = GrBlack(); bx = GrSizeX() / 16; by = GrSizeY() / 16; bx = (bx + 7) & ~7; while(by < GrSizeY()) { GrDrawString(test_text,strlen(test_text),bx,by,&opt); opt.txo_fgcolor.v ^= GR_UNDERLINE_TEXT; by += hh; } GrEventWaitKeyOrClick(&ev); }
/* String length in pixels */ int ws_pixstrlen(const char *txt) { return txt == NULL ? 0 : GrStringWidth( (char *)txt, strlen(txt), &ws_private.textopt ); }