From 5290d897a07745de57e5091090757d86ce6394a9 Mon Sep 17 00:00:00 2001 From: yuquanjun Date: Fri, 4 Sep 2026 06:39:00 +0800 Subject: [PATCH] Align free-mode layout to 0902-04 geometry. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Match card/row/section positions and sizes from the 240x320 reference, restore 16px hero values, and place the 和弦走向 title above the row like timbre. Co-authored-by: Cursor --- Global/Global.c | 16 ++++++++-------- UI/UI_global.c | 20 ++++++++++++-------- UI/UI_global.h | 42 +++++++++++++++++++++--------------------- 3 files changed, 41 insertions(+), 37 deletions(-) diff --git a/Global/Global.c b/Global/Global.c index 9ad9d88..e66ad4e 100644 --- a/Global/Global.c +++ b/Global/Global.c @@ -67,11 +67,11 @@ Fader_t faders[4] = { const Touch_AreaTypeDef Touch_Areas[] = { /* Xmin,Xmax,Ymin,Ymax, Flag, Value, ID, action — 与 UI_Label 网格同步 */ - { 12, 62, UI0902_CARD_Y, UI0902_CARD_Y + UI0902_CARD_H - 1, -1, 0, GUI_TRANSPOSE, NULL }, - { 63, 114, UI0902_CARD_Y, UI0902_CARD_Y + UI0902_CARD_H - 1, 1, 0, GUI_TRANSPOSE, NULL }, + { 12, 64, UI0902_CARD_Y, UI0902_CARD_Y + UI0902_CARD_H - 1, -1, 0, GUI_TRANSPOSE, NULL }, + { 65, 116, UI0902_CARD_Y, UI0902_CARD_Y + UI0902_CARD_H - 1, 1, 0, GUI_TRANSPOSE, NULL }, - { 125, 175, UI0902_CARD_Y, UI0902_CARD_Y + UI0902_CARD_H - 1, -1, 0, GUI_SPEED, NULL }, - { 176, 227, UI0902_CARD_Y, UI0902_CARD_Y + UI0902_CARD_H - 1, 1, 0, GUI_SPEED, NULL }, + { 125, 176, UI0902_CARD_Y, UI0902_CARD_Y + UI0902_CARD_H - 1, -1, 0, GUI_SPEED, NULL }, + { 177, 228, UI0902_CARD_Y, UI0902_CARD_Y + UI0902_CARD_H - 1, 1, 0, GUI_SPEED, NULL }, /* 节奏类型 / 本地曲目 TAB(0902:12-66 / 72-127) */ { 12, 66, UI0902_MODE_Y, UI0902_MODE_Y + UI0902_TAB_H - 1, 0, 0, GUI_AUTOBAND_SW, NULL }, @@ -83,11 +83,11 @@ const Touch_AreaTypeDef Touch_Areas[] = { 13, 120, UI0902_TIMBRE_Y, UI0902_TIMBRE_Y + UI0902_TIMBRE_H - 1, -1, 0, GUI_TIMBRE_SELECT, NULL }, { 121, 227, UI0902_TIMBRE_Y, UI0902_TIMBRE_Y + UI0902_TIMBRE_H - 1, 1, 0, GUI_TIMBRE_SELECT, NULL }, - /* 演奏段落 1~4(0902:12/68/125/182 起,宽 47,步进 57) */ + /* 演奏段落 1~4(0902-04:12/69/125/182,宽 47,步进 57) */ { 12, 58, UI0902_SECTION_Y, UI0902_SECTION_Y + UI0902_SECTION_BTN_H - 1, 0, 0, GUI_PLAY_SECTION, NULL }, - { 68, 114, UI0902_SECTION_Y, UI0902_SECTION_Y + UI0902_SECTION_BTN_H - 1, 0, 1, GUI_PLAY_SECTION, NULL }, - { 125, 171, UI0902_SECTION_Y, UI0902_SECTION_Y + UI0902_SECTION_BTN_H - 1, 0, 2, GUI_PLAY_SECTION, NULL }, - { 182, 228, UI0902_SECTION_Y, UI0902_SECTION_Y + UI0902_SECTION_BTN_H - 1, 0, 3, GUI_PLAY_SECTION, NULL }, + { 69, 115, UI0902_SECTION_Y, UI0902_SECTION_Y + UI0902_SECTION_BTN_H - 1, 0, 1, GUI_PLAY_SECTION, NULL }, + { 126, 172, UI0902_SECTION_Y, UI0902_SECTION_Y + UI0902_SECTION_BTN_H - 1, 0, 2, GUI_PLAY_SECTION, NULL }, + { 183, 229, UI0902_SECTION_Y, UI0902_SECTION_Y + UI0902_SECTION_BTN_H - 1, 0, 3, GUI_PLAY_SECTION, NULL }, /* 底栏四键:万能 | 普通 | 专业 | 设置 */ { 0, 59, 280, 319, 0, UI0902_NAV_UNIVERSAL, GUI_NAV_BAR, NULL }, diff --git a/UI/UI_global.c b/UI/UI_global.c index 932128f..4ea4960 100644 --- a/UI/UI_global.c +++ b/UI/UI_global.c @@ -328,9 +328,7 @@ void show_Param(const LEBEL_UI *UI, GUI_SWITCH *Group) // 拼接序号 1. 2. 3. sprintf(NumBuf, "%d.", idx); - // 计算数字宽度 - uint16_t num_w = (strlen(NumBuf)) * (UI->Text_size / 2); - // 获取音色中文 + uint16_t num_w = (uint16_t)(strlen(NumBuf) * UI0902_ASCII_W(UI->Text_size)); GET_ParamNum_Str(Group->Current, 0, Textstr_new, Group->Id); uint32_t string_start_x = LCD_ShowMixedString(UI->x+10, UI->x + UI->w, text_y, (uint8_t *)Textstr_new , LCD_ALIGN_CENTER, WHITE, BLACK, UI->Text_size, 1); //序号X = 中文起点 - 数字宽度 - 5,间�?像素 @@ -636,11 +634,17 @@ void label_ModeSelece_ui(const LEBEL_UI *UI,GUI_SWITCH * Group) Draw_Tab_Mode_Menu(UI, &mGuiData[GUI_AUTOBAND_SW]); break; case 2: + /* 普通模式无 TAB:标题画在曲目行上方(与音色行一致),对齐 0902-04 */ str = (char*)"\xBA\xCD\xCF\xD2\xD7\xDF\xCF\xF2"; - LCD_ShowChinese_AutoAlign( - UI->x, UI->x+UI->w, UI->y+3, - (uint8_t *)str, UI->Tab_Align, UI->Tab_fc, BLACK, 0, UI->Tab_size - ); + { + uint16_t row_y = (uint16_t)(UI->y + UI0902_TAB_H + 4); + uint16_t lab_y = (row_y > 15) ? (uint16_t)(row_y - 15) : 0; + LCD_FillByColor(UI->x, lab_y, UI->x + UI->w, (uint16_t)(row_y - 1), UI0902_BG_COLOR); + LCD_ShowChinese_AutoAlign( + UI->x, UI->x+UI->w, lab_y, + (uint8_t *)str, UI->Tab_Align, UI->Tab_fc, UI0902_BG_COLOR, 0, UI->Tab_size + ); + } break; } switch(mGuiData[GUI_TAB_INDEX].Current) @@ -824,7 +828,7 @@ void Draw_Tab_Section_Menu(const LEBEL_UI *UI, TAB_SECTION_INDEX select_tab) const uint16_t tab_h = UI0902_SECTION_BTN_H; const uint8_t tab_r = UI0902_RADIUS_BTN; const uint8_t pitch = UI0902_SECTION_PITCH; - const uint16_t start_x = UI0902_MARGIN_X; + const uint16_t start_x = UI0902_MARGIN_X; /* 0902-04:12/69/126/183 */ const uint16_t start_y = UI->y; /* 0819:演奏段落数字与标题同为 13,按钮内垂直居中(视觉重心 +1) */ const uint16_t text_y = start_y + (tab_h - UI0902_FONT_BODY) / 2 + 1; diff --git a/UI/UI_global.h b/UI/UI_global.h index 792c273..31fc7b3 100644 --- a/UI/UI_global.h +++ b/UI/UI_global.h @@ -32,25 +32,25 @@ void CallUI_RestoreSelect(void); #define UI0902_BG_COLOR 0x0042 /* #000813 页面背景 */ #define UI0902_ROW_BG 0x2147 /* #242B3A 列表行背景 */ -/* 0902 / 0819:240×320 模式页网格(按 0902 参考图 03/04/05 实测比例换算) - * 状态栏 26;双卡 y48 h55;TAB y108 h18;曲目行 y130 h31;音色行 y180 h30;段落钮 y229 h34 */ +/* 0902-04 普通模式实测(240×320): + * 双卡 y48 h55 w105 gap8;和弦行 y130 h31;音色 y180 h30;段落钮 y229 h34 */ #define UI0902_MARGIN_X 12 #define UI0902_CONTENT_W 216 #define UI0902_CARD_GAP_TOP 22 #define UI0902_CARD_Y (UI_STATUS_BAR_H + UI0902_CARD_GAP_TOP) /* 48 */ -#define UI0902_CARD_H 60 /* 原55;加高给 KEY/BPM 独立行,避免与主值叠在一起 */ -#define UI0902_CARD_W 103 -#define UI0902_CARD_GAP 10 -#define UI0902_MODE_Y (UI0902_CARD_Y + UI0902_CARD_H + 5) /* 113 */ -#define UI0902_MODE_H 53 -#define UI0902_TIMBRE_Y (UI0902_MODE_Y + UI0902_MODE_H + 19) /* 180 */ +#define UI0902_CARD_H 55 +#define UI0902_CARD_W 105 +#define UI0902_CARD_GAP 8 +#define UI0902_MODE_Y (UI0902_CARD_Y + UI0902_CARD_H + 5) /* 108:TAB 顶 */ +#define UI0902_MODE_H 53 /* TAB18 + 间隙4 + 曲目行31 */ +#define UI0902_TIMBRE_Y 180 #define UI0902_TIMBRE_H 30 -#define UI0902_SECTION_Y (UI0902_TIMBRE_Y + UI0902_TIMBRE_H + 19) /* 229 */ +#define UI0902_SECTION_Y 229 #define UI0902_SECTION_H 34 #define UI0902_FONT_LABEL 11 /* 标注:移调/速度 Medium 11 */ #define UI0902_FONT_BODY 13 /* 曲目/音色正文、演奏段落 */ -#define UI0902_FONT_HERO 13 /* 标注:主值 Medium 13 */ -#define UI0902_FONT_SUB 9 /* 稿面 KEY/BPM≈7.5;点阵用 9 */ +#define UI0902_FONT_HERO 16 /* 主值 C/88 与稿面大号一致 */ +#define UI0902_FONT_SUB 9 /* KEY/BPM */ #define UI0902_FONT_NAV 9 /* ASCII 字宽(须与 Drv LCD_GetAsciiMetrics 一致) */ #define UI0902_ASCII_W(sz) \ @@ -60,27 +60,27 @@ void CallUI_RestoreSelect(void); (sz) == 12 ? 7 : \ (sz) == 13 || (sz) == 15 || (sz) == 16 ? 8 : ((sz) / 2)) -/* 移调卡文字标注(稿面):字号/行高/文本框/坐标;速度卡镜像同一套 */ -#define UI0902_CARD_TEXT_CX_L 64 /* 稿面 X:按水平中心理解(三行同 X) */ +/* 移调卡文字(0902-04 实测绝对 Y) */ +#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 */ #define UI0902_CARD_LABEL_SIZE UI0902_FONT_LABEL /* 11 */ #define UI0902_CARD_LABEL_LH 13 #define UI0902_CARD_LABEL_W 22 #define UI0902_CARD_LABEL_H 11 -#define UI0902_CARD_LABEL_Y 60 +#define UI0902_CARD_LABEL_Y 56 -#define UI0902_CARD_VALUE_SIZE UI0902_FONT_HERO /* 13 */ -#define UI0902_CARD_VALUE_LH 9 -#define UI0902_CARD_VALUE_W 24 /* 3×8:容纳 101 / Db */ -#define UI0902_CARD_VALUE_H 13 -#define UI0902_CARD_VALUE_Y 74 /* 主值顶;底约 86 */ +#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_SUB_SIZE UI0902_FONT_SUB /* 9 */ #define UI0902_CARD_SUB_LH 9 -#define UI0902_CARD_SUB_W 28 /* KEY/BPM:3×7 + 余量 */ +#define UI0902_CARD_SUB_W 28 #define UI0902_CARD_SUB_H 9 -#define UI0902_CARD_SUB_Y 97 /* 与主值底留 ≥10px,避免 KEY 贴住/叠住 C */ +#define UI0902_CARD_SUB_Y 89 /* 兼容旧相对偏移宏(= 绝对Y - CARD_Y) */ #define UI0902_CARD_LABEL_DY (UI0902_CARD_LABEL_Y - UI0902_CARD_Y)