Reduce flicker when switching between the three play modes.

Home-page mode switches now redraw only the mode card and nav bar instead of clearing the full screen.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
yuquanjun 2026-09-06 21:42:01 +08:00
parent f076d1714a
commit 7c76b8302a
4 changed files with 29 additions and 3 deletions

View File

@ -6,7 +6,10 @@ void UI_ExpertMode_Init(void)
mGuiData[GUI_TAB_LAST_INDEX].Current = mGuiData[GUI_TAB_INDEX].Current; mGuiData[GUI_TAB_LAST_INDEX].Current = mGuiData[GUI_TAB_INDEX].Current;
//mGuiData[GUI_AUTOBAND_SW].Current = 1; //mGuiData[GUI_AUTOBAND_SW].Current = 1;
UI_ReloadTonePreset(); /* 必须在 TAB=专业 之后换库,否则仍是万能 3.bin */ UI_ReloadTonePreset(); /* 必须在 TAB=专业 之后换库,否则仍是万能 3.bin */
Show_home_UI(); if (CurrUIProcress == UI_SongMode_Process)
Show_home_UI_Diff();
else
Show_home_UI();
pCurrentTouch_Area = Touch_Areas; pCurrentTouch_Area = Touch_Areas;
} }

View File

@ -7,7 +7,10 @@ void UI_FreeMode_Init(void)
mGuiData[GUI_TAB_LAST_INDEX].Current = mGuiData[GUI_TAB_INDEX].Current; mGuiData[GUI_TAB_LAST_INDEX].Current = mGuiData[GUI_TAB_INDEX].Current;
//mGuiData[GUI_AUTOBAND_SW].Current = 1; //mGuiData[GUI_AUTOBAND_SW].Current = 1;
UI_ReloadTonePreset(); /* TAB=普通 后再加载 1.bin */ UI_ReloadTonePreset(); /* TAB=普通 后再加载 1.bin */
Show_home_UI(); if (CurrUIProcress == UI_SongMode_Process)
Show_home_UI_Diff();
else
Show_home_UI();
pCurrentTouch_Area = Touch_Areas; pCurrentTouch_Area = Touch_Areas;
} }

View File

@ -68,6 +68,21 @@ void Show_home_UI(void)
//LCD_BLK_Set(); //LCD_BLK_Set();
} }
/* 三模式主页互切:只重绘变化区,避免整屏清导致闪烁 */
void Show_home_UI_Diff(void)
{
const LEBEL_UI *mode = &UI_Label[GUI_MODE_PARAM];
UI_ClearFocus();
/* 清 TAB/标题条,避免万能↔普通/专业互切留下残影 */
LCD_FillByColor(mode->x, mode->y,
(uint16_t)(mode->x + mode->w),
(uint16_t)(mode->y + UI0902_TAB_H + 4),
UI0902_BG_COLOR);
label_ModeSelece_ui(mode, &mGuiData[GUI_MODE_PARAM]);
label_Tab_Select_ui(&UI_Label[GUI_PLAY_SECTION], &mGuiData[GUI_TAB_INDEX]);
}
int8_t delta = 0; int8_t delta = 0;
void Touch_Action(int8_t FLAG, uint8_t ID, uint8_t areaIndex,uint8_t value) void Touch_Action(int8_t FLAG, uint8_t ID, uint8_t areaIndex,uint8_t value)
{ {
@ -280,7 +295,11 @@ void UI_SongMode_Init(void)
mGuiData[GUI_TAB_INDEX].Current = 0; mGuiData[GUI_TAB_INDEX].Current = 0;
mGuiData[GUI_TAB_LAST_INDEX].Current = mGuiData[GUI_TAB_INDEX].Current; mGuiData[GUI_TAB_LAST_INDEX].Current = mGuiData[GUI_TAB_INDEX].Current;
UI_ReloadTonePreset(); /* TAB=万能 后再加载 3.bin */ UI_ReloadTonePreset(); /* TAB=万能 后再加载 3.bin */
Show_home_UI(); /* 已在主页互切用差分;从 Idle/设置进入仍整页 */
if (CurrUIProcress == UI_SongMode_Process)
Show_home_UI_Diff();
else
Show_home_UI();
pCurrentTouch_Area = Touch_Areas; pCurrentTouch_Area = Touch_Areas;
} }

View File

@ -208,6 +208,7 @@ void GET_Num_Str(int16_t NUM, uint8_t ValidLen, char* Str, uint8_t hasSign);
void show_Param(const LEBEL_UI *UI, GUI_SWITCH *Group); void show_Param(const LEBEL_UI *UI, GUI_SWITCH *Group);
extern void Show_home_UI(void); extern void Show_home_UI(void);
extern void Show_home_UI_Diff(void);
extern void Touch_Action(int8_t FLAG, uint8_t ID, uint8_t areaIndex, uint8_t value); extern void Touch_Action(int8_t FLAG, uint8_t ID, uint8_t areaIndex, uint8_t value);
//extern void Refresh_Transpose(uint8_t last_data, const LEBEL_UI *UI, GUI_SWITCH *Group); //extern void Refresh_Transpose(uint8_t last_data, const LEBEL_UI *UI, GUI_SWITCH *Group);
extern void Refresh_Transpose(const LEBEL_UI *UI, GUI_SWITCH * Group); extern void Refresh_Transpose(const LEBEL_UI *UI, GUI_SWITCH * Group);