Align free-mode layout to 0902-04 geometry.

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 <cursoragent@cursor.com>
This commit is contained in:
yuquanjun 2026-09-04 06:39:00 +08:00
parent ce2cfd9cd1
commit 5290d897a0
3 changed files with 41 additions and 37 deletions

View File

@ -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 },
/* 节奏类型 / 本地曲目 TAB090212-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~4090212/68/125/182 起,宽 47步进 57 */
/* 演奏段落 1~40902-0412/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 },

View File

@ -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<EFBC8C>?像素
@ -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-0412/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;

View File

@ -32,25 +32,25 @@ void CallUI_RestoreSelect(void);
#define UI0902_BG_COLOR 0x0042 /* #000813 页面背景 */
#define UI0902_ROW_BG 0x2147 /* #242B3A 列表行背景 */
/* 0902 / 0819240×320 模式页网格(按 0902 参考图 03/04/05 实测比例换算)
* 26 y48 h55TAB 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) /* 108TAB 顶 */
#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/BPM3×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)