📄 libegui.c
字号:
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 + -