Quellcode durchsuchen

update:gtfont优化ascii码宽度显示

Dozingfiretruck vor 2 Jahren
Ursprung
Commit
5d3130379a

+ 1 - 1
components/eink/luat_lib_eink.c

@@ -1036,7 +1036,7 @@ static int l_eink_model(lua_State *L) {
 #ifdef LUAT_USE_GTFONT
 
 #include "GT5SLCD2E_1A.h"
-extern void gtfont_draw_w(unsigned char *pBits,unsigned int x,unsigned int y,unsigned int size,unsigned int widt,unsigned int high,int(*point)(void*),void* userdata,int mode);
+extern unsigned int gtfont_draw_w(unsigned char *pBits,unsigned int x,unsigned int y,unsigned int size,unsigned int widt,unsigned int high,int(*point)(void*),void* userdata,int mode);
 extern void gtfont_draw_gray_hz(unsigned char *data,unsigned short x,unsigned short y,unsigned short w ,unsigned short h,unsigned char grade, unsigned char HB_par,int(*point)(void*,uint16_t, uint16_t, uint32_t),void* userdata,int mode);
 
 static int l_eink_draw_gtfont_gb2312(lua_State *L) {

+ 4 - 3
components/gtfont/luat_lib_gtfont.c

@@ -26,10 +26,9 @@ static luat_color_t lcd_str_fg_color  = BLACK ,lcd_str_bg_color  = WHITE ;
 extern luat_spi_device_t* gt_spi_dev;
 
 //横置横排显示
-void gtfont_draw_w(unsigned char *pBits,unsigned int x,unsigned int y,unsigned int size,unsigned int widt,unsigned int high,int(*point)(void*,uint16_t, uint16_t, uint32_t),void* userdata,int mode){
-	unsigned int i,j,k,n;
+unsigned int gtfont_draw_w(unsigned char *pBits,unsigned int x,unsigned int y,unsigned int size,unsigned int widt,unsigned int high,int(*point)(void*,uint16_t, uint16_t, uint32_t),void* userdata,int mode){
+	unsigned int i=0,j=0,k=0,n=0,dw=0;
 	unsigned char temp;
-	n = 0;
 	int w = ((widt+7)>> 3);
 	for( i = 0;i < high; i++){
 		for( j = 0;j < w;j++){
@@ -46,6 +45,7 @@ void gtfont_draw_w(unsigned char *pBits,unsigned int x,unsigned int y,unsigned i
 					// else if (mode == 1)point((Paint *)userdata, x+k+(j*8), y+i, 0xFFFF);
 				}else{
 					/* 显示一个像素点 */
+					if (dw<k+(j*8)) dw = k+(j*8);
 					if (mode == 0)point((luat_lcd_conf_t *)userdata, x+k+(j*8), y+i, lcd_str_fg_color);
 					else if (mode == 1)point((Paint *)userdata, x+k+(j*8), y+i, 0x0000);
 					else if (mode == 2)point((u8g2_t *)userdata, x+k+(j*8), y+i, 0x0000);
@@ -56,6 +56,7 @@ void gtfont_draw_w(unsigned char *pBits,unsigned int x,unsigned int y,unsigned i
 			n += (size-widt)>>3;
 		}
 	}
+	return ++dw;
 }
 
 /*----------------------------------------------------------------------------------------

+ 3 - 3
components/lcd/luat_lib_lcd.c

@@ -936,7 +936,7 @@ static int l_lcd_draw_str(lua_State* L) {
 #ifdef LUAT_USE_GTFONT
 
 #include "GT5SLCD2E_1A.h"
-extern void gtfont_draw_w(unsigned char *pBits,unsigned int x,unsigned int y,unsigned int size,unsigned int widt,unsigned int high,int(*point)(void*),void* userdata,int mode);
+extern unsigned int gtfont_draw_w(unsigned char *pBits,unsigned int x,unsigned int y,unsigned int size,unsigned int widt,unsigned int high,int(*point)(void*),void* userdata,int mode);
 extern void gtfont_draw_gray_hz(unsigned char *data,unsigned short x,unsigned short y,unsigned short w ,unsigned short h,unsigned char grade, unsigned char HB_par,int(*point)(void*,uint16_t, uint16_t, uint32_t),void* userdata,int mode);
 
 /*
@@ -1064,8 +1064,8 @@ static int l_lcd_draw_gtfont_utf8(lua_State *L) {
           LLOGW("get gtfont error size:%d font_size:%d",size,font_size);
           return 0;
         }
-        gtfont_draw_w(buf , x ,y , font_size,size , size,luat_lcd_draw_point,default_conf,0);
-        x+=size;
+        unsigned int dw = gtfont_draw_w(buf , x ,y , font_size,size , size,luat_lcd_draw_point,default_conf,0);
+        x+=str<0x80?dw:size;
       }
     }
     lcd_auto_flush(default_conf);

+ 1 - 1
components/u8g2/luat_lib_u8g2.c

@@ -673,7 +673,7 @@ end:
 #ifdef LUAT_USE_GTFONT
 
 #include "GT5SLCD2E_1A.h"
-extern void gtfont_draw_w(unsigned char *pBits,unsigned int x,unsigned int y,unsigned int size,unsigned int widt,unsigned int high,int(*point)(void*),void* userdata,int mode);
+extern unsigned int gtfont_draw_w(unsigned char *pBits,unsigned int x,unsigned int y,unsigned int size,unsigned int widt,unsigned int high,int(*point)(void*),void* userdata,int mode);
 extern void gtfont_draw_gray_hz(unsigned char *data,unsigned short x,unsigned short y,unsigned short w ,unsigned short h,unsigned char grade, unsigned char HB_par,int(*point)(void*,uint16_t, uint16_t, uint32_t),void* userdata,int mode);
 
 static int gtfont_u8g2_DrawPixel(u8g2_t *u8g2, uint16_t x, uint16_t y,uint32_t color){