From b5038f86734153627e6c0e355da78a9a41645349 Mon Sep 17 00:00:00 2001 From: MeowOS Date: Mon, 31 Aug 2026 04:00:15 +0800 Subject: [PATCH] =?UTF-8?q?refactor(hello):=20=E8=A7=86=E5=9B=BE=E6=A1=86?= =?UTF-8?q?=E6=9E=B6=E6=89=B9=E6=AC=A1=E2=91=A2=20=E2=80=94=20=E7=9B=AE?= =?UTF-8?q?=E5=BD=95=E5=B5=8C=E5=A5=97(ui/home/home.c,=20ui/demo/demo.c+ui?= =?UTF-8?q?/demo/list/list.c)=20+=20=E8=A7=86=E5=9B=BE=E6=B7=B1=E5=BA=A6?= =?UTF-8?q?=E5=8C=96(demo=E5=88=97=E8=A1=A8=E5=8C=BA=E6=8A=BD=20CONTAINER?= =?UTF-8?q?=20=E5=AD=90=E8=A7=86=E5=9B=BE,=20=E5=AD=90>=E7=88=B6=E5=91=BD?= =?UTF-8?q?=E4=B8=AD)=20+=20on=5Fdraw=20=E9=93=BE=E8=B7=AF=E5=AE=9E?= =?UTF-8?q?=E6=B5=8B=E9=80=9A=E8=BF=87(list=E6=A0=87=E9=A2=98=E6=94=B9?= =?UTF-8?q?=E7=94=B1=E5=AD=90=E8=A7=86=E5=9B=BE=20on=5Fdraw=20=E7=BB=8F?= =?UTF-8?q?=E6=B3=A8=E5=86=8C=E8=A1=A8=E7=BB=98=E5=88=B6)=20+=20g=5Fds.pro?= =?UTF-8?q?g=20=E4=B8=8A=E6=94=B6=20logic/state.c=20(agent-181)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit hello c06b3b4f→07b1ee37; mipsel -Wall -Wextra 0 warning; 宿主 P1c/P2/P3 + widgets 全 PASS SDK 后续项(本批 App 层显式驱动适配, 未动 SDK): view enter/leave 不递归 children + on_event 路由未接线 — 待 SDK 侧补 --- patch_v2/hello_app/app.c | 2 +- patch_v2/hello_app/build_hello.sh | 9 +- patch_v2/hello_app/hello | Bin 273788 -> 276092 bytes patch_v2/hello_app/hello_internal.h | 30 +++- patch_v2/hello_app/logic/logic.h | 3 + patch_v2/hello_app/logic/state.c | 13 ++ patch_v2/hello_app/ui/{ => demo}/demo.c | 104 +++++++------- patch_v2/hello_app/ui/demo/list/list.c | 181 ++++++++++++++++++++++++ patch_v2/hello_app/ui/{ => home}/home.c | 2 +- patch_v2/sdk/test_p1p2p3_repro.c | 7 +- 10 files changed, 286 insertions(+), 65 deletions(-) rename patch_v2/hello_app/ui/{ => demo}/demo.c (82%) create mode 100644 patch_v2/hello_app/ui/demo/list/list.c rename patch_v2/hello_app/ui/{ => home}/home.c (98%) diff --git a/patch_v2/hello_app/app.c b/patch_v2/hello_app/app.c index 241e835..1d354cb 100644 --- a/patch_v2/hello_app/app.c +++ b/patch_v2/hello_app/app.c @@ -3,7 +3,7 @@ * 职责(SDK_VIEW_FRAMEWORK_DESIGN.md §B.2):main 只做初始化/建页/跑事件循环/清理;把 * meow_ui_run 的平铺输入回调(key/tap/swipe/tick/touch)路由到当前活动页(home/full/demo)。 * 页面切换统一走 meow_view_page_push/pop(活动栈 + on_enter/on_leave 的唯一驱动,App 不再 - * 分别调 activity_push/pop)。业务变化经 logic 监听器送回 UI(见 ui/home.c)。 + * 分别调 activity_push/pop)。业务变化经 logic 监听器送回 UI(见 ui/home/home.c)。 * * 契约(MEOW_APP_SDK.md §1/§3/§6):应用只调 meow_ui API。 */ diff --git a/patch_v2/hello_app/build_hello.sh b/patch_v2/hello_app/build_hello.sh index 908e32a..98edcb1 100755 --- a/patch_v2/hello_app/build_hello.sh +++ b/patch_v2/hello_app/build_hello.sh @@ -1,8 +1,10 @@ #!/bin/bash -# Build the hello app (SDK B1, 视图框架批次②文件拆分): 链 meow_ui.a(已内含 meow_font.o), +# Build the hello app (SDK B1, 视图框架批次③目录嵌套+视图深度化): 链 meow_ui.a(已内含 meow_font.o), # 额外链系统 libz.a(meow_font 的 inflate 依赖)+ -lpthread。静态 MIPS32r2 (musl sf)。 # 批次②:hello.c 拆为多文件(app.c + ui/home.c + ui/full.c + ui/demo.c + ui/common/chrome.c + -# logic/notify.c + logic/state.c),仅改列文件,编译期不改 SDK(patch_v2/sdk/ 零触及)。 +# logic/notify.c + logic/state.c)。 +# 批次③:ui/home、ui/demo 子目录化(ui/home/home.c + ui/demo/demo.c);demo 列表区块抽成 +# CONTAINER 子视图 ui/demo/list/list.c。仅改列文件,编译期不改 SDK(patch_v2/sdk/ 零触及)。 # mipsel -Wall -Wextra 0 warning。 set -e cd "$(dirname "$0")" @@ -10,7 +12,8 @@ ROOT="$HOME/Project/R3ProII" CC="$ROOT/.tools/zig-mipsel-cc" SYSROOT="$ROOT/.tools/mipsel-linux-muslsf-cross/mipsel-linux-muslsf" "$CC" -Os -static -Wall -Wextra -I../sdk -I. \ - app.c ui/home.c ui/full.c ui/demo.c ui/common/chrome.c logic/notify.c logic/state.c \ + app.c ui/home/home.c ui/full.c ui/demo/demo.c ui/demo/list/list.c ui/common/chrome.c \ + logic/notify.c logic/state.c \ ../sdk/meow_ui.a "$SYSROOT/lib/libz.a" -lpthread -o hello ls -la hello file hello diff --git a/patch_v2/hello_app/hello b/patch_v2/hello_app/hello index b0519504835c35d1bcb1eb48c134f8ffa8bc0147..22181ab74a978c3385ff55adc3fa5b7128950253 100755 GIT binary patch delta 78577 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%0DZsW`P3rh__wsB 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 delta 76659 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 100) p = 100; + g_prog = p; + if (g_listener) g_listener(LOGIC_EV_PROG, g_listener_ctx); +} + void logic_set_listener(logic_listener_fn cb, void *ctx) { g_listener = cb; diff --git a/patch_v2/hello_app/ui/demo.c b/patch_v2/hello_app/ui/demo/demo.c similarity index 82% rename from patch_v2/hello_app/ui/demo.c rename to patch_v2/hello_app/ui/demo/demo.c index cb25477..ac6e6e7 100644 --- a/patch_v2/hello_app/ui/demo.c +++ b/patch_v2/hello_app/ui/demo/demo.c @@ -1,14 +1,17 @@ -/* ui/demo.c — 控件库 Demo 演示页(ACT_DEMO)view + 控制器。 +/* ui/demo/demo.c — 控件库 Demo 演示页(ACT_DEMO)view + 控制器(批次③ 目录嵌套后)。 * * 内容控件以绝对坐标创建,页滚动 = 按「base_y - scroll」重建内容(owner=ACT_DEMO 不变); - * 各控件跨重建状态存 g_ds(App 持有),重建后恢复。绘制走 batch① 郑序注册表:demo_paint 调 + * 各控件跨重建状态存 g_ds(App 持有),重建后恢复。绘制走批次① z 序注册表:demo_paint 调 * meow_ui_set_page_bg + meow_ui_paint_full(整帧按 z 重画:内容→标题/slider值→chrome 置顶), * 局部刷新统一 meow_ui_invalidate(清底+按 z 重画相交绘制物)。旧 d_paint_region/d_redraw/ - * d_rect_overlap(App 层郑栈重画)已删、下沉 SDK。 + * d_rect_overlap(App 层 z 栈重画)已删、下沉 SDK。 * - * 设计定案 B(SDK_VIEW_FRAMEWORK_DESIGN §B.3/F):demo 的 g_ds/g_drag_* /g_demo_scroll 等视图态 - * 留本文件(不迁 logic);UI→业务只经 logic_* / notify_*。页面进入/离开经 meow_view_page_push/pop - * 驱动 on_enter/on_leave(demo_page_enter/leave)。 + * 批次②③ 拆分/深度化(SDK_VIEW_FRAMEWORK_DESIGN §B.2/§B.4/§E③): + * - 列表区逻辑区块抽成 CONTAINER 子视图 ui/demo/list/list.c(挂到本页 ACTIVITY view children), + * 列表视图态(g_dlc/r_list/g_demo_focus/g_drag_list)随迁;本页只做页级分发(子>父)。 + * - 进度语义值 g_ds.prog 已上收 logic/state.c(logic_prog_get/set,经监听器)。 + * - 设计定案 B:其余视图态(demo 页 g_ds 非列表字段/g_demo_scroll/drag_page)留本文件(不迁 logic); + * UI→业务只经 logic_* / notify_*。页面进入/离开经 meow_view_page_push/pop 驱动。 */ #include "hello_internal.h" #include @@ -23,29 +26,31 @@ static demo_ctrl g_demo_ctrl; /* ---- demo 演示页状态 ---- */ int g_demo = 0; /* 1=处于 demo 演示页 */ int g_demo_scroll = 0; /* 内容区滚动偏移(base 空间 px) */ -int g_demo_focus = 0; /* 1=LazyColumn 聚焦(swipe 滚列表而非页面) */ static int g_demo_fab = 0; /* FAB 点击计数反馈 */ -static int g_demo_prog = 0; /* ProgressBar 动画当前值 0..100 */ static uint64_t g_demo_prog_last = 0; static int g_demo_ct = 0; /* 内容视口顶(屏y = statusbar+56+8) */ static int g_demo_cb = 0; /* 内容视口底(屏y =608,NavBar 上方留白) */ static int g_demo_content_h = 0;/* 内容总高(base 空间;决定 max_scroll) */ +/* 注:g_demo_focus/g_drag_list/g_dlc/r_list 已迁 ui/demo/list/list.c(列表视图态归列表区 + * CONTAINER 子视图),本文件仅经 hello_internal.h 的 extern 引用;g_demo_prog 已上收 logic/state.c。 */ -/* M2.71-bug2/6:拖动过程(跟手)状态。on_touch_down 锁一种拖拽,on_touch_move 实时更新。 */ +/* M2.71-bug2/6:拖动过程(跟手)状态。on_touch_down 锁一种拖拽,on_touch_move 实时更新。 + * g_drag_list(列表拖拽)/g_drag_list_last_y 归列表区 CONTAINER 子视图 list.c(extern 引用)。 + * 注:g_drag_page 仍为本页「页内容拖拽」标志。 */ static int g_drag_slider = 0; /* 手指按在 slider */ -int g_drag_list = 0; /* 手指按在 LazyColumn:拖拽滚列表 */ int g_drag_page = 0; /* 手指按在页内容(非 slider/list):拖拽滚页面 */ -static int g_drag_list_last_y = 0; /* 列表拖拽上一帧 y */ static int g_drag_page_last_y = 0; /* 页面拖拽上一帧 y */ static int g_drag_page_delta = 0; /* 页面拖拽累计位移(节流重建,≥8px 才重建一次) */ /* SDK 控件不透明:App 自记几何,用于局部 flush / 命中 / scroll 重建。 */ -/* demo 各控件跨重建保留的状态(app 持有;重建后按此恢复) */ +/* demo 各控件跨重建保留的状态(app 持有;重建后按此恢复)—— + * 列表态 list/list_sel 已迁 ui/demo/list/list.c(列表区 CONTAINER 子视图)持有; + * 进度语义值 prog 已上收 logic/state.c(logic_prog_*)。 */ static struct { int sw_on; int slider; char tf[32]; - int ck; int r1, r2; int btn[5]; int card; int tab; int list; int list_sel; int prog; -} g_ds = { .sw_on = 1, .slider = 40, .r1 = 1, .tab = 1, .list = 0, .list_sel = 0, .prog = 0 }; + int ck; int r1, r2; int btn[5]; int card; int tab; +} g_ds = { .sw_on = 1, .slider = 40, .r1 = 1, .tab = 1 }; /* demo 内容布局常量(base 空间) */ #define DCL_X 16 @@ -81,7 +86,7 @@ static meow_widget *g_dbadge; /* Badge */ static meow_widget *g_dtab; static rect_t r_tab; /* TabBar */ static meow_widget *g_dbtn_dlg; static rect_t r_dlg; /* 打开 Dialog 的按钮 */ static meow_widget *g_dbtn_sheet; static rect_t r_sheet;/* 打开 BottomSheet 的按钮 */ -meow_widget *g_dlc; rect_t r_list; /* LazyColumn */ +/* LazyColumn:g_dlc/r_list 已迁 list.c(列表区 CONTAINER 子视图),此处仅 extern 引用。 */ /* ---- demo 分区标题/slider 值文本:注册为 CUSTOM 绘制物(§6.2 区域重画会重画它们)---- * 显式 z=D_TITLE_Z:> 一切自动 z(=127)、< chrome 置顶(999)。非控件直绘必须注册,否则 @@ -146,6 +151,7 @@ static void demo_free_content(void) if (g_dtitle_cid[i] > 0) { meow_draw_unregister(g_dtitle_cid[i]); g_dtitle_cid[i] = 0; } if (g_slider_cid > 0) { meow_draw_unregister(g_slider_cid); g_slider_cid = 0; } g_dtitle_n = 0; + list_view_release(); /* 列表控件已在上方 g_dslot 释放;摘容器引用/几何 */ } /* 按 scroll 重建全部内容控件(owner=ACT_DEMO:调用方须已 push ACT_DEMO)。 @@ -197,11 +203,12 @@ static void demo_build_at(int scroll) meow_widget_set_selected(g_dr1, g_ds.r1); meow_widget_set_selected(g_dr2, g_ds.r2); - /* ---- ProgressBar(线性 + 圆形,on_tick 动画) ---- */ + /* ---- ProgressBar(线性 + 圆形,on_tick 动画)---- + * 进度语义值已上收 logic/state.c;重建从 logic_prog_get() 恢复。 */ d_title(DCL_X, SY(yb), "PROGRESS (animated)"); yb += 26; - r_prl = RX(DCL_X, SY(yb), DFW, 8); g_dprl = meow_progress_create(r_prl.x, r_prl.y, r_prl.w, r_prl.h, g_ds.prog); SLOT(g_dprl, r_prl.x, r_prl.y, r_prl.w, r_prl.h); yb += 16; + r_prl = RX(DCL_X, SY(yb), DFW, 8); g_dprl = meow_progress_create(r_prl.x, r_prl.y, r_prl.w, r_prl.h, logic_prog_get()); SLOT(g_dprl, r_prl.x, r_prl.y, r_prl.w, r_prl.h); yb += 16; r_prc = RX(DCL_X + 400 + 17 - 20, SY(yb) + 17 - 20, 40, 40); - g_dprc = meow_progress_circular_create(r_prc.x + 20, r_prc.y + 20, 17, g_ds.prog); + g_dprc = meow_progress_circular_create(r_prc.x + 20, r_prc.y + 20, 17, logic_prog_get()); SLOT(g_dprc, r_prc.x, r_prc.y, r_prc.w, r_prc.h); yb += 48; /* ---- Container(Card / Badge / TabBar) ---- */ @@ -228,12 +235,13 @@ static void demo_build_at(int scroll) r_sheet = RX(DCR_X, SY(yb), DCW, DBH); g_dbtn_sheet = meow_btn_create_variant(r_sheet.x, r_sheet.y, r_sheet.w, r_sheet.h, "SHEET", MEOW_BTN_OUTLINED); SLOT(g_dbtn_sheet, r_sheet.x, r_sheet.y, r_sheet.w, r_sheet.h); yb += DCH; - /* ---- LazyColumn(100 项列表滚动) ---- */ - d_title(DCL_X, SY(yb), "LIST (LazyColumn, tap+swipe)"); yb += 26; + /* ---- LazyColumn(100 项列表滚动) ---- + * 本区块标题改由列表区 CONTAINER 子视图(ui/demo/list/list.c)的 on_draw 绘制(注册表→ + * invalidate 链路);列表滚动/选中由 list_view_bind 从子视图持有态恢复(不再经 g_ds)。 */ + int list_title_y = SY(yb); yb += 26; /* 标题条(子视图 on_draw 直绘,几何计入容器) */ r_list = RX(DCL_X, SY(yb), DFW, 150); g_dlc = meow_lazycolumn_create(r_list.x, r_list.y, r_list.w, r_list.h, 40, 100, demo_list_src, NULL); SLOT(g_dlc, r_list.x, r_list.y, r_list.w, r_list.h); - meow_list_set_scroll(g_dlc, g_ds.list); - meow_list_set_selected(g_dlc, g_ds.list_sel); /* M2.71-bug8:跨重建保留选中行 */ + list_view_bind(g_dlc, r_list, RX(DCL_X, list_title_y, DFW, 26)); yb += 158; g_demo_content_h = yb; @@ -278,6 +286,9 @@ static int demo_content_tap(int x, int y) { g_demo_focus = 0; /* 默认切回页滚动;仅命中列表时改置 1 */ + /* 嵌套命中(子>父,§A.7 设计):列表区 CONTAINER 子视图先发,命中即消费。 */ + if (list_view_hit(x, y)) return 1; + for (int i = 0; i < 5; i++) if (meow_widget_hit(g_dbtn_b[i], x, y)) { d_toggle_sel(g_dbtn_b[i], r_btn[i]); g_ds.btn[i] = meow_widget_selected(g_dbtn_b[i]); return 1; } if (meow_widget_hit(g_dr1, x, y)) { meow_widget_set_selected(g_dr1, 1); meow_widget_set_selected(g_dr2, 0); g_ds.r1 = 1; g_ds.r2 = 0; meow_ui_invalidate(r_dr1.x, r_dr1.y, r_dr1.w, r_dr1.h); meow_ui_invalidate(r_dr2.x, r_dr2.y, r_dr2.w, r_dr2.h); return 1; } @@ -299,13 +310,7 @@ static int demo_content_tap(int x, int y) } if (meow_widget_hit(g_dbtn_dlg, x, y)) { meow_dialog_show(g_dlg); meow_log(MEOW_LOG_INFO, "dialog result=%d", meow_dialog_result(g_dlg)); meow_ui_invalidate(r_dlg.x, r_dlg.y, r_dlg.w, r_dlg.h); return 1; } if (meow_widget_hit(g_dbtn_sheet, x, y)) { int r = meow_sheet_open(g_sheet); meow_log(MEOW_LOG_INFO, "sheet result=%d", r); meow_ui_invalidate(r_sheet.x, r_sheet.y, r_sheet.w, r_sheet.h); return 1; } - if (meow_widget_hit(g_dlc, x, y)) { - g_demo_focus = 1; - int li = meow_list_tap_at(g_dlc, x, y); /* M2.71-bug8:命中行→置选中并高亮 */ - if (li >= 0) { g_ds.list_sel = li; meow_ui_invalidate(r_list.x, r_list.y, r_list.w, r_list.h); } - return 1; - } - return 0; + return 0; /* 列表区分发已由顶部 list_view_hit 处理(子>父) */ } /* demo 页 on_tap 分发(chrome → 内容) */ @@ -331,16 +336,17 @@ void demo_on_tap(int x, int y) demo_content_tap(x, y); } -/* demo 页 on_tick:ProgressBar 动画(局部刷,~120ms 步进) */ +/* demo 页 on_tick:ProgressBar 动画(局部刷,~120ms 步进)。 + * 进度语义值已上收 logic/state.c(logic_prog_get/set),本处只驱动显示。 */ void demo_tick(uint64_t now) { if (g_demo_prog_last == 0) g_demo_prog_last = now; if (now - g_demo_prog_last < 120) return; g_demo_prog_last = now; - g_ds.prog = (g_ds.prog + 3) % 101; - g_demo_prog = g_ds.prog; - meow_progress_set(g_dprl, g_demo_prog); meow_ui_invalidate(r_prl.x, r_prl.y, r_prl.w, r_prl.h); - meow_progress_set(g_dprc, g_demo_prog); meow_ui_invalidate(r_prc.x, r_prc.y, r_prc.w, r_prc.h); + int p = logic_prog_get() + 3; if (p > 100) p -= 101; /* (v+3)%101,wrap 0..100 */ + logic_prog_set(p); + meow_progress_set(g_dprl, p); meow_ui_invalidate(r_prl.x, r_prl.y, r_prl.w, r_prl.h); + meow_progress_set(g_dprc, p); meow_ui_invalidate(r_prc.x, r_prc.y, r_prc.w, r_prc.h); } /* 按触碰 X 落 slider 值并局部刷(按下即定位 + 拖动实时,M2.71-bug2) */ @@ -353,15 +359,14 @@ static void demo_slider_drag(int x) meow_ui_invalidate(r_slider_txt.x, r_slider_txt.y, r_slider_txt.w, r_slider_txt.h); /* 重画值文本 */ } -/* demo 页 on_touch_down:锁一种拖拽(slider > list > 页内容)。 */ +/* demo 页 on_touch_down:锁一种拖拽(slider > list > 页内容)。 + * 列表区走 list_view_down(子>父:命中列表区由列表 CONTAINER 子视图收口)。 */ void demo_touch_down(int x, int y) { g_drag_slider = 0; g_drag_list = 0; g_drag_page = 0; g_drag_page_delta = 0; if (!g_demo) return; if (meow_widget_hit(g_dslider, x, y)) { g_drag_slider = 1; demo_slider_drag(x); return; } - if (g_dlc && meow_widget_hit(g_dlc, x, y)) { - g_demo_focus = 1; g_drag_list = 1; g_drag_list_last_y = y; return; - } + if (list_view_down(x, y)) return; /* 列表区:置 focus+drag_list(list.c) */ g_demo_focus = 0; if (y >= g_demo_ct && y < g_demo_cb && x >= 0 && x < meow_ui_width()) { g_drag_page = 1; g_drag_page_last_y = y; @@ -373,11 +378,7 @@ void demo_touch_move(int x, int y) { if (!g_demo) return; if (g_drag_slider) { demo_slider_drag(x); return; } - if (g_drag_list) { - int dy = y - g_drag_list_last_y; g_drag_list_last_y = y; - if (dy) { meow_list_scroll_by(g_dlc, -dy); g_ds.list = meow_list_scroll(g_dlc); meow_ui_invalidate(r_list.x, r_list.y, r_list.w, r_list.h); } - return; - } + if (list_view_move(y)) return; /* 列表拖动(list.c) */ if (g_drag_page) { int dy = y - g_drag_page_last_y; g_drag_page_last_y = y; g_drag_page_delta += -dy; /* 手指上移(y 减) → scroll 增(显示更低内容),与 on_swipe 一致 */ @@ -395,13 +396,8 @@ void demo_swipe(int dir, int dist) if (dir != MEOW_SWIPE_UP && dir != MEOW_SWIPE_DOWN) return; if (g_drag_page || g_drag_list) return; /* 本次手势已实时跟手滚动过 */ int del = (dir == MEOW_SWIPE_UP) ? dist : -dist; /* 手指上移 → 偏移增大 */ - if (g_demo_focus && g_dlc) { - meow_list_scroll_by(g_dlc, del); - g_ds.list = meow_list_scroll(g_dlc); - meow_ui_invalidate(r_list.x, r_list.y, r_list.w, r_list.h); /* 列表区局部刷新 */ - } else { - demo_rebuild_to(g_demo_scroll + del); - } + if (list_view_swipe(del)) return; /* 列表聚焦:滚列表(list.c,子>父消费) */ + demo_rebuild_to(g_demo_scroll + del); } /* ---- demo 页 view(on_enter/on_leave/on_destroy 驱动进入/离开/释放)---- */ @@ -412,6 +408,7 @@ static void demo_page_enter(meow_view *v, void *ctx) ((demo_ctrl *)ctx)->active = 1; g_demo = 1; g_demo_focus = 0; + list_view_enter(); /* 先进入列表区子视图(其 on_draw 在下面 rebuild→paint 中经注册表触发) */ demo_rebuild_to(0); meow_log(MEOW_LOG_INFO, "demo enter scroll=0"); } @@ -421,6 +418,7 @@ static void demo_page_leave(meow_view *v, void *ctx) (void)v; ((demo_ctrl *)ctx)->active = 0; g_demo = 0; + list_view_leave(); /* 子离开先于父离开(嵌套顺序) */ } static void demo_page_destroy(meow_view *v, void *ctx) @@ -444,11 +442,15 @@ int demo_is_active(void) return g_demo; } -/* demo view:on_create 建 chrome+内容(一次,owner=ACT_DEMO);进入时 rebuild 到顶。 */ +/* demo view:on_create 建 chrome+内容(一次,owner=ACT_DEMO);进入时 rebuild 到顶。 + * 视图深度化:先挂列表区 CONTAINER 子视图到本 ACTIVITY view 的 children,再建内容。 + * 列表子视图 id 用非页面值,不占 g_view_by_id(见 list.c)。 */ static void demo_page_create(meow_view *v, void *ctx) { (void)v; ((demo_ctrl *)ctx)->view = v; + meow_view *lv = list_view_create(); + if (lv) meow_view_add_child(v, lv); demo_init(); } diff --git a/patch_v2/hello_app/ui/demo/list/list.c b/patch_v2/hello_app/ui/demo/list/list.c new file mode 100644 index 0000000..e102546 --- /dev/null +++ b/patch_v2/hello_app/ui/demo/list/list.c @@ -0,0 +1,181 @@ +/* ui/demo/list/list.c — 控件库 Demo 页内「列表区」CONTAINER 子视图(批次③ 视图深度化)。 + * + * 目标(SDK_VIEW_FRAMEWORK_DESIGN.md §B.4/§E③): + * 把 demo 页内的 LazyColumn 列表逻辑区块抽成一个 meow_view CONTAINER 子视图, + * 挂到 demo ACTIVITY view 的 children(meow_view_add_child),验证 + * ① 嵌套生命周期:on_enter/on_leave 顺序(父进入→子进入;子离开→父离开); + * ② 嵌套命中(子>父):点落列表区由本子视图消费,落列表区外回退父页; + * ③ on_draw 直绘:list 区块标题改由本子视图 on_draw 经注册表绘制(view→注册表→invalidate 链路)。 + * + * 职责边界(诚实): + * - 本子视图为**组织/结构节点 + 列表交互收口**:持有 list 控件引用 + 列表视图态 + * (focus/drag/scroll/sel),并对外暴露 list_view_hit/down/move/swipe 供 demo 页分发改派, + * 实现「子>父」命中。list **控件创建/释放**仍留在 demo 页内容重建流(demo_build_at/ + * demo_free_content),因为 widget 由 z 序注册表 auto 注册/注销、并随 scroll 重建——完整 + * 的「控件归容器拥有」需 SDK 侧支持(本批冻结 patch_v2/sdk/),故以绑定引用的方式折中。 + * - SDK 骨架(meow_ui_view.c)的 view_enter/view_leave 不递归 children(批次① 仅顶层页); + * 本子视图的 on_enter/on_leave 由 demo 页 on_enter/on_leave 显式驱动(list_view_enter/leave)。 + * - on_draw 是回调、view 不缓存像素(非保留,§5.8.7);绘制由 meow_ui_paint_full/invalidate + * 触发,仅当本子视图 state 含 MEOW_VIEW_STATE_ENTERED 时注册表才绘制(meow_draw_view_entered)。 + */ +#include "hello_internal.h" + +/* ---- 本子视图(CONTAINER,非页面:id 用越界值避免占用 g_view_by_id 顶层页槽位) ---- */ +static meow_view *g_list_view = NULL; + +/* ---- 列表视图态(跨重建保留;extern 供宿主测试对真实状态断言,见 hello_internal.h)---- + * g_dlc/r_list/g_demo_focus/g_drag_list 从 demo.c 迁入本文件(语义归列表区)。 + * g_demo_focus 亦被 demo.c 的页/列表滚动分流读取,经 extern 跨 TU 共享。 */ +meow_widget *g_dlc = NULL; +rect_t r_list = { 0, 0, 0, 0 }; +int g_demo_focus = 0; /* 1=LazyColumn 聚焦(swipe 滚列表而非页面) */ +int g_drag_list = 0; /* 手指按在 LazyColumn:拖拽滚列表 */ + +static rect_t r_list_title = { 0, 0, 0, 0 }; /* list 区块标题外接框(on_draw 用) */ +static int g_list_scroll = 0; /* 跨重建保留:列表滚动偏移 */ +static int g_list_sel = 0; /* 跨重建保留:选中行 */ +static int g_drag_list_last_y = 0; /* 列表拖拽上一帧 y */ + +/* ---- on_draw:list 区块标题直绘(注册表→invalidate 链路实测,批次③)---- + * 原 demo.c 用 d_title() 把标题注册成 CUSTOM 绘制物;本表标题改由本子视图 on_draw 绘制, + * 注册表在整帧/区域重画时经 draw_one(VIEW) 调 v->hooks.on_draw(需本子视图已进入)。 */ +static void list_view_draw(meow_view *v, const meow_theme *th, void *ctx) +{ + (void)ctx; + if (!g_dlc) return; /* 列表未建成(几何未绑)时不画 */ + meow_ui_text(meow_view_screen_x(v), meow_view_screen_y(v), + "LIST (LazyColumn, tap+swipe)", 20, th->primary); +} + +static void list_page_enter(meow_view *v, void *ctx) +{ + (void)v; (void)ctx; + meow_log(MEOW_LOG_INFO, "demo list view enter"); +} +static void list_page_leave(meow_view *v, void *ctx) +{ + (void)v; (void)ctx; + meow_log(MEOW_LOG_INFO, "demo list view leave"); +} +static void list_page_destroy(meow_view *v, void *ctx) +{ + (void)v; (void)ctx; + g_dlc = NULL; + r_list = RX(0, 0, 0, 0); + r_list_title = RX(0, 0, 0, 0); + g_list_view = NULL; /* meow_view_free 递归释放前清引用,防悬垂 */ +} + +/* 进入子视图:置 ENTERED + on_enter(幂等)。SDK view_enter 不递归,故由父页显式驱动。 */ +void list_view_enter(void) +{ + if (!g_list_view) return; + if (g_list_view->state & MEOW_VIEW_STATE_ENTERED) return; + g_list_view->state |= MEOW_VIEW_STATE_ENTERED; + if (g_list_view->hooks.on_enter) g_list_view->hooks.on_enter(g_list_view, g_list_view->ctx); +} +/* 离开子视图:清 ENTERED + on_leave(幂等)。 */ +void list_view_leave(void) +{ + if (!g_list_view) return; + if (!(g_list_view->state & MEOW_VIEW_STATE_ENTERED)) return; + g_list_view->state &= ~MEOW_VIEW_STATE_ENTERED; + if (g_list_view->hooks.on_leave) g_list_view->hooks.on_leave(g_list_view, g_list_view->ctx); +} + +/* 建 CONTAINER 子视图(demo_page_create 调,随即 meow_view_add_child 到 demo ACTIVITY view)。 */ +meow_view *list_view_create(void) +{ + static const meow_view_hooks h = { + .on_enter = list_page_enter, + .on_leave = list_page_leave, + .on_destroy = list_page_destroy, + .on_draw = list_view_draw, + }; + /* id 用非页面值:容器不占 g_view_by_id(那是 page_push/pop 顶层页查找表)。 */ + g_list_view = meow_view_create(0x1000, MEOW_VIEW_CONTAINER, &h, NULL); + return g_list_view; +} +meow_view *list_view_get(void) +{ + return g_list_view; +} + +/* 内容重建后绑定:list 控件 + 几何(list 区 + 标题条),并恢复/应用跨重建的 scroll/select。 + * demo_build_at 在创建 g_dlc 后调本函数,把标题条与列表区几何写进容器 view(on_draw/命中用)。 */ +void list_view_bind(meow_widget *w, rect_t list, rect_t title) +{ + g_dlc = w; + r_list = list; + r_list_title = title; + if (g_list_view) { + g_list_view->x = title.x; + g_list_view->y = title.y; + g_list_view->w = title.w; + g_list_view->h = title.h + list.h; /* 标题条 + 列表区 */ + } + if (g_dlc) { + meow_list_set_scroll(g_dlc, g_list_scroll); + meow_list_set_selected(g_dlc, g_list_sel); + } +} + +/* 内容释放后清引用(demo_free_content 调;list 控件已由 demo 释放,本处只摘引用)。 */ +void list_view_release(void) +{ + g_dlc = NULL; + r_list = RX(0, 0, 0, 0); + r_list_title = RX(0, 0, 0, 0); + if (g_list_view) g_list_view->x = g_list_view->y = g_list_view->w = g_list_view->h = 0; +} + +/* 点是否落列表区(嵌套命中断言/分发改派用)。 */ +int list_view_contains(int x, int y) +{ + return g_dlc && meow_widget_hit(g_dlc, x, y); +} + +/* Tap 分发给列表区(嵌套命中:demo_content_tap 先查本子视图,命中即消费——子>父)。 + * 命中行→置选中并局部刷;返回 1=已消费。 */ +int list_view_hit(int x, int y) +{ + if (!list_view_contains(x, y)) return 0; + g_demo_focus = 1; + int li = meow_list_tap_at(g_dlc, x, y); + if (li >= 0) { g_list_sel = li; meow_ui_invalidate(r_list.x, r_list.y, r_list.w, r_list.h); } + return 1; +} + +/* Touch Down 命中列表:置列表聚焦 + 拖拽锁;返回 1=已消费(demo_touch_down 改派)。 */ +int list_view_down(int x, int y) +{ + if (!list_view_contains(x, y)) return 0; + g_demo_focus = 1; + g_drag_list = 1; + g_drag_list_last_y = y; + return 1; +} + +/* Touch Move 拖动列表:跟随滚动;已有 drag 锁(由 down 设立);返回 1=在列表拖动。 */ +int list_view_move(int y) +{ + if (!g_drag_list) return 0; + int dy = y - g_drag_list_last_y; + g_drag_list_last_y = y; + if (dy) { + meow_list_scroll_by(g_dlc, -dy); + g_list_scroll = meow_list_scroll(g_dlc); + meow_ui_invalidate(r_list.x, r_list.y, r_list.w, r_list.h); + } + return 1; +} + +/* Swipe:列表聚焦时滚列表(返回 1=已消费;否则 demo 页滚页面)。del=方向加权位移。 */ +int list_view_swipe(int del) +{ + if (!(g_demo_focus && g_dlc)) return 0; + meow_list_scroll_by(g_dlc, del); + g_list_scroll = meow_list_scroll(g_dlc); + meow_ui_invalidate(r_list.x, r_list.y, r_list.w, r_list.h); + return 1; +} diff --git a/patch_v2/hello_app/ui/home.c b/patch_v2/hello_app/ui/home/home.c similarity index 98% rename from patch_v2/hello_app/ui/home.c rename to patch_v2/hello_app/ui/home/home.c index bc252c8..307c5fb 100644 --- a/patch_v2/hello_app/ui/home.c +++ b/patch_v2/hello_app/ui/home/home.c @@ -1,4 +1,4 @@ -/* ui/home.c — 主页(ACT_HOME)view + 控制器。 +/* ui/home/home.c — 主页(ACT_HOME)view + 控制器(批次③ 目录嵌套后)。 * * 负责 home 控件(TAP ME / 6 通知行 / CANCEL LAST / FULLSCREEN / WIDGETS DEMO)+ 手绘(非注册表 * 路径,batch① 仅 demo 迁注册表,home 保持命令式 draw+flush)+ 命中分发 + 业务监听(logic 推送)。 diff --git a/patch_v2/sdk/test_p1p2p3_repro.c b/patch_v2/sdk/test_p1p2p3_repro.c index 0811786..d779373 100644 --- a/patch_v2/sdk/test_p1p2p3_repro.c +++ b/patch_v2/sdk/test_p1p2p3_repro.c @@ -6,6 +6,8 @@ * * 批次② 变化:hello.c 已拆为 app.c + ui/{home,full,demo}.c + ui/common/chrome.c + * logic/{notify,state}.c;本文件不再 #include hello.c,改为 extern 驱动 demo 层并链接多文件。 + * 批次③ 变化:ui/home、ui/demo 子目录化(ui/home/home.c + ui/demo/demo.c),demo 列表区块抽成 + * CONTAINER 子视图 ui/demo/list/list.c;下表编译路径相应更新(断言未弱化)。 * * 覆盖: * P1 z-order 叠层:圆形进度条(实时重绘)与 FAB 浮层重叠时,局部重绘不再清掉/盖住 FAB。 @@ -24,8 +26,9 @@ * meow_ui_widget.c meow_ui_input.c meow_ui_activity.c meow_ui_dialog.c meow_ui_ime.c \ * meow_ui_img.c meow_ui_config.c meow_ui_notify.c meow_notify_ipc.c meow_ui_draw.c \ * meow_ui_view.c stb_image.c \ - * ../hello_app/ui/home.c ../hello_app/ui/full.c ../hello_app/ui/demo.c \ - * ../hello_app/ui/common/chrome.c ../hello_app/logic/notify.c ../hello_app/logic/state.c \ + * ../hello_app/ui/home/home.c ../hello_app/ui/full.c ../hello_app/ui/demo/demo.c \ + * ../hello_app/ui/demo/list/list.c ../hello_app/ui/common/chrome.c \ + * ../hello_app/logic/notify.c ../hello_app/logic/state.c \ * -I. -I../hello_app -I../meow_launcherd -pthread -lm * 运行:MEOW_UI_DUMP=/tmp/repro.ppm ./test_p1p2p3_repro (optional,dump 最终屏幕) *