feat: white-tone desktop + login crossfade + BUG-031 FAT chain fix + DESK-E texture panics

- BUG-031: fat32_io.h on-demand FAT sector read (FAT beyond 128KB cache walked OOB, font/wallpaper corrupted past first clusters); host unit test diff=0

- material pack: gen_textures.py wired into build.ps1, startMenuLogo.rgba packaged; missing wallpaper/logo/font now fatal (DESK-E02/E03/E04 red fatal screen)

- login->desktop crossfade 16 steps, boot typewriter screen removed

- IDE exit: Esc detaches and returns to desktop page

- white theme: KS_* light palette, g_wf_light taskbar, hardcoded dark fills replaced

- QEMU verified: labels/clock render, wallpaper + start logo loaded, zero spurious panic
This commit is contained in:
Linehu
2026-10-04 15:53:04 +08:00
parent 174af71b39
commit 5f01904be1
14 changed files with 160 additions and 96 deletions
+3 -3
View File
@@ -32,7 +32,7 @@ int g_tb2_clk_rect[4];
#define TB_APPBTN 44 /* 应用钮边长 */
#define TB_PAD 8 /* 条内边距 */
static const wf_theme *tb_theme(void) { return &g_wf_dark; }
static const wf_theme *tb_theme(void) { return &g_wf_light; }
/* ---- 开始菜单 logo(textures/startMenuLogo.rgba,加载失败回退字形) ---- */
static int g_smlogo_ok = 0;
@@ -151,8 +151,8 @@ void taskbar_draw(void) {
g_tb2_app_rect[i][0] = x; g_tb2_app_rect[i][1] = byy;
g_tb2_app_rect[i][2] = TB_APPBTN; g_tb2_app_rect[i][3] = TB_APPBTN;
wf_btn_state st = tb_hover_state(g_tb2_app_rect[i]);
if (w->focused) du_wf_overlay(&g_fb, x, byy, TB_APPBTN, TB_APPBTN, 0x22FFFFFFu);
else if (st == WF_BTN_HOVER) du_wf_overlay(&g_fb, x, byy, TB_APPBTN, TB_APPBTN, 0x22FFFFFFu);
if (w->focused) du_wf_overlay(&g_fb, x, byy, TB_APPBTN, TB_APPBTN, 0x22000000u);
else if (st == WF_BTN_HOVER) du_wf_overlay(&g_fb, x, byy, TB_APPBTN, TB_APPBTN, 0x22000000u);
du_wf_icon(&g_fb, tb_app_icon(w->app_id), x + (TB_APPBTN - 22) / 2,
byy + (TB_APPBTN - 22) / 2, 22, t->text_primary);
/* 运行指示条:底部 accent,聚焦加宽 */