Example #1
0
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 */
Example #2
0
File: box.c Project: antrik/libggi
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;
}