Exemplo n.º 1
0
static void render(struct widget *w)
{
    struct widget_priv *priv = (struct widget_priv*) w->priv;
    struct canvas *ca = &w->ca;
    unsigned char i;
    unsigned int width = ca->width;
    int x;
    char buf[10];

    for (i = 0; i < 8; i++) {
        if ((w->cfg->props.mode == 0) || (w->cfg->props.mode == 1))
            sprintf(buf, "CH%u %4d", i+1, priv->ch_raw[i]);
        else
            sprintf(buf, "CH%u", i+1);
        draw_str(buf, 0, i*8+1, ca, 0);

        if ((w->cfg->props.mode == 0) || (w->cfg->props.mode == 2)) {
            x = priv->ch_raw[i] - 1000;
            if (x < 0)
                x = 0;
            else if (x > 1000)
                x = 1000;

            x = (x * (unsigned int) priv->bar_size) / 1000;

            draw_rect(width-priv->bar_size-1,      i*8, width-1, i*8+6, 3, ca);
            draw_rect(width-priv->bar_size,      i*8+1, width-2, i*8+5, 1, ca);

            draw_vline(width-priv->bar_size-1+x,   i*8+1, i*8+5, 1, ca);
            draw_vline(width-priv->bar_size-1+x-1, i*8+1, i*8+5, 3, ca);
            draw_vline(width-priv->bar_size-1+x+1, i*8+1, i*8+5, 3, ca);
        }
    }
}
Exemplo n.º 2
0
void draw_rect(Image* image, int x1, int y1, int x2, int y2, color_t color)
{
  int t;

  if (x1 > x2) {
    t = x1;
    x1 = x2;
    x2 = t;
  }

  if (y1 > y2) {
    t = y1;
    y1 = y2;
    y2 = t;
  }

  if ((x2 < 0) || (x1 >= image->width()) || (y2 < 0) || (y1 >= image->height()))
    return;

  draw_hline(image, x1, y1, x2, color);
  draw_hline(image, x1, y2, x2, color);
  if (y2-y1 > 1) {
    draw_vline(image, x1, y1+1, y2-1, color);
    draw_vline(image, x2, y1+1, y2-1, color);
  }
}
Exemplo n.º 3
0
void drawbox(int x1, int y1, int x2, int y2)
{
	cputcharxy(x1, y1, '+');
	draw_hline(x1, y1+1, y2-1, '-');
	cputcharxy(x1, y2, '+');
	draw_vline(x1+1, y2, x2-1, '|');
	cputcharxy(x2, y2, '+');
	draw_hline(x2, y1+1, y2-1, '-');
	cputcharxy(x2, y1, '+');
	draw_vline(x1+1, y1, x2-1, '|');
	gotoxy(x1, y1);
}
Exemplo n.º 4
0
void generic_draw_rect(u32 x, u32 y, u32 width, u32 height, pixel_t pixel)
{
    draw_hline(x, y, width, pixel);
    if (height >= 1) {
	if (height >= 2) {
	    draw_vline(x, y+1, height-2, pixel);
	    if (width >= 1)
		draw_vline(x+width-1, y+1, height-2, pixel);
	}
	draw_hline(x, y+height-1, width, pixel);
    }
}
Exemplo n.º 5
0
static void
draw_pixel_rect(DiaRenderer *self,
		int x, int y,
		int width, int height,
		Color *color)
{
  DiaLibartRenderer *renderer = DIA_LIBART_RENDERER (self);
  guint8 r,g,b;
  int start, len;
  int stride;

  r = color->red*0xff;
  g = color->green*0xff;
  b = color->blue*0xff;

  stride = renderer->pixel_width*3;
  
  /* clip in x */
  start = x;
  len = width;
  CLIP_1D_LEN(renderer->clip_rect.left, renderer->clip_rect.right, start, len);

  /* top line */
  if ( (y>=renderer->clip_rect.top) &&
       (y<=renderer->clip_rect.bottom) ) {
    draw_hline(self, start, y, len, r, g, b);
  }

  /* bottom line */
  if ( (y+height>=renderer->clip_rect.top) &&
       (y+height<=renderer->clip_rect.bottom) ) {
    draw_hline(self, start, y+height, len, r, g, b);
  }

  /* clip in y */
  start = y;
  len = height;
  CLIP_1D_LEN(renderer->clip_rect.top, renderer->clip_rect.bottom, start, len);

  /* left line */
  if ( (x>=renderer->clip_rect.left) &&
       (x<renderer->clip_rect.right) ) {
    draw_vline(self, x, start, len, r, g, b);
  }

  /* right line */
  if ( (x+width>=renderer->clip_rect.left) &&
       (x+width<renderer->clip_rect.right) ) {
    draw_vline(self, x+width, start, len, r, g, b);
  }
}
Exemplo n.º 6
0
void
draw_rubberbox(GtkWidget *drawing_area, GdkRect rect)
{
  GdkRect c;
  GdkRect oc;
  GdkRect update_rect;
  
  c = rect;
  oc = old_rect;
  
  if ((c.x > skin_infos.width) || (c.y > skin_infos.height) || 
      ((c.x + c.w) > skin_infos.width) || ((c.y + c.h) > skin_infos.height))
    return;
  
  g_object_unref(pixbuf);
  pixbuf = gdk_pixbuf_copy(skin_infos.img_orig);
  
  draw_hline(c.x, c.y, c.w);
  draw_hline(c.x, c.y + c.h, c.w);
  
  draw_vline(c.x, c.y, c.h);
  draw_vline(c.x + c.w, c.y, c.h);
  
  /*
   * 2 calls to SDL_UpdateRect :
   * + erase the old rect
   * + draw the new one
   *
   * We could composite a new rectangle with the new and old ones,
   * but this would consume more resources than these 2 calls.
   * Plus it would complicate the code. *sigh*
   */

  update_rect.x = oc.x;
  update_rect.y = oc.y;
  update_rect.w = ((oc.w + oc.x + 1) <= skin_infos.width) ? (oc.w + 1) : oc.w;  /* add 2 to really erase the lines (right, bottom) ... */
  update_rect.h = ((oc.h + oc.y + 1) <= skin_infos.height) ? (oc.h + 1) : oc.h; /* ... but be careful */
  
  gtk_widget_draw (drawing_area, (GdkRectangle *)(&update_rect));
  
  update_rect.x = c.x;
  update_rect.y = c.y;
  update_rect.w = ((c.w + c.x + 1) <= skin_infos.width) ? (c.w + 1) : c.w;  /* add 2 to really erase the lines (right, bottom) ... */
  update_rect.h = ((c.h + c.y + 1) <= skin_infos.height) ? (c.h + 1) : c.h; /* ... but be careful */
  
  gtk_widget_draw (drawing_area, (GdkRectangle *)&update_rect);

  tmp_rect = rect; /* when called from callbacks.c (for LCD or keys) */
  old_rect = rect; /* save coords */
}
Exemplo n.º 7
0
//-------------------------------------------------------------------
// Generic rectangle
// 'flags' defines type - filled, round corners, shadow and border thickness
void draw_rectangle(coord x1, coord y1, coord x2, coord y2, twoColors cl, int flags)
{
    // Normalise values
    if (x1 > x2)
        swap(x1, x2);
    if (y1 > y2)
        swap(y1, y2);

    // Check if completely off screen
    if ((x2 < 0) || (y2 < 0) || (x1 >= camera_screen.width) || (y1 >= camera_screen.height))
        return;

    int round = (flags & RECT_ROUND_CORNERS) ? 1 : 0;
    int thickness;
    int i;

    // Shadow (do this first, as edge draw shrinks rectangle for fill)
    if (flags & RECT_SHADOW_MASK)
    {
        thickness = ((flags & RECT_SHADOW_MASK) >> 4);
        for (i=1; i<=thickness; i++)
        {
            draw_vline(x2+i, y1+1, y2 - y1, COLOR_BLACK);
            draw_hline(x1+1, y2+i, x2 - x1 + thickness, COLOR_BLACK);
        }
    }
Exemplo n.º 8
0
static enum test_res test002_func(void)
{
    int i;
    u32 a, b, x1, x2, y1, y2;

    fill_rect(0, 0, fb_var.xres, fb_var.yres, black_pixel);
    for (i = 0; i <= Y_BLOCKS; i++)
	draw_hline(0, i*(fb_var.yres-1)/Y_BLOCKS, fb_var.xres, white_pixel);
    for (i = 0; i <= X_BLOCKS; i++)
	draw_vline(i*(fb_var.xres-1)/X_BLOCKS, 0, fb_var.yres, white_pixel);
    draw_ellipse(fb_var.xres/2, fb_var.yres/2, 3*fb_var.xres/8,
		 fb_var.yres/2-1, white_pixel);
    a = (fb_var.xres-1)/X_BLOCKS;
    b = (fb_var.yres-1)/Y_BLOCKS;
    x1 = (fb_var.xres-1)/X_BLOCKS;
    y1 = (fb_var.yres-1)/Y_BLOCKS;
    x2 = (X_BLOCKS-1)*(fb_var.xres-1)/X_BLOCKS;
    y2 = (Y_BLOCKS-1)*(fb_var.yres-1)/Y_BLOCKS;
    draw_ellipse(x1, y1, a, b, white_pixel);
    draw_ellipse(x2, y1, a, b, white_pixel);
    draw_ellipse(x1, y2, a, b, white_pixel);
    draw_ellipse(x2, y2, a, b, white_pixel);
    wait_for_key(10);
    return TEST_OK;
}
Exemplo n.º 9
0
void generic_draw_line(u32 x1, u32 y1, u32 x2, u32 y2, pixel_t pixel)
{
    int dx, dy, sx, sy, e;

    dx = x2-x1;
    dy = y2-y1;
    if (dy == 0) {
	if (dx < 0) {
	    dx = -dx;
	    x1 = x2;
	}
	draw_hline(x1, y1, dx+1, pixel);
    } else if (dx == 0) {
	if (dy < 0) {
	    dy = -dy;
	    y1 = y2;
	}
	draw_vline(x1, y1, dy+1, pixel);
    } else {
	if (dy < 0) {
	    dy = -dy;
	    sy = -1;
	} else {
	    sy = 1;
	}
	if (dx < 0) {
	    dx = -dx;
	    sx = -1;
	} else {
	    sx = 1;
	}
	if (dx > dy) {
	    e = -dx/2;
	    set_pixel(x1, y1, pixel);
	    while (x1 != x2) {
		e += dy;
		if (e >= 0) {
		    y1 += sy;
		    e -= dx;
		}
		x1 += sx;
		set_pixel(x1, y1, pixel);
	    }
	} else {
	    e = -dy/2;
	    set_pixel(x1, y1, pixel);
	    while (y1 != y2) {
		e += dx;
		if (e >= 0) {
		    x1 += sx;
		    e -= dy;
		}
		y1 += sy;
		set_pixel(x1, y1, pixel);
	    }
	}
    }
}
Exemplo n.º 10
0
void main(void) 
{
  fb_init(WIDTH, HEIGHT, DEPTH, FB_SINGLEBUFFER);

  for( int y = 0; y < HEIGHT; y += 16 )
      draw_hline(y, GL_WHITE);
  for( int x = 0; x < WIDTH; x += 16 )
      draw_vline(x, GL_WHITE);

}
Exemplo n.º 11
0
void draw_ant(unsigned char x, unsigned char y, unsigned char m) {

	draw_vline(x+3,y,7,3,m);
	draw_pixel(x,y,3,m);
	draw_pixel(x+1,y+1,3,m);
	draw_pixel(x+2,y+2,3,m);
	draw_pixel(x+6,y,3,m);
	draw_pixel(x+5,y+1,3,m);
	draw_pixel(x+4,y+2,3,m);
	
}
Exemplo n.º 12
0
static void render(struct widget *w)
{
    struct widget_priv *priv = (struct widget_priv*) w->priv;
    struct canvas *ca = &w->ca;
    char buf[20];
    int i;


    switch (w->cfg->props.mode) {
        case 0:
        default:
            sprintf(buf, "%5.2fV\n%5.2fA", priv->bat_voltage, priv->bat_current);
            draw_str(buf, 4, BAT_BAR_Y + BAT_BAR_H + 3, ca, 2);

            draw_rect(BAT_BAR_X, BAT_BAR_Y, BAT_BAR_X + BAT_BAR_W, BAT_BAR_Y + BAT_BAR_H, 3, ca);
            draw_rect(BAT_BAR_X+1, BAT_BAR_Y+1, BAT_BAR_X + BAT_BAR_W-1, BAT_BAR_Y + BAT_BAR_H-1, 1, ca);
            draw_vline(BAT_BAR_X - 1, BAT_BAR_Y + 4, BAT_BAR_Y + BAT_BAR_H - 4, 1, ca);
            draw_vline(BAT_BAR_X - 2, BAT_BAR_Y + 4, BAT_BAR_Y + BAT_BAR_H - 4, 1, ca);
            draw_vline(BAT_BAR_X - 3, BAT_BAR_Y + 4, BAT_BAR_Y + BAT_BAR_H - 4, 3, ca);

            for (i = 0; i < (priv->bat_remaining*BAT_BAR_W)/100 - 2; i++) {
                draw_vline(BAT_BAR_X + 2 + i, BAT_BAR_Y + 2, BAT_BAR_Y + BAT_BAR_H - 2, 2, ca);
            }

            sprintf(buf, "%d", priv->bat_remaining);
            draw_str(buf, BAT_BAR_X + BAT_BAR_W/2 - 6, BAT_BAR_Y + 3, ca, 0);
            break;
        case 1:
        case 2:
            sprintf(buf, "%5.2fV", priv->bat_voltage);
            draw_str(buf, 0, 0, ca, 2);
            break;
        case 3:
            sprintf(buf, "%5.2fV\n%5.2fV", priv->bat_voltage, priv->bat_voltage2);
            draw_str(buf, 0, 0, ca, 2);
            break;
    }
}
Exemplo n.º 13
0
static void render(struct widget *w)
{
    struct widget_priv *priv = w->priv;
    struct canvas *ca = &w->ca;
    unsigned char i;
    unsigned int width = ca->width;
    int x, y;
    char buf[10];
    const struct font *f = get_font(0);
    unsigned int *ch = priv->ch;

    for (i = 0; i < priv->total_ch; i++) {
        if ((w->cfg->props.mode == 0) || (w->cfg->props.mode == 1))
            sprintf(buf, "CH%u %4d", i+1, *ch);
        else
            sprintf(buf, "CH%u", i+1);
        draw_str(buf, 0, i*f->size, ca, 0);

        if ((w->cfg->props.mode == 0) || (w->cfg->props.mode == 2)) {
            x = *ch - 1000;
            if (x < 0)
                x = 0;
            else if (x > 1000)
                x = 1000;

            x = (x * (unsigned int) priv->bar_size) / 1000;
            y = i * f->size;

            draw_rect(width-priv->bar_size-1, y,   width-1, y+BAR_SIZE, 3, ca);
            draw_rect(width-priv->bar_size,   y+1, width-2, y+BAR_SIZE-1, 1, ca);

            draw_vline(width-priv->bar_size-1+x,   y+1, y+BAR_SIZE-1, 1, ca);
            draw_vline(width-priv->bar_size-1+x-1, y+1, y+BAR_SIZE-1, 3, ca);
            draw_vline(width-priv->bar_size-1+x+1, y+1, y+BAR_SIZE-1, 3, ca);
        }
        ch++;
    }
}
Exemplo n.º 14
0
void draw_line(FBDev *dev, int x1, int y1, int x2, int y2, uint32_t pixel) {
	int i, dx, dy, sdx, sdy, dxabs, dyabs, x, y, px, py;

	// Handle simple cases first
	if (x1 == x2) {
		draw_vline(dev, x1, y1, y2, pixel);
	} else if (y1 == y2) {
		draw_hline(dev, x1, x2, y1, pixel);
	}

	dx = x2 - x1;				// Delta x
	dy = y2 - y1;				// Delta y
	dxabs = abs(dx);			// Absolute delta
	dyabs = abs(dy);			// Absolute delta
	sdx = (dx > 0) ? 1 : -1;	// signum function
	sdy = (dy > 0) ? 1 : -1;	// signum function
	x = dyabs >> 1;
	y = dxabs >> 1;
	px = x1;
	py = y1;

	if (dxabs >= dyabs) {
		// Draw along x
		for (i = 0; i < dxabs; i++) {
			y += dyabs;
			if (y >= dxabs) {
				y -= dxabs;
				py += sdy;
			}
			px += sdx;

			fb_draw(dev, px, py, pixel);
		}
	} else {
		// Draw along y
		for (i = 0; i < dyabs; i++) {
			x += dxabs;
			if (x >= dyabs) {
				x -= dyabs;
				px += sdx;
			}
			py += sdy;

			fb_draw(dev, px, py, pixel);
		}
	}
}
Exemplo n.º 15
0
static void render(struct widget *w)
{
    struct widget_priv *priv = w->priv;
    struct canvas *ca = &w->ca;
    int i, j, y = -1;
    long yy;
    char buf[10], d = 0;
    int major_tick = priv->range / 5;
    int minor_tick = major_tick / 4;

    for (i = 0; i < priv->range; i++) {
        yy = ((long) i * Y_SIZE) / priv->range;
        if ((yy == y) && (d == 1))
            continue;
        y = Y_SIZE - (int) yy;
        j = priv->altitude + i - priv->range/2;
        if (j % major_tick == 0) {
            draw_ohline(X_CENTER + 2, X_CENTER - 4, y, 1, 3, ca);
            sprintf(buf, "%d", j);
            draw_jstr(buf, X_SIZE-2, y, JUST_RIGHT | JUST_VCENTER, ca, 0);
            d = 1;
        } else if (j % minor_tick == 0) {
            draw_ohline(X_CENTER + 2, X_CENTER - 2, y, 1, 3, ca);
            d = 1;
        } else {
            d = 0;
        }
    }

    draw_frect(X_CENTER + 11, Y_CENTER-5, X_SIZE-2, Y_CENTER + 5, 0, ca);

    draw_hline(X_CENTER + 10, X_SIZE - 1, Y_CENTER-6, 1, ca);
    draw_hline(X_CENTER + 10, X_SIZE - 1, Y_CENTER+6, 1, ca);
    draw_vline(X_SIZE - 1, Y_CENTER-5, Y_CENTER+5, 1, ca);

    /* draw arrow */
    draw_line(X_CENTER+10, Y_CENTER-6, X_CENTER+10-5, Y_CENTER, 1, ca);
    draw_line(X_CENTER+10, Y_CENTER+6, X_CENTER+10-5, Y_CENTER, 1, ca);

    sprintf(buf, "%d", (unsigned int) priv->altitude);
    draw_jstr(buf, X_SIZE-2, Y_CENTER, JUST_RIGHT | JUST_VCENTER, ca, 0);
}
Exemplo n.º 16
0
static void render(struct widget *w)
{
    struct widget_priv *priv = (struct widget_priv*) w->priv;
    struct canvas *ca = &w->ca;
    int i, j, y = -1;
    long yy;
    char buf[10], d = 0;
    int major_tick = priv->range / 5;
    int minor_tick = major_tick / 4;
    
    for (i = 0; i < priv->range; i++) {
        yy = ((long) i * Y_SIZE) / priv->range;
        if ((yy == y) && (d == 1))
            continue;
        y = Y_SIZE - (int) yy;
        j = priv->speed_i + i - priv->range/2;
        if(j < 0)
            continue;
        if (j % major_tick == 0) {
            sprintf(buf, "%3d", j);
            draw_str(buf, 2, y - 2, ca, 0);
            draw_ohline(X_CENTER - 2, X_CENTER + 4, y, 1, 3, ca);
            d = 1;
        } else if (j % minor_tick == 0) {
            draw_ohline(X_CENTER - 2, X_CENTER + 2, y, 1, 3, ca);
            d = 1;
        } else {
            d = 0;
        }
    }

    draw_frect(1, Y_CENTER-4, X_CENTER - 10, Y_CENTER + 4, 0, ca);
    sprintf(buf, "%3d", (int) priv->speed_i);
    draw_str(buf, 2, Y_CENTER - 3, ca, 0);

    draw_hline(0, X_CENTER - 10, Y_CENTER - 5, 1, ca);
    draw_hline(0, X_CENTER - 10, Y_CENTER + 5, 1, ca);
    draw_vline(0, Y_CENTER - 3 , Y_CENTER + 3, 1, ca);

    draw_line(X_CENTER-10, Y_CENTER-5, X_CENTER-10+5, Y_CENTER, 1, ca);
    draw_line(X_CENTER-10, Y_CENTER+5, X_CENTER-10+5, Y_CENTER, 1, ca);
}
Exemplo n.º 17
0
void draw_b(unsigned char x, unsigned char y)
{	
	unsigned char w;
	
	if(!(is_drawing))
	{
		if(bat_state & BAT_DEBUG)
		{
			draw_block(4,0,108,24,3,DRAW_ERASE);
			draw_numU(4,0,bat_min>>2,0,3,DRAW_PUT);
			draw_numU(32,0,bat_max>>2,0,3,DRAW_PUT);
			draw_numU(4,8,(bat_max>>2)-(bat_min>>2),0,3,DRAW_PUT);
	
			draw_numU(60,0,bat_min,0,3,DRAW_PUT);
			draw_numU(88,0,bat_max,0,3,DRAW_PUT);
			draw_numU(60,8,bat_max-bat_min,0,3,DRAW_PUT);
			if((bat_state & BAT_NORMAL))
				draw_string(4,16,"Bat.Operation",3,DRAW_PUT);
			if((bat_state & BAT_CHARGE))
				draw_string(4,16,"Charging",3,DRAW_PUT);
			if((bat_state & BAT_CHARGE_DONE))
				draw_string(4,16,"Done Charging",3,DRAW_PUT);
		}

		if (bat_min<0x320)
			w = 0;
		else if (bat_min>0x380)
			w = 12;
		else
			w = (bat_min-0x320)/8;
		
		draw_block(x+1,y+1,12,5,3,DRAW_ERASE);
		draw_rect(x,y,14,7,1,3,DRAW_PUT);
		draw_vline(x+14,y+2,3,3,DRAW_PUT);

		if(w>0)	
			draw_block(x+1,y+1,w,5,2,DRAW_PUT);
	
		if(w<12)
			draw_block(x+1+w,y+1,12-w,5,0,DRAW_PUT);
	}
Exemplo n.º 18
0
static void drawpanel_1p()
{
	int h24 = _HEIGHT_24L;
	int clr = (player1.level % 6)+1;
	int i;
	setwcurs(WIN_PANEL, 0, 0);
	setblockcolor(clr);
	printstr_acs("lqNu", 8);
	for (i = 0; i <= 8; i += 4)
		drawstr("\\xhNx\\3tqNu", 8, 0, i);
	if (h24) {
		setcurs(0, 12);
		putch(LOWLEFT);
		drawpanel_labels("Score", 1);
	} else {
		setcurs(0, 13);
		printstr_acs("xhNx", 8);
		drawpanel_labels("Score", 1);
		setcurs(2, 13);
		printstr(" Next ");
	}
	printstat_1p();
	drawpanel_bordercolor(clr);
	if (h24)
		drawstr("\\x\\6x", 6, 9, 12);
	else {
		drawstr("\\x Nx\\3mqNu", 8, 0, 13);
		drawstr("\\x\\x", 0, 9, 17);
	}
	i = 0;
	if (h24)
		i = 4;
	setwcurs(0, 0, i);
	drawpanel_bordercolor(clr);
	draw_vline(board_x(1, 10)+1, i, 20);
}
Exemplo n.º 19
0
 inline void draw_vline_b(T& os, pos_t x, pos_t y, pos_t len, char const* c = "┃")
 {
     draw_vline(os, x, y, len, c);
 }
Exemplo n.º 20
0
static void
draw_pixel_line(DiaRenderer *self,
		int x1, int y1,
		int x2, int y2,
		Color *color)
{
  DiaLibartRenderer *renderer = DIA_LIBART_RENDERER (self);
  guint8 r,g,b;
  guint8 *ptr;
  int start, len;
  int stride;
  int i;
  int x, y;
  int dx, dy, adx, ady;
  int incx, incy;
  int incx_ptr, incy_ptr;
  int frac_pos;
  IntRectangle *clip_rect;


  r = color->red*0xff;
  g = color->green*0xff;
  b = color->blue*0xff;

  if (y1==y2) { /* Horizontal line */
    start = x1;
    len = x2-x1;
    CLIP_1D_LEN(renderer->clip_rect.left, renderer->clip_rect.right, start, len);
    
    /* top line */
    if ( (y1>=renderer->clip_rect.top) &&
	 (y1<=renderer->clip_rect.bottom) ) {
      draw_hline(self, start, y1, len, r, g, b);
    }
    return;
  }
  
  if (x1==x2) { /* Vertical line */
    start = y1;
    len = y2-y1;
    CLIP_1D_LEN(renderer->clip_rect.top, renderer->clip_rect.bottom, start, len);

    /* left line */
    if ( (x1>=renderer->clip_rect.left) &&
	 (x1<=renderer->clip_rect.right) ) {
      draw_vline(self, x1, start, len, r, g, b);
    }
    return;
  }

  /* Ugh, kill me slowly for writing this line-drawer.
   * It is actually a standard bresenham, but not very optimized.
   * It is also not very well tested.
   */
  
  stride = renderer->pixel_width*3;
  clip_rect = &renderer->clip_rect;
  
  dx = x2-x1;
  dy = y2-y1;
  adx = (dx>=0)?dx:-dx;
  ady = (dy>=0)?dy:-dy;

  x = x1; y = y1;
  ptr = renderer->rgb_buffer + x*3 + y*stride;
  
  if (adx>=ady) { /* x-major */
    if (dx>0) {
      incx = 1;
      incx_ptr = 3;
    } else {
      incx = -1;
      incx_ptr = -3;
    }
    if (dy>0) {
      incy = 1;
      incy_ptr = stride;
    } else {
      incy = -1;
      incy_ptr = -stride;
    }
    frac_pos = adx;
    
    for (i=0;i<=adx;i++) {
      /* Amazing... He does the clipping in the inner loop!
	 It must be horribly inefficient! */
      if ( (x>=clip_rect->left) &&
	   (x<=clip_rect->right) &&
	   (y>=clip_rect->top) &&
	   (y<=clip_rect->bottom) ) {
	ptr[0] = r;
	ptr[1] = g;
	ptr[2] = b;
      }
      x += incx;
      ptr += incx_ptr;
      frac_pos += ady*2;
      if ((frac_pos > 2*adx) || ((dy>0)&&(frac_pos == 2*adx))) {
	y += incy;
	ptr += incy_ptr;
	frac_pos -= 2*adx;
      }
    }
  } else { /* y-major */
    if (dx>0) {
      incx = 1;
      incx_ptr = 3;
    } else {
      incx = -1;
      incx_ptr = -3;
    }
    if (dy>0) {
      incy = 1;
      incy_ptr = stride;
    } else {
      incy = -1;
      incy_ptr = -stride;
    }
    frac_pos = ady;
    
    for (i=0;i<=ady;i++) {
      /* Amazing... He does the clipping in the inner loop!
	 It must be horribly inefficient! */
      if ( (x>=clip_rect->left) &&
	   (x<=clip_rect->right) &&
	   (y>=clip_rect->top) &&
	   (y<=clip_rect->bottom) ) {
	ptr[0] = r;
	ptr[1] = g;
	ptr[2] = b;
      }
      y += incy;
      ptr += incy_ptr;
      frac_pos += adx*2;
      if ((frac_pos > 2*ady) || ((dx>0)&&(frac_pos == 2*ady))) {
	x += incx;
	ptr += incx_ptr;
	frac_pos -= 2*ady;
      }
    }
  }
}
Exemplo n.º 21
0
Arquivo: main.c Projeto: gnkarn/ucglib
int main(void)
{

    tga_init(128,64);
    ucg_Init(&ucg, &ucg_dev_tga, ucg_ext_none, (ucg_com_fnptr)0);
    ucg_SetFontMode(&ucg, UCG_FONT_MODE_TRANSPARENT);

    ucg_SetColor(&ucg, 0, 0, 0, 0);
    ucg_DrawBox(&ucg, 0, 0, 128, 64);



    ucg_SetFont(&ucg, ucg_font_ncenB18_tf);

    ucg_SetColor(&ucg, 0, 0, 0, 255);
    ucg_DrawPixel(&ucg, 70,20);
    ucg_SetColor(&ucg, 0, 255, 0, 0);

    //ucg_SetFontPosBottom(&ucg);
    /*
    ucg_DrawGlyph(&ucg, 70, 20, 0, 'A');
    ucg_DrawGlyph(&ucg, 70, 20, 1, 'A');
    ucg_DrawGlyph(&ucg, 70, 20, 2, 'A');
    ucg_DrawGlyph(&ucg, 70, 20, 3, 'A');

    ucg_SetColor(&ucg, 0, 255, 255, 255);

    vrule(&ucg, 30, 0, 20, 1);
    vrule(&ucg, 30, 0, 20, 0);
    */
    //pos(&ucg, 70, 20, 0);

    //hrule(&ucg, 0, 20, 70, 1);
    //hrule(&ucg, 0, 20, 70, 0);


    ucg_SetColor(&ucg, 0, 255, 0, 0);
    ucg_SetColor(&ucg, 1, 0, 255, 0);
    ucg_SetColor(&ucg, 2, 255, 0, 255);
    ucg_SetColor(&ucg, 3, 0, 255, 255);

    ucg_DrawGradientLine(&ucg, 10, 40, 100, 0);

    ucg_DrawGradientBox(&ucg, 10, 43, 100, 20);


    tga_save("test.tga");

    draw_pixel(&ucg);
    draw_hline(&ucg);
    draw_vline(&ucg);
    set_clip_range(&ucg);
    draw_text_baseline(&ucg);
    draw_text_bottom(&ucg);
    draw_text_top(&ucg);
    draw_text_center(&ucg);
    draw_text_ascent_descent(&ucg);
    draw_text_dir1(&ucg);
    draw_box(&ucg);
    draw_frame(&ucg);
    draw_rbox(&ucg);
    draw_rframe(&ucg);
    draw_gradient_box(&ucg);
    draw_gradient_line(&ucg);
    draw_disc(&ucg);
    draw_circle(&ucg);
    draw_triangle(&ucg);
    set_scale2x2(&ucg);
    set_font_mode_1(&ucg);
    set_font_mode_2(&ucg);
    solid_font_variants(&ucg);
    string_overwrite(&ucg, 1);
    string_overwrite(&ucg, 5);
    string_overwrite(&ucg, 10);
    return 0;

}
Exemplo n.º 22
0
void draw_rect(FBDev *dev, int x, int y, int w, int h, uint32_t pixel) {
	draw_hline(dev, x, x+w, y, pixel);
	draw_hline(dev, x, x+w, y+h, pixel);
	draw_vline(dev, x, y, y+h, pixel);
	draw_vline(dev, x+w, y, y+h, pixel);
}
Exemplo n.º 23
0
static void render(struct widget *w)
{
    struct widget_priv *priv = w->priv;
    struct canvas *ca = &w->ca;
    char buf[10];
    unsigned long d = (unsigned long) priv->home->distance;
    unsigned int r = (w->ca.width/2)-2;
    int x, y;
    int min_increment;
    long i, scale;
    struct point ils_points[5] = { {-4, -6}, {-4, 6}, {0, 10}, {4, 6}, {4, -6} };
    struct polygon ils = {
        .len = 5,
        .points = ils_points,
    };
    struct point uav_points[4] = { {0, 0}, {6, 8}, {0, -8}, {-6, 8} };
    struct polygon uav = {
        .len = 4,
        .points = uav_points,
    };

    struct polygon *p;

    x = (w->ca.width/2)-1;
    y = (w->ca.height/2)-1;


    draw_vline(x, 0, r*2, 2, ca);
    draw_hline(0, r*2, y, 2, ca);

    //draw_circle(x, y, r+1, 3, ca);
    draw_circle(x, y, r  , 2, ca);


    /* auto scale */
    switch (get_units(w->cfg)) {
    default:
    case UNITS_METRIC:
        min_increment = 500;
        scale = ((d / min_increment) + 1) * min_increment;
        sprintf(buf, "%um", (unsigned int) scale);
        break;
    case UNITS_IMPERIAL:
        d *= M2FEET;
        min_increment = 1000;
        scale = ((d / min_increment) + 1) * min_increment;
        if (d > 5000) {
            d = (d * 1000) / MILE2FEET;
            scale /= 1000;
            sprintf(buf, "%umi", (unsigned int) scale);
        } else {
            sprintf(buf, "%uf", (unsigned int) scale);
        }
        break;
    }

    draw_str(buf, 0, 0, ca, 0);

    i = (long) d * r;
    i /= scale;

    switch (w->cfg->props.mode >> 1) {
    case 0:
    default:
        /* radar fixed at uav heading, home moves */
        x += sin(DEG2RAD(priv->home->direction)) * i;
        y -= cos(DEG2RAD(priv->home->direction)) * i;
        transform_polygon(&ils, x, y, priv->stats->launch_heading - priv->heading - 180);
        p = &ils;
        break;
    case 1:
        /* radar always facing north, uav moves */
        x += sin(DEG2RAD(priv->home->uav_bearing)) * i;
        y -= cos(DEG2RAD(priv->home->uav_bearing)) * i;
        transform_polygon(&uav, x, y, priv->heading);
        p = &uav;
        break;
    case 2:
        /* radar always facing launch direction, uav moves */
        x += sin(DEG2RAD(priv->home->uav_bearing - priv->stats->launch_heading)) * i;
        y -= cos(DEG2RAD(priv->home->uav_bearing - priv->stats->launch_heading)) * i;
        transform_polygon(&uav, x, y, priv->heading - priv->stats->launch_heading);
        p = &uav;
        break;
    case 3:
        /* testing waypoints */
        /* radar always facing north, uav moves with waypoints */
        if (priv->wp_seq > 0) {
            long i_wp = (long) priv->wp_distance * r;
            i_wp /= scale;
            int x_wp = x, y_wp = y;
            x_wp += sin(DEG2RAD(priv->wp_target_bearing - priv->heading)) * i_wp;
            y_wp -= cos(DEG2RAD(priv->wp_target_bearing - priv->heading)) * i_wp;
            sprintf(buf, "%d", priv->wp_seq);
            draw_str(buf, x_wp, y_wp, ca, 0);
        }
        x += sin(DEG2RAD(priv->home->uav_bearing)) * i;
        y -= cos(DEG2RAD(priv->home->uav_bearing)) * i;
        transform_polygon(&uav, x, y, priv->heading);
        p = &uav;
        break;
    }

    draw_polygon(p, 3, ca);
    move_polygon(p, -1, -1);
    draw_polygon(p, 1, ca);
}


const struct widget_ops radar_widget_ops = {
    .name = "Radar",
    .mavname = "RADAR",
    .id = WIDGET_RADAR_ID,
    .init = NULL,
    .open = open,
    .render = render,
    .close = NULL,
};
Exemplo n.º 24
0
static void render(struct widget *w)
{
    struct widget_priv *priv = w->priv;
    struct canvas *ca = &w->ca;
    int y, i, j;
    int x0, x1, y0, y1, offset, cx, cy;
    unsigned char size, gap;
    char buf[10];

    for (i = -RANGE/2; i <= RANGE/2; i++) {
        y = Y_CENTER - i;
        //j = priv->pitch_deg*SCALE + i;
        j = priv->pitch_deg + i;

        if (j % (MINOR_TICK*SCALE) == 0) {
            if (j == 0) {
                size = 40;
                gap = 10;
            } else {
                if (j % (MAJOR_TICK*SCALE) == 0)
                    size = 20;
                else
                    size = 10;
                gap = 10;
            }

            cx = X_CENTER + (int) (i * priv->sin_roll);
            cy = y + i - (int) (i * priv->cos_roll);

            if ((j != 0) && (j % (MAJOR_TICK*SCALE) == 0)) {
                sprintf(buf, "%d", j / SCALE);
                draw_jstr(buf, cx, cy, JUST_HCENTER | JUST_VCENTER, ca, 0);
            }
            
            offset = (int) gap * priv->cos_roll;
            x0 = cx + offset;
            offset = (int) size * priv->cos_roll;
            x1 = x0 + offset;

            
            offset = (int) gap * priv->sin_roll;
            y0 = cy + offset;
            offset = (int) size * priv->sin_roll;
            y1 = y0 + offset;
            
            if (j == 0) {
                draw_line(x0-1, y0-1, x1+1, y1-1, 3, ca);
                //draw_line(x0, y0-1, x1, y1-1, 1, ca);
            }
            draw_line(x0-1, y0+1, x1+1, y1+1, 3, ca);
            draw_line(x0, y0, x1, y1, 1, ca);

            offset = (int) gap * priv->cos_roll;
            x0 = cx - offset;
            offset = (int) size * priv->cos_roll;
            x1 = x0 - offset;


            offset = (int) gap * priv->sin_roll;
            y0 = cy - offset;
            offset = (int) size * priv->sin_roll;
            y1 = y0 - offset;

            if (j == 0) {
                draw_line(x0-1, y0-1, x1+1, y1-1, 3, ca);
                //draw_line(x0, y0-1, x1, y1-1, 1, ca);
            }
            draw_line(x0-1, y0+1, x1+1, y1+1, 3, ca);
            draw_line(x0, y0, x1, y1, 1, ca);

        }
    }


    draw_ohline(X_CENTER - 3, X_CENTER + 3, Y_CENTER, 1, 3, ca);
    draw_vline(X_CENTER, Y_CENTER - 3, Y_CENTER + 3, 1, ca);

    
    float cos_i, sin_i;

    for (i = -ROLL_RANGE/2; i <= ROLL_RANGE/2; i++) {
        y = Y_CENTER - i;
        //j = priv->pitch_deg*SCALE + i;
        //j = priv->roll_deg + i;

        if (i % (MINOR_ROLL_TICK) == 0) {
            gap = 70;
            if (i == 0) {
                size = 10;
            } else {
                if (i % (MAJOR_ROLL_TICK) == 0)
                    size = 10;
                else
                    size = 5;
            }

            cos_i = cos(DEG2RAD(i));
            sin_i = sin(DEG2RAD(i));
            
            cx = X_CENTER;// + (int) (gap * cos_i);
            cy = Y_CENTER;// - (int) (gap * sin_i);


            offset = (int) gap * cos_i;
            x0 = cx + offset;
            offset = (int) size * cos_i;
            x1 = x0 + offset;


            offset = (int) gap * sin_i;
            y0 = cy - offset;
            offset = (int) size * sin_i;
            y1 = y0 - offset;

            draw_line(x0, y0, x1, y1, 1, ca);

            if ((i != 0) && (i % (MAJOR_ROLL_TICK) == 0)) {
                sprintf(buf, "%d", i);
                draw_jstr(buf, x1, y1, JUST_VCENTER, ca, 0);
            }
        }
    }

    cx = X_CENTER; // + (int) (gap * priv->sin_roll);
    cy = Y_CENTER ; //- (int) (gap * priv->cos_roll);
    size = 10;

    offset = (int) (gap-size) * priv->cos_roll;
    x0 = cx + offset;
    offset = (int) size * priv->cos_roll;
    x1 = x0 + offset;


    offset = (int) (gap-size) * priv->sin_roll;
    y0 = cy + offset;
    offset = (int) size * priv->sin_roll;
    y1 = y0 + offset;


    draw_line(x0-1, y0-1, x1+1, y1-1, 3, ca);
    draw_line(x0-1, y0+1, x1+1, y1+1, 3, ca);
    draw_line(x0, y0, x1, y1, 1, ca);
}