int GGI_tele_drawbox(ggi_visual *vis, int x, int y, int w, int h) { ggi_tele_priv *priv = TELE_PRIV(vis); TeleCmdDrawBoxData *p; TeleEvent ev; int err; LIBGGICLIP_XYWH(vis, x, y, w, h); p = tclient_new_event(priv->client, &ev, TELE_CMD_DRAWBOX, sizeof(TeleCmdDrawBoxData), 0); p->x = x; p->y = y; p->width = w; p->height = h; p->pixel = LIBGGI_GC_FGCOLOR(vis); err = tclient_write(priv->client, &ev); if (err == TELE_ERROR_SHUTDOWN) { TELE_HANDLE_SHUTDOWN; } /* if */ return err; } /* GGI_tele_drawbox */
int GGI_lin16_drawbox(struct ggi_visual *vis, int x, int y, int origw, int h) { uint32_t *buf32; uint16_t *buf16; uint32_t val; int linediff, oddx; LIBGGICLIP_XYWH(vis, x, y, origw, h); PREPARE_FB(vis); val = LIBGGI_GC_FGCOLOR(vis) | (LIBGGI_GC_FGCOLOR(vis) << 16); buf16 = (uint16_t*)((uint8_t*)LIBGGI_CURWRITE(vis) + y*LIBGGI_FB_W_STRIDE(vis) + x*2); linediff = LIBGGI_FB_W_STRIDE(vis) - origw*2; if (x%2) oddx = 1; else oddx = 0; while (h--) { int w = origw; if (oddx) { *(buf16++) = val; w--; } buf32 = (uint32_t*) buf16; while (w > 1) { *(buf32++) = val; w -= 2; } buf16 = (uint16_t*) buf32; if (w) { *(buf16++) = val; } buf16 = (uint16_t*) ((uint8_t*)buf16 + linediff); } return 0; }