⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 libegui.c

📁 EGui是一个开源的图形系统软件,类似于QT/Embedded、GTK-FB、MicroWindow。目标是嵌入式平台整合解 决方案。基于Linux Framebuffer 设备驱动上实现。有完
💻 C
📖 第 1 页 / 共 2 页
字号:
  address = fbinfo->Egui_address;  bpp     = fbinfo->p_bpp;  pwidth  = fbinfo->p_width;  for ( i = 0; i<height ;i++)    {       memcpy(address+ (y+i) * pwidth + x * bpp,buffer + buffer_width * bpp * i ,width * bpp);    }  }int Egui_readbuf (int x,int y,int width,int height,	      unsigned char *buffer, EGui_Window *ewindow){  int i;  int bpp;  int pwidth;  unsigned char * address;  EGui_FBinfo * fbinfo= ewindow->fbinfo;  address = fbinfo->Egui_address;  bpp     = fbinfo->p_bpp;  pwidth  = fbinfo->p_width;  for ( i = 0; i<height ;i++)    {       memcpy(buffer+width * bpp * i,address+ (y+i) * pwidth + x * bpp,width * bpp);    }  }int Egui_hline (int x,int y,int x1,int y1, Ecolor * color, EGui_Window * ewindow){  int i;  int maxx,minx;  EGui_FBinfo * fbinfo= ewindow->fbinfo;  if (y != y1)    {      printf ("No hline y=%d,y1=%d\n",y,y1);    }    maxx = x1;  minx = x;    if (x>x1)    {      maxx = x;      minx = x1;    }    if (minx > ewindow->width)    return -1;  if (y > ewindow->height)    return -1;  minx = ewindow->x + minx;  y    = ewindow->y + y;  if (maxx > ewindow->width)    maxx = ewindow->x + ewindow->width;  else maxx = ewindow->x + maxx;  for (i = minx;i <= maxx ; i++)    {      Egui_wpixel (i,y,color,ewindow);    }  return 0;  }int Egui_vline (int x,int y,int x1,int y1, Ecolor * color, EGui_Window * ewindow){  int i;  int maxy,miny;  EGui_FBinfo * fbinfo= ewindow->fbinfo;  if (x != x1){    printf ("No vline x=%d,x1=%d\n",x,x1);  }  maxy = y1;  miny = y;  if (y>y1){    maxy = y;    miny = y1;  }  if (miny > ewindow->height)    return -1;  if (x > ewindow->width)    return -1;  miny = ewindow->y + miny;  x    = ewindow->x + x;  if (maxy > ewindow->height)    maxy = ewindow->y + ewindow->height;  else maxy = ewindow->y + maxy;  for (i=miny;i <= maxy;i++){    Egui_wpixel (x,i,color,ewindow);  }  return 0;}int Egui_line (int x,int y,int x1,int y1, Ecolor *color, EGui_Window * ewindow){   EGui_FBinfo * fbinfo= ewindow->fbinfo;  int s_width;  int s_height;  int dx, dy, e, j, xchange;  char s1, s2;     s_width  = ewindow->width;  s_height = ewindow->height;    if (x<0||x1<0||y<0||y1<0){    printf ("Egui ERROR:x = %d x1 = %d y = %d y1 = %d,someone <0.\n",x,x1,y,y1);    return -1;  }    if (x == x1){    Egui_vline(x,y,x1,y1,color,ewindow);    return 0;  }    if (y == y1){    Egui_hline(x,y,x1,y1,color,ewindow);    return 0;  }    /* Bresenham */  s1 = 1;  s2 = 1;    dx = x1-x;  if (dx < 0) {    dx = -dx;    s1 = -1;  }    dy = y1-y;  if (dy < 0) {    dy = -dy;    s2 = -1;  }    xchange = 0;    if (dy>dx) {    int tmp = dx;    dx = dy;    dy = tmp;    xchange = 1;  }    e = (dy<<1) - dx;  for (j=0; j <= dx; j++)    {      Egui_wpixel(ewindow->x + x,ewindow->y + y,color,ewindow);      if (e >= 0) {	if (xchange)	  x += s1;	else	  y += s2;	e -= (dx << 1);      }      if (xchange)	y += s2;      else	x += s1;      e += (dy << 1);    }  return 0;  }int Egui_rect (int x,int y,int x1,int y1, Ecolor *color, EGui_Window * ewindow){  int s_width;  int s_height;  EGui_FBinfo * fbinfo= ewindow->fbinfo;  s_width  = fbinfo->screen_width;  s_height = fbinfo->screen_height;    if (x<0||x1<0||y<0||y1<0){    printf ("Egui ERROR:x = %d x1 = %d y = %d y1 = %d,someone <0.\n",x,x1,y,y1);    return -1;  }    if (x >s_width-1||x1>s_width-1||y>s_height-1||y1>s_height-1){    printf ("Egui ERROR:x = %d x1 = %d y = %d y1 = %d,someone too big.\n",x,x1,y,y1);    return -1;  }    Egui_hline (x,y,x1,y,color,ewindow);  Egui_hline (x,y1,x1,y1,color,ewindow);    Egui_vline (x,y,x,y1,color,ewindow);  Egui_vline (x1,y,x1,y1,color,ewindow);    return 0;}int Egui_fill (int x,int y,int x1,int y1, Ecolor * color, EGui_Window * ewindow){  int i;  int s_width;  int s_height;  int maxy,miny;  EGui_FBinfo * fbinfo= ewindow->fbinfo;  s_width  = fbinfo->screen_width;  s_height = fbinfo->screen_height;    if (x<0||x1<0||y<0||y1<0)    {      printf ("Egui ERROR:x = %d x1 = %d y = %d y1 = %d,someone <0.\n",x,x1,y,y1);      return -1;    }    if (x >s_width-1||x1>s_width-1||y>s_height-1||y1>s_height-1)    {      printf ("Egui ERROR:x = %d x1 = %d y = %d y1 = %d,someone too big.\n",x,x1,y,y1);      return -1;    }    maxy = y1;  miny = y;  if ( y > y1)    {      maxy = y;      miny = y1;    }      for (i=miny;i <= maxy;i++)    Egui_hline (x,i,x1,i,color,ewindow);    return 0;}intEgui_string_width ( Efont *font){  /* need modify,now i use default font 8x16 */  font = & defaultfn;    return font->width;}intEgui_string_height ( Efont *font){  /* need modify,now i use default font 8x16 */  font = & defaultfn;    return font->height;}/* * value is pixel */intEgui_drawchar(int x,int y,char ch, Efont *font,	       Ecolor * color,  EGui_Window *ewindow){  int i,j;  for (j=0;j<font->height;j++)    { 				/* draw a line */      for (i=0;i<font->width;i++)	{	 	  if(font->font_buf[ch * font->height + j] & (1<<i))	    {	      Egui_wpixel (x + ewindow->x + font->width - i,			   (y + j) + ewindow->y,color,ewindow);	    }	}    }}/* * value is pixel */intEgui_drawstring(int x,int y,char * string, Efont *font,		 Ecolor *color,  EGui_Window *ewindow){  int i;  int len;  /* need modify,now i use default font 8x16 */  font = & defaultfn;    len = strlen (string);  for (i = 0; i < len ; i ++)    Egui_drawchar (x + i * font->width,y,string[i],font,color,ewindow);   return 0;}intEgui_drawrgb (int x,int y,int width,int height,char * rgbbuf,	       EGui_Window * ewindow){  int i,j;  Ecolor color;  for (j = 0;j < height;j++)    {      for (i = 0;i < width * 3;i += 3 )	{  	  color.b = rgbbuf [j * width * 3 + i];	  color.g = rgbbuf [j * width * 3 + i + 1];	  color.r = rgbbuf [j * width * 3 + i + 2];	  color_from_rgb (ewindow,&color);	  	  Egui_wpixel(ewindow->x+i / 3  + x,ewindow->y + j + y,&color,ewindow);	}         }  return;}/* x,y is screen offset position ; * width,height is display width and height; * px,py is pixmap 's offset position; * pw,ph is pixmap 's buffer width and height; */intEgui_drawpixmap (int x,int y,int width,int height,char * pixmap,		 int px, int py, int pw,int ph,	       EGui_Window * ewindow){  int i;  int bpp;  int pwidth;  unsigned char * address;  EGui_FBinfo * fbinfo= ewindow->fbinfo;  address = fbinfo->Egui_address;  bpp     = fbinfo->p_bpp;  pwidth  = fbinfo->p_width;  /* if have not enough pixmap width and height,   * only display pixmap 's pw and ph.   */  if (width > pw)    width = pw;  if (height > ph)    height = ph;  x = ewindow->x + x;  y = ewindow->y + y;  /* goto pixmap's offset */  pixmap = pixmap + px + pw * bpp * py;  for (i = 0;i < height;i++)    {      memcpy(address+ (y+i) * pwidth + x * bpp, pixmap + pw * bpp * i ,width * bpp);         }  return;}intEgui_getrgb (int x,int y,int width,int height,char * rgbbuf,	       EGui_Window * ewindow){  int rgb;  int i,j;  unsigned char r,g,b;    for (j = 0;j < height;j++)    {      for (i = 0;i < width * 3;i += 3 )	{  	  Egui_rpoint(ewindow->x+i / 3  + x,ewindow->y + j + y,&rgb,ewindow);	  b = rgb & 0xFF;	  g = (rgb >> 8 ) & 0xFF;	  r = (rgb >> 16 ) & 0xFF;	  rgbbuf [j * width * 3 + i]     = b;	  rgbbuf [j * width * 3 + i + 1] = g;	  rgbbuf [j * width * 3 + i + 2] = r;	}         }  return;}intEgui_shadow_out (int x,int y, int w,int h,EGui_Window * window){      int i = 0;      Ecolor color;      new_color( window,&color,0xA0A0A0);      Egui_rect (x+i,y+i,w-i-2,h-i-2, &color, window);            i++;      new_color( window,&color,0xF0F0F0);      /* left vertical */      Egui_line (x+i,y+i,x+i,h-i-2, &color, window);      /* up horizontal */      Egui_line (x+i,y+i,w-i-2,y+i, &color, window);            new_color( window,&color,0x808080);      /* right vertical */      Egui_line (w-i,y+i-1,w-i,h-i, &color, window);      /* bottom horizontal */      Egui_line (x+i-1,h-i,w-i,h-i, &color, window);     }intEgui_shadow_in (int x,int y,int w,int h,EGui_Window * window){      int i = 0;      Ecolor color;      new_color( window,&color,0xA0A0A0);      Egui_rect (x+i,y+i,w-i-2,h-i-2, &color, window);            i++;      new_color( window,&color,0x808080);         /* left vertical */      Egui_line (x+i,y+i,x+i,h-i-2, &color, window);      /* up horizontal */      Egui_line (x+i,y+i,w-i-2,y+i, &color, window);            new_color( window,&color,0xF0F0F0);       /* right vertical */      Egui_line (w-i,y+i-1,w-i,h-i, &color, window);      /* bottom horizontal */      Egui_line (x+i-1,h-i,w-i,h-i, &color, window);           i++;      new_color(window,&color,0xEDEDED);      Egui_fill (x+i,y+i,w-i-1,h-i-1, &color, window);}integui_loop (void){      while (1)    {				/* loop get event */      get_egui_event ();      Egui_timer_handler();    }  return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -