diff --git a/Global/Global.c b/Global/Global.c index 73bb35e..9ad9d88 100644 --- a/Global/Global.c +++ b/Global/Global.c @@ -68,26 +68,26 @@ 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, 113, 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 }, - { 126, 176, UI0902_CARD_Y, UI0902_CARD_Y + UI0902_CARD_H - 1, -1, 0, GUI_SPEED, NULL }, - { 177, 227, UI0902_CARD_Y, UI0902_CARD_Y + UI0902_CARD_H - 1, 1, 0, GUI_SPEED, 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 }, - /* 节奏类型 / 本地曲目 TAB */ - { 12, 67, UI0902_MODE_Y + 1, UI0902_MODE_Y + UI0902_TAB_H, 0, 0, GUI_AUTOBAND_SW, NULL }, - { 74, 129, UI0902_MODE_Y + 1, UI0902_MODE_Y + UI0902_TAB_H, 0, 1, GUI_AUTOBAND_SW, 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 }, + { 72, 127, UI0902_MODE_Y, UI0902_MODE_Y + UI0902_TAB_H - 1, 0, 1, GUI_AUTOBAND_SW, NULL }, - { 13, 120, UI0902_MODE_Y + 25, UI0902_MODE_Y + UI0902_MODE_H - 1, -1, 0, GUI_MODE_PARAM, NULL }, - { 121, 227, UI0902_MODE_Y + 25, UI0902_MODE_Y + UI0902_MODE_H - 1, 1, 0, GUI_MODE_PARAM, NULL }, + { 13, 120, UI0902_MODE_Y + UI0902_TAB_H + 4, UI0902_MODE_Y + UI0902_MODE_H - 1, -1, 0, GUI_MODE_PARAM, NULL }, + { 121, 227, UI0902_MODE_Y + UI0902_TAB_H + 4, UI0902_MODE_Y + UI0902_MODE_H - 1, 1, 0, GUI_MODE_PARAM, NULL }, - { 13, 120, UI0902_TIMBRE_Y + 20, UI0902_TIMBRE_Y + UI0902_TIMBRE_H - 1, -1, 0, GUI_TIMBRE_SELECT, NULL }, - { 121, 227, UI0902_TIMBRE_Y + 20, UI0902_TIMBRE_Y + UI0902_TIMBRE_H - 1, 1, 0, GUI_TIMBRE_SELECT, NULL }, + { 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 */ - { 12, 58, UI0902_SECTION_Y + 16, UI0902_SECTION_Y + 16 + UI0902_SECTION_BTN_H - 1, 0, 0, GUI_PLAY_SECTION, NULL }, - { 66, 112, UI0902_SECTION_Y + 16, UI0902_SECTION_Y + 16 + UI0902_SECTION_BTN_H - 1, 0, 1, GUI_PLAY_SECTION, NULL }, - { 120, 166, UI0902_SECTION_Y + 16, UI0902_SECTION_Y + 16 + UI0902_SECTION_BTN_H - 1, 0, 2, GUI_PLAY_SECTION, NULL }, - { 174, 220, UI0902_SECTION_Y + 16, UI0902_SECTION_Y + 16 + UI0902_SECTION_BTN_H - 1, 0, 3, GUI_PLAY_SECTION, NULL }, + /* 演奏段落 1~4(0902:12/68/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 }, /* 底栏四键:万能 | 普通 | 专业 | 设置 */ { 0, 59, 280, 319, 0, UI0902_NAV_UNIVERSAL, GUI_NAV_BAR, NULL }, diff --git a/UI/UI_SongMode.c b/UI/UI_SongMode.c index c1df6fc..4c812c3 100644 --- a/UI/UI_SongMode.c +++ b/UI/UI_SongMode.c @@ -7,16 +7,16 @@ static uint8_t Speed[6] = {0xF0, 0x51, 0x03, 0x00, 0x00, 0xF7}; void Draw_Tab_Mode_Menu(const LEBEL_UI *UI, GUI_SWITCH *Group) { - /* 0819:TAB 字号 11;0902:紧凑圆角条,选中常亮蓝 */ + /* 0819:TAB 字号 11;0902:紧凑圆角条,选中常亮蓝,文字垂直居中 */ const uint16_t tab_w = UI0902_TAB_W; const uint16_t tab_h = UI0902_TAB_H; const uint8_t tab_r = UI0902_RADIUS_TAB; const uint8_t tab_font = UI0902_FONT_LABEL; const uint16_t start_x = UI0902_MARGIN_X; - const uint16_t start_y = UI->y + 1; - const uint16_t gap = 6; + const uint16_t start_y = UI->y; + const uint16_t gap = UI0902_TAB_GAP; const uint16_t text_y = start_y + (tab_h - tab_font) / 2; - const uint16_t inset = 4; + const uint16_t inset = 3; uint16_t color_sel_bg = COLOR_GRAD_MID; uint16_t color_unsel_bg = UI0902_ROW_BG; uint16_t color_text = UI->Text_fc; diff --git a/UI/UI_global.c b/UI/UI_global.c index c41ebe1..a23eebb 100644 --- a/UI/UI_global.c +++ b/UI/UI_global.c @@ -294,16 +294,19 @@ void show_Param(const LEBEL_UI *UI, GUI_SWITCH *Group) { char Textstr_new[40] = {0}; char NumBuf[8] = {0}; - uint16_t text_y = UI->y + 28; + /* 0902 比例:TAB 行高 18 在区块顶,曲目行在其下,正文在行内垂直居中 */ + const uint16_t row_y = UI->y + UI0902_TAB_H + 4; /* 曲目行顶 = 130 */ + const uint16_t row_h = UI->h - UI0902_TAB_H - 4; /* 31 */ + const uint16_t text_y = row_y + (row_h - UI->Text_size) / 2 + 1; uint8_t idx = Group->Current + 1; uint16_t c_top, c_bot; UI_GetFocusGrad(GUI_MODE_PARAM, &c_top, &c_bot); LCD_FillRoundRectGradient( - UI->x+25, UI->y+20+5, + UI->x+25, row_y, UI->x + UI->w-40-(UI->x+25), - UI->h-20, + row_h, 0, c_top, c_bot ); @@ -476,7 +479,7 @@ void label_Tranzpose_ui(const LEBEL_UI *UI,GUI_SWITCH * Group) { uint8_t Textstr[20] = {0}; uint16_t c_top, c_bot; - uint16_t chev_cy = UI->y + UI->h - 14; /* < > 纵向中心 */ + uint16_t chev_cy = UI->y + UI->h - 13; /* < > 纵向中心 */ UI_GetFocusGrad(UI->Id, &c_top, &c_bot); LCD_FillRoundRectGradient( @@ -491,7 +494,7 @@ void label_Tranzpose_ui(const LEBEL_UI *UI,GUI_SWITCH * Group) LCD_ShowChinese_AutoAlign_Gradient( UI->x, UI->x+UI->w, - UI->y+6, + UI->y+5, UI->p, UI->Tab_Align, UI->Tab_fc, @@ -499,13 +502,13 @@ void label_Tranzpose_ui(const LEBEL_UI *UI,GUI_SWITCH * Group) c_bot, UI->Tab_size ); - LCD_DrawChevron_Left(UI->x + 18, chev_cy, 7, 2, WHITE); - LCD_DrawChevron_Right(UI->x + UI->w - 18, chev_cy, 7, 2, WHITE); + LCD_DrawChevron_Left(UI->x + 16, chev_cy, 7, 2, WHITE); + LCD_DrawChevron_Right(UI->x + UI->w - 16, chev_cy, 7, 2, WHITE); GET_Num_Str(mGuiData[UI->Id].Current, 0, (char*)Textstr, UI->Id); LCD_ShowString_AutoAlign_Gradient( UI->x, UI->x+UI->w, - UI->y + 20, + UI->y + 18, Textstr, UI->Text_Align, UI->Text_fc, @@ -513,10 +516,11 @@ void label_Tranzpose_ui(const LEBEL_UI *UI,GUI_SWITCH * Group) c_bot, UI->Text_size ); + /* KEY 副标:y+18+16+2 = y+36,11px 到 y+46 < 卡底 y+55,不再被切 */ LCD_ShowString_AutoAlign_Gradient( UI->x, UI->x+UI->w, - UI->y + 20 + UI->Text_size + 4, + UI->y + 18 + UI->Text_size + 2, (const uint8_t*)"KEY", UI->Text_Align, UI->Text_fc, @@ -541,7 +545,7 @@ void label_Speed_ui(const LEBEL_UI *UI,GUI_SWITCH * Group) LCD_ShowChinese_AutoAlign_Gradient( UI->x, UI->x+UI->w, - UI->y+6, + UI->y+5, UI->p, UI->Tab_Align, UI->Tab_fc, @@ -550,18 +554,18 @@ void label_Speed_ui(const LEBEL_UI *UI,GUI_SWITCH * Group) UI->Tab_size ); /* 0903:速度 −/+ 素材 */ - LCD_WR_PIC_Trans(UI->x + 6, UI->y + UI->h - 8 - UI0902_BTN_MINUS_H, + LCD_WR_PIC_Trans(UI->x + 5, UI->y + UI->h - 6 - UI0902_BTN_MINUS_H, UI0902_BTN_MINUS_W, UI0902_BTN_MINUS_H, gImage_UI0902_BtnMinus_23x22, BLACK); - LCD_WR_PIC_Trans(UI->x + UI->w - 6 - UI0902_BTN_PLUS_W, - UI->y + UI->h - 8 - UI0902_BTN_PLUS_H, + LCD_WR_PIC_Trans(UI->x + UI->w - 5 - UI0902_BTN_PLUS_W, + UI->y + UI->h - 6 - UI0902_BTN_PLUS_H, UI0902_BTN_PLUS_W, UI0902_BTN_PLUS_H, gImage_UI0902_BtnPlus_23x22, BLACK); GET_Num_Str(mGuiData[UI->Id].Current, 0, (char*)Textstr, UI->Id); LCD_ShowString_AutoAlign_Gradient( UI->x, UI->x+UI->w, - UI->y + 20, + UI->y + 18, Textstr, UI->Text_Align, UI->Text_fc, @@ -572,7 +576,7 @@ void label_Speed_ui(const LEBEL_UI *UI,GUI_SWITCH * Group) LCD_ShowString_AutoAlign_Gradient( UI->x, UI->x+UI->w, - UI->y + 20 + UI->Text_size + 4, + UI->y + 18 + UI->Text_size + 2, (const uint8_t*)"BPM", UI->Text_Align, UI->Text_fc, @@ -594,7 +598,7 @@ void label_ModeSelece_ui(const LEBEL_UI *UI,GUI_SWITCH * Group) case 1: paramCurData = &ParamGuiData[EXPRESS_MODE_PARAM]; break; case 2: paramCurData = &ParamGuiData[ALL_MODE_PARAM]; break; } - LCD_FillRoundRectGradient(UI->x, UI->y+20+5, UI->w, UI->h-20, UI0902_RADIUS_CARD, c_top, c_bot); + LCD_FillRoundRectGradient(UI->x, UI->y+UI0902_TAB_H+4, UI->w, UI->h-UI0902_TAB_H-4, UI0902_RADIUS_CARD, c_top, c_bot); switch(mGuiData[GUI_TAB_INDEX].Current) { case 0:case 1: Draw_Tab_Mode_Menu(UI, &mGuiData[GUI_AUTOBAND_SW]); @@ -602,7 +606,7 @@ void label_ModeSelece_ui(const LEBEL_UI *UI,GUI_SWITCH * Group) case 2: str = (char*)"\xBA\xCD\xCF\xD2\xD7\xDF\xCF\xF2"; LCD_ShowChinese_AutoAlign( - UI->x, UI->x+UI->w, UI->y+5+5, + UI->x, UI->x+UI->w, UI->y+3, (uint8_t *)str, UI->Tab_Align, UI->Tab_fc, BLACK, 0, UI->Tab_size ); break; @@ -621,31 +625,36 @@ void label_ModeSelece_ui(const LEBEL_UI *UI,GUI_SWITCH * Group) case 2: paramCurData = &ParamGuiData[ALL_MODE_PARAM]; break; } show_Param(&UI_Label[GUI_MODE_PARAM], paramCurData); - LCD_DrawChevron_Left(UI->x + 15, UI->y + 25 + (UI->h - 25) / 2, 7, 2, WHITE); - LCD_DrawChevron_Right(UI->x + UI->w - 15, UI->y + 25 + (UI->h - 25) / 2, 7, 2, WHITE); + { + /* 箭头与曲目行垂直中心对齐 */ + uint16_t row_cy = UI->y + UI0902_TAB_H + 4 + (UI->h - UI0902_TAB_H - 4) / 2; + LCD_DrawChevron_Left(UI->x + 15, row_cy, 7, 2, WHITE); + LCD_DrawChevron_Right(UI->x + UI->w - 15, row_cy, 7, 2, WHITE); + } } void label_TimbreSelece_ui(const LEBEL_UI *UI, GUI_SWITCH * Group) { uint8_t Textstr[20] = {0}; char NumBuf[8] = {0}; - uint16_t text_y = UI->y + 22 + ((UI->h > 40) ? ((UI->h - 22 - UI->Text_size) / 2) : 3); + /* 0902 比例:音色行高 30,正文在行内垂直居中 */ + uint16_t text_y = UI->y + (UI->h - UI->Text_size) / 2 + 1; uint8_t idx = mGuiData[UI->Id].Current + 1; uint16_t c_top, c_bot; - uint16_t chev_cy = UI->y + 22 + (UI->h - 22) / 2; + uint16_t chev_cy = UI->y + UI->h / 2; UI_GetFocusGrad(UI->Id, &c_top, &c_bot); LCD_FillRoundRectGradient( UI->x, - UI->y+20, + UI->y, UI->w, - UI->h-20, + UI->h, UI0902_RADIUS_CARD, c_top, c_bot ); LCD_ShowChinese_AutoAlign( UI->x, UI->x+UI->w, - UI->y + 3, + UI->y - 15, UI->p, UI->Tab_Align, UI->Tab_fc, @@ -657,9 +666,9 @@ void label_TimbreSelece_ui(const LEBEL_UI *UI, GUI_SWITCH * Group) LCD_DrawChevron_Right(UI->x + UI->w - 15, chev_cy, 7, 2, WHITE); LCD_FillRoundRectGradient( UI->x + 40, - UI->y+20, + UI->y, UI->x + UI->w - 40 - UI->x - 40 , - UI->h-20, + UI->h, 0, c_top, c_bot ); @@ -691,13 +700,13 @@ void label_TimbreSelece_ui(const LEBEL_UI *UI, GUI_SWITCH * Group) } void label_PlaySection_ui(const LEBEL_UI *UI,GUI_SWITCH * Group) { - /* 先画按钮,再画标签,避免色块盖住「演奏段落」 */ + /* 0902 比例:标签在按钮上方 15px,先画按钮再补标签底,避免色块盖住 */ Draw_Tab_Section_Menu(UI,(TAB_SECTION_INDEX)Group->Current); - LCD_FillByColor(UI->x, UI->y, UI->x + UI->w, UI->y + 16, UI0902_BG_COLOR); + LCD_FillByColor(UI->x, UI->y - 15, UI->x + UI->w, UI->y - 1, UI0902_BG_COLOR); LCD_ShowChinese_AutoAlign( UI->x, UI->x+UI->w, - UI->y + 2, + UI->y - 14, UI->p, UI->Tab_Align, UI->Tab_fc, @@ -784,9 +793,9 @@ void Draw_Tab_Section_Menu(const LEBEL_UI *UI, TAB_SECTION_INDEX select_tab) 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_y = UI->y + 16; - /* 0819:演奏段落数字与标题同为 13 */ - const uint16_t text_y = start_y + (tab_h - UI0902_FONT_BODY) / 2; + const uint16_t start_y = UI->y; + /* 0819:演奏段落数字与标题同为 13,按钮内垂直居中(视觉重心 +1) */ + const uint16_t text_y = start_y + (tab_h - UI0902_FONT_BODY) / 2 + 1; const char *nums[4] = {"1", "2", "3", "4"}; uint8_t i; diff --git a/UI/UI_global.h b/UI/UI_global.h index bee8da2..c5f6815 100644 --- a/UI/UI_global.h +++ b/UI/UI_global.h @@ -32,32 +32,33 @@ void CallUI_RestoreSelect(void); #define UI0902_BG_COLOR 0x0042 /* #000813 页面背景 */ #define UI0902_ROW_BG 0x2147 /* #242B3A 列表行背景 */ -/* 0902 / 0819:240×320 模式页网格 - * 顶:状态栏下 6px 接双卡;底:拉高控件吃掉底栏上方留白,字体更饱满 */ +/* 0902 / 0819:240×320 模式页网格(按 0902 参考图 03/04/05 实测比例换算) + * 状态栏 26;双卡 y48 h55;TAB y108 h18;曲目行 y130 h31;音色行 y180 h30;段落钮 y229 h34 */ #define UI0902_MARGIN_X 12 #define UI0902_CONTENT_W 216 -#define UI0902_CARD_GAP_TOP 6 -#define UI0902_CARD_Y (UI_STATUS_BAR_H + UI0902_CARD_GAP_TOP) /* 32 */ -#define UI0902_CARD_H 60 -#define UI0902_CARD_W 102 -#define UI0902_CARD_GAP 12 -#define UI0902_MODE_Y (UI0902_CARD_Y + UI0902_CARD_H + 3) /* 95 */ -#define UI0902_MODE_H 64 -#define UI0902_TIMBRE_Y (UI0902_MODE_Y + UI0902_MODE_H + 4) /* 163 */ -#define UI0902_TIMBRE_H 52 -#define UI0902_SECTION_Y (UI0902_TIMBRE_Y + UI0902_TIMBRE_H + 4) /* 219 */ -#define UI0902_SECTION_H 52 +#define UI0902_CARD_GAP_TOP 22 +#define UI0902_CARD_Y (UI_STATUS_BAR_H + UI0902_CARD_GAP_TOP) /* 48 */ +#define UI0902_CARD_H 55 +#define UI0902_CARD_W 103 +#define UI0902_CARD_GAP 10 +#define UI0902_MODE_Y (UI0902_CARD_Y + UI0902_CARD_H + 5) /* 108 */ +#define UI0902_MODE_H 53 +#define UI0902_TIMBRE_Y (UI0902_MODE_Y + UI0902_MODE_H + 19) /* 180 */ +#define UI0902_TIMBRE_H 30 +#define UI0902_SECTION_Y (UI0902_TIMBRE_Y + UI0902_TIMBRE_H + 19) /* 229 */ +#define UI0902_SECTION_H 34 #define UI0902_FONT_LABEL 11 /* 0819:移调/速度/弦音色选择/TAB 等标题 */ #define UI0902_FONT_BODY 13 /* 0819:曲目/音色正文、演奏段落 */ #define UI0902_FONT_HERO 16 /* 0819:移调/速度主数值 */ #define UI0902_FONT_SUB 11 /* KEY / BPM 副标 */ #define UI0902_FONT_NAV 9 /* 0819:底栏文案(位图内已含) */ -#define UI0902_TAB_H 20 -#define UI0902_TAB_W 58 -#define UI0902_ROW_H 36 -#define UI0902_SECTION_BTN_H 36 -#define UI0902_SECTION_BTN_W 48 -#define UI0902_SECTION_PITCH 54 +#define UI0902_TAB_H 18 +#define UI0902_TAB_W 55 +#define UI0902_TAB_GAP 6 +#define UI0902_ROW_H 31 +#define UI0902_SECTION_BTN_H 34 +#define UI0902_SECTION_BTN_W 47 +#define UI0902_SECTION_PITCH 57 #define UI0902_RADIUS_CARD 10 #define UI0902_RADIUS_TAB 6 #define UI0902_RADIUS_BTN 6 @@ -80,7 +81,7 @@ void CallUI_RestoreSelect(void); #define UI0902_BATTERY_Y 7 #define UI0902_BATTERY_RIGHT_MARGIN 8 #define UI0902_BATTERY_TEXT_GAP 4 -#define UI0902_BATTERY_TEXT_SIZE 16 +#define UI0902_BATTERY_TEXT_SIZE 12 #define UI0902_NAV_UNIVERSAL 0 /* 底栏:万能模式 */ #define UI0902_NAV_NORMAL 1 /* 底栏:普通模式 */ #define UI0902_NAV_EXPERT 2 /* 底栏:专业模式 */