From f4c21c74a1ca1e349abb3a7f252686bedb126c7a Mon Sep 17 00:00:00 2001 From: AskaEth Date: Wed, 4 Nov 2026 20:09:24 +0800 Subject: [PATCH] =?UTF-8?q?fix(tuku):=20=E4=B9=A6=E5=BA=93=E6=98=BE?= =?UTF-8?q?=E5=BC=8F=E5=90=AF=E7=94=A8=20MD3=20=E5=AE=B9=E5=99=A8=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F=E5=B9=B6=E8=A1=A5=20M4/M5=20=E6=8E=A5=E7=BC=9D?= =?UTF-8?q?=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - P1:list_rebuild() 在 set_item_renderer/set_item_tier 后调用 meow_listview_set_container(g_lv,1), 修正 SDK 默认 container=0(扁平满幅+分隔线)与任务要求的 MD3 圆角卡观感不一致 - P2:reader/lock/settings 桩头补接缝注释——on_create 在 meow_view_create 内运行且 activity 栈空, 非根页控件须 lazy 到 on_enter 或 push→建→pop;lock 另注明必须由自身 view on_event 消费 SWIPE, 否则左缘滑动绕过 PIN - 复验:宿主测试 46/46 PASS;交叉构建静态 MIPS32r2 ELF、-Wall -Wextra 零警告 --- tuku/ui/library/library.c | 3 +++ tuku/ui/lock/lock.c | 10 ++++++++++ tuku/ui/reader/reader.c | 6 ++++++ tuku/ui/settings/settings.c | 6 ++++++ 4 files changed, 25 insertions(+) diff --git a/tuku/ui/library/library.c b/tuku/ui/library/library.c index 28fcdf3..50b69e4 100644 --- a/tuku/ui/library/library.c +++ b/tuku/ui/library/library.c @@ -408,6 +408,9 @@ static void list_rebuild(void) meow_listview_set_vsource(g_lv, lib_count, lib_bind, NULL); meow_listview_set_item_renderer(g_lv, 2, 1, 1); meow_listview_set_item_tier(g_lv, 2); + /* SDK 默认 container=0(扁平满幅+分隔线);显式开 MD3 容器模式: + * 每行 surfaceContainer 圆角卡 + 行间空隙 + 卡内 tonal 选中。 */ + meow_listview_set_container(g_lv, 1); meow_listview_set_empty_text(g_lv, "No folders with PNG/JPEG/BMP"); g_scroll = meow_scroll_wrap(g_lv, 1); diff --git a/tuku/ui/lock/lock.c b/tuku/ui/lock/lock.c index 0fd5626..a188f10 100644 --- a/tuku/ui/lock/lock.c +++ b/tuku/ui/lock/lock.c @@ -2,6 +2,16 @@ * * M5 在此实现「APP 启动 PIN」:lock_view_should_show() 读配置决定是否锁, * 锁屏页负责 PIN 输入/校验后 page_pop 回书库。本批桩恒返回 0(不锁),页面仅可编译占位。 + * + * 接缝注意(M5): + * ① meow_view 的 on_create 在 meow_view_create 内运行(此时 activity 栈空);本页是非根页, + * 控件必须 lazy 到 on_enter 建,或照 hello demo_init 的模式 + * meow_ui_activity_push(ACT_LOCK) → 建控件 → meow_ui_activity_pop() + * (examples/hello/ui/demo/demo.c:515-522);否则 owner 绑到 ACT_LIBRARY, + * 锁屏控件会从书库页被命中(§6.1 跨页泄漏)。 + * ② 锁屏必须经自身 view 的 on_event 消费 SWIPE:meow_view_dispatch_event 先于 App 的 + * on_swipe(sdk/meow_ui_view.h:83-88);否则 app.c 对非 library 页的左缘滑动无条件 + * page_pop,PIN 会被绕过。 */ #include "tuku_internal.h" diff --git a/tuku/ui/reader/reader.c b/tuku/ui/reader/reader.c index 1e2ebe6..33de900 100644 --- a/tuku/ui/reader/reader.c +++ b/tuku/ui/reader/reader.c @@ -4,6 +4,12 @@ * - 书库经 mr_reader_open_dir(path) 导航进来(app.c/library.c 不改); * - 方向状态走 logic/reader 的 mr_reader_get/set_direction(默认 RTL)。 * 绘制走 view on_draw(注册表驱动),主题切换由 app.c 的 listener invalidate 全屏重画。 + * + * 接缝注意(M4):meow_view 的 on_create 在 meow_view_create 内运行(此时 activity 栈空), + * 本页是非根页——控件必须 lazy 到 on_enter 建,或照 hello demo_init 的模式 + * meow_ui_activity_push(ACT_READER) → 建控件 → meow_ui_activity_pop() + * (examples/hello/ui/demo/demo.c:515-522);否则控件 owner 绑到 ACT_LIBRARY, + * 造成跨页命中/绘制泄漏(§6.1)。 */ #include "tuku_internal.h" diff --git a/tuku/ui/settings/settings.c b/tuku/ui/settings/settings.c index 57e1a4f..ef92ca2 100644 --- a/tuku/ui/settings/settings.c +++ b/tuku/ui/settings/settings.c @@ -2,6 +2,12 @@ * * M5 在此实现 APP 启动 PIN 等设置项;本批只落可编译桩,入口为书库 TopAppBar ⚙。 * 返回:左缘返回(app.c SWIPE_LEFT → page_pop)。 + * + * 接缝注意(M5):meow_view 的 on_create 在 meow_view_create 内运行(activity 栈空); + * 本页是非根页,控件必须 lazy 到 on_enter 建,或照 hello demo_init 的模式 + * meow_ui_activity_push(ACT_SETTINGS) → 建控件 → meow_ui_activity_pop() + * (examples/hello/ui/demo/demo.c:515-522);否则 owner 绑到 ACT_LIBRARY,设置控件会从 + * 书库页被命中(§6.1 跨页泄漏)。 */ #include "tuku_internal.h"