Fix mode-page glyph clip, digit tracking, and nav separator.
Match mode.png: widen card value slots, use ASCII advance spacing so 1364 is not cramped, and draw the section/nav divider line. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
5290d897a0
commit
d7af2cee1a
|
|
@ -412,8 +412,10 @@ void Refresh_Transpose(const LEBEL_UI *UI, GUI_SWITCH * Group)
|
|||
clear_w = UI0902_CARD_VALUE_W;
|
||||
value_y = UI_CardTextDrawY(UI0902_CARD_VALUE_Y, UI0902_CARD_VALUE_H,
|
||||
UI0902_CARD_VALUE_LH, UI0902_CARD_VALUE_SIZE);
|
||||
/* 清区高度不得侵入 KEY/BPM 行 */
|
||||
clear_h = (uint16_t)(UI0902_CARD_VALUE_SIZE + 1);
|
||||
/* 清区高度保证主值完整;不得侵入 KEY/BPM 行 */
|
||||
clear_h = (uint16_t)(UI0902_CARD_VALUE_H + 1);
|
||||
if (clear_h < (uint16_t)(UI0902_CARD_VALUE_SIZE + 1))
|
||||
clear_h = (uint16_t)(UI0902_CARD_VALUE_SIZE + 1);
|
||||
if (value_y + clear_h > UI0902_CARD_SUB_Y)
|
||||
clear_h = (uint16_t)(UI0902_CARD_SUB_Y - value_y);
|
||||
x1 = UI_CardTextBoxX1(cx, clear_w, clear_w);
|
||||
|
|
@ -761,7 +763,10 @@ void Draw_Bottom_Bar(uint8_t sel, uint8_t first_back)
|
|||
uint8_t i;
|
||||
|
||||
(void)first_back;
|
||||
LCD_FillByColor(0, 275, 240, 320, UI0902_BG_COLOR);
|
||||
LCD_FillByColor(0, 263, 240, 320, UI0902_BG_COLOR);
|
||||
/* mode.png:段落钮与底栏之间横线分隔 */
|
||||
LCD_DrawLine(0, UI0902_SEP_LINE_Y, 239, UI0902_SEP_LINE_Y, UI0902_SEP_LINE_COLOR);
|
||||
LCD_DrawLine(0, UI0902_SEP_LINE_Y + 1, 239, UI0902_SEP_LINE_Y + 1, UI0902_SEP_LINE_COLOR);
|
||||
|
||||
if (sel == UI0902_NAV_UNIVERSAL) { icons[0] = gImage_Nav_Universal_Sel; ws[0] = 36; hs[0] = 28; }
|
||||
else { icons[0] = gImage_Nav_Universal_Not; ws[0] = 36; hs[0] = 28; }
|
||||
|
|
|
|||
|
|
@ -54,13 +54,13 @@ void CallUI_RestoreSelect(void);
|
|||
#define UI0902_FONT_NAV 9
|
||||
/* ASCII 字宽(须与 Drv LCD_GetAsciiMetrics 一致) */
|
||||
#define UI0902_ASCII_W(sz) \
|
||||
((sz) == 8 ? 5 : \
|
||||
(sz) == 9 ? 7 : \
|
||||
(sz) == 11 ? 6 : \
|
||||
(sz) == 12 ? 7 : \
|
||||
(sz) == 13 || (sz) == 15 || (sz) == 16 ? 8 : ((sz) / 2))
|
||||
((sz) == 8 ? 6 : \
|
||||
(sz) == 9 ? 8 : \
|
||||
(sz) == 11 ? 7 : \
|
||||
(sz) == 12 ? 8 : \
|
||||
(sz) == 13 || (sz) == 15 || (sz) == 16 ? 10 : ((sz) / 2 + 1))
|
||||
|
||||
/* 移调卡文字(0902-04 实测绝对 Y) */
|
||||
/* 移调卡文字(主值加宽+下移 KEY,防 Cb/101 底/右裁切) */
|
||||
#define UI0902_CARD_TEXT_CX_L (UI0902_MARGIN_X + UI0902_CARD_W / 2) /* 64 */
|
||||
#define UI0902_CARD_TEXT_CX_R (UI0902_MARGIN_X + UI0902_CARD_W + UI0902_CARD_GAP + UI0902_CARD_W / 2) /* 176 */
|
||||
|
||||
|
|
@ -72,15 +72,19 @@ void CallUI_RestoreSelect(void);
|
|||
|
||||
#define UI0902_CARD_VALUE_SIZE UI0902_FONT_HERO /* 16 */
|
||||
#define UI0902_CARD_VALUE_LH 16
|
||||
#define UI0902_CARD_VALUE_W 24
|
||||
#define UI0902_CARD_VALUE_H 16
|
||||
#define UI0902_CARD_VALUE_Y 70
|
||||
#define UI0902_CARD_VALUE_W 34 /* 3×10 字距步进,101 不贴边 */
|
||||
#define UI0902_CARD_VALUE_H 17
|
||||
#define UI0902_CARD_VALUE_Y 69
|
||||
|
||||
#define UI0902_CARD_SUB_SIZE UI0902_FONT_SUB /* 9 */
|
||||
#define UI0902_CARD_SUB_LH 9
|
||||
#define UI0902_CARD_SUB_W 28
|
||||
#define UI0902_CARD_SUB_H 9
|
||||
#define UI0902_CARD_SUB_Y 89
|
||||
#define UI0902_CARD_SUB_Y 91
|
||||
|
||||
/* 段落钮与底栏分隔线(mode.png ≈ y274) */
|
||||
#define UI0902_SEP_LINE_Y 274
|
||||
#define UI0902_SEP_LINE_COLOR 0x0883 /* #09111C */
|
||||
|
||||
/* 兼容旧相对偏移宏(= 绝对Y - CARD_Y) */
|
||||
#define UI0902_CARD_LABEL_DY (UI0902_CARD_LABEL_Y - UI0902_CARD_Y)
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ static uint16_t LCD_GetChsTableSize(uint8_t sizey)
|
|||
|
||||
static uint8_t LCD_GetAsciiMetrics(uint8_t size, uint8_t *char_width, uint8_t *char_height)
|
||||
{
|
||||
/* 字宽略大于 size/2,避免 WQY/Liberation 缩进窄格时右缘被裁 */
|
||||
/* 与点阵源一致的字形格宽(ShowChar 窗口必须匹配字库) */
|
||||
*char_height = size;
|
||||
switch (size)
|
||||
{
|
||||
|
|
@ -108,6 +108,17 @@ static uint8_t LCD_GetAsciiMetrics(uint8_t size, uint8_t *char_width, uint8_t *c
|
|||
}
|
||||
}
|
||||
|
||||
/* 显示步进:字形宽 + 字距,和弦数字等更舒展,避免右缘贴死 */
|
||||
static uint8_t LCD_GetAsciiAdvance(uint8_t size)
|
||||
{
|
||||
uint8_t w, h;
|
||||
if (!LCD_GetAsciiMetrics(size, &w, &h))
|
||||
return (uint8_t)(size / 2);
|
||||
if (size >= 13)
|
||||
return (uint8_t)(w + 2); /* 字距 +2,对齐 mode.png 舒展感 */
|
||||
return (uint8_t)(w + 1);
|
||||
}
|
||||
|
||||
//r:0-31 g:0-63 b:0-31
|
||||
uint16_t RGB(int r,int g,int b)
|
||||
{
|
||||
|
|
@ -950,12 +961,14 @@ void LCD_DrawRect(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t c
|
|||
void LCD_ShowString(uint16_t x, uint16_t y, const uint8_t *p, uint16_t fc, uint16_t bc, uint8_t sizey, uint8_t mode)
|
||||
{
|
||||
uint8_t cw, ch;
|
||||
uint8_t adv;
|
||||
if (!LCD_GetAsciiMetrics(sizey, &cw, &ch))
|
||||
return;
|
||||
adv = LCD_GetAsciiAdvance(sizey);
|
||||
while(*p != '\0')
|
||||
{
|
||||
LCD_ShowChar(x, y, *p, fc, bc, sizey, mode);
|
||||
x += cw;
|
||||
x += adv;
|
||||
p++;
|
||||
}
|
||||
}
|
||||
|
|
@ -1043,7 +1056,7 @@ static uint16_t LCD_GetMixedStringWidth(uint8_t *str, uint8_t sizey)
|
|||
{
|
||||
uint16_t width = 0;
|
||||
uint8_t xStepCn = sizey;
|
||||
uint8_t xStepAscii = sizey / 2;
|
||||
uint8_t xStepAscii = LCD_GetAsciiAdvance(sizey);
|
||||
|
||||
while(*str != '\0')
|
||||
{
|
||||
|
|
@ -1078,7 +1091,7 @@ uint16_t LCD_ShowMixedString(uint16_t x1, uint16_t x2, uint16_t y, uint8_t *str,
|
|||
{
|
||||
const char (*codeTab)[2] = NULL;
|
||||
uint8_t xStepCn = sizey;
|
||||
uint8_t xStepAscii = sizey / 2;
|
||||
uint8_t xStepAscii = LCD_GetAsciiAdvance(sizey);
|
||||
uint16_t draw_x;
|
||||
|
||||
codeTab = LCD_GetChsTable(sizey);
|
||||
|
|
@ -1151,11 +1164,12 @@ uint16_t LCD_ShowMixedString(uint16_t x1, uint16_t x2, uint16_t y, uint8_t *str,
|
|||
******************************************************************************/
|
||||
void LCD_ClearString(uint16_t x, uint16_t y, const uint8_t *p, uint16_t bc, uint8_t sizey, uint8_t mode)
|
||||
{
|
||||
uint8_t adv = LCD_GetAsciiAdvance(sizey);
|
||||
while (*p != '\0')
|
||||
{
|
||||
// 用背景色bc作为“前景色”,显示空格字符,覆盖原字符
|
||||
LCD_ShowChar(x, y, ' ', bc, bc, sizey, mode); // 前景色=背景色=bc,相当于清除
|
||||
x += sizey / 2; // 与原显示函数x步长一致
|
||||
x += adv;
|
||||
p++;
|
||||
}
|
||||
}
|
||||
|
|
@ -1357,9 +1371,11 @@ uint16_t LCD_ShowString_AutoAlign(uint16_t x1, uint16_t x2, uint16_t y, const ui
|
|||
uint8_t align, uint16_t fc, uint16_t bc, uint8_t mode, uint8_t size)
|
||||
{
|
||||
uint8_t CHAR_WIDTH, CHAR_HEIGHT;
|
||||
uint8_t CHAR_ADV;
|
||||
|
||||
if (!LCD_GetAsciiMetrics(size, &CHAR_WIDTH, &CHAR_HEIGHT))
|
||||
return 0;
|
||||
CHAR_ADV = LCD_GetAsciiAdvance(size);
|
||||
|
||||
uint16_t str_len = 0;
|
||||
uint16_t str_total_width;
|
||||
|
|
@ -1372,8 +1388,8 @@ uint16_t LCD_ShowString_AutoAlign(uint16_t x1, uint16_t x2, uint16_t y, const ui
|
|||
str_len++;
|
||||
}
|
||||
|
||||
// 计算字符串总宽度
|
||||
str_total_width = str_len * CHAR_WIDTH;
|
||||
// 计算字符串总宽度(含字距)
|
||||
str_total_width = str_len * CHAR_ADV;
|
||||
|
||||
// 根据对齐方式计算起始 X 坐标
|
||||
switch (align)
|
||||
|
|
@ -1399,7 +1415,7 @@ uint16_t LCD_ShowString_AutoAlign(uint16_t x1, uint16_t x2, uint16_t y, const ui
|
|||
while (*p != '\0')
|
||||
{
|
||||
LCD_ShowChar(curr_x, y, *p, fc, bc, CHAR_HEIGHT, mode);
|
||||
curr_x += CHAR_WIDTH;
|
||||
curr_x += CHAR_ADV;
|
||||
p++;
|
||||
}
|
||||
return curr_x;
|
||||
|
|
@ -1541,9 +1557,11 @@ uint16_t LCD_ShowString_AutoAlign_Gradient(uint16_t x1, uint16_t x2, uint16_t y,
|
|||
uint16_t color_top, uint16_t color_bottom, uint8_t size)
|
||||
{
|
||||
uint8_t CHAR_WIDTH, CHAR_HEIGHT;
|
||||
uint8_t CHAR_ADV;
|
||||
|
||||
if (!LCD_GetAsciiMetrics(size, &CHAR_WIDTH, &CHAR_HEIGHT))
|
||||
return 0;
|
||||
CHAR_ADV = LCD_GetAsciiAdvance(size);
|
||||
|
||||
uint16_t str_len = 0;
|
||||
uint16_t str_total_width;
|
||||
|
|
@ -1553,7 +1571,7 @@ uint16_t LCD_ShowString_AutoAlign_Gradient(uint16_t x1, uint16_t x2, uint16_t y,
|
|||
while (p[str_len] != '\0') str_len++;
|
||||
if (str_len == 0) return 0;
|
||||
|
||||
str_total_width = str_len * CHAR_WIDTH;
|
||||
str_total_width = str_len * CHAR_ADV;
|
||||
|
||||
switch (align)
|
||||
{
|
||||
|
|
@ -1569,7 +1587,7 @@ uint16_t LCD_ShowString_AutoAlign_Gradient(uint16_t x1, uint16_t x2, uint16_t y,
|
|||
break;
|
||||
}
|
||||
|
||||
// 1. 画垂直渐变背景
|
||||
// 1. 画垂直渐变背景(覆盖字形+字距)
|
||||
LCD_FillGradient(curr_x, y, curr_x + str_total_width, y + CHAR_HEIGHT, color_top, color_bottom);
|
||||
|
||||
// 2. 叠加模式显示文字(mode=1)
|
||||
|
|
|
|||
Loading…
Reference in New Issue