diff --git a/hello b/hello index 78c870b..0f76929 100755 Binary files a/hello and b/hello differ diff --git a/hello_internal.h b/hello_internal.h index 7fd0b85..2c2d52f 100644 --- a/hello_internal.h +++ b/hello_internal.h @@ -95,11 +95,10 @@ extern rect_t r_dr1, r_dr2; /* Radio 几何 */ /* ---- 列表区 CONTAINER 子视图(ui/demo/list/list.c;批③ 视图深度化)---- * demo 页把列表逻辑区块抽成 meow_view CONTAINER 子视图挂到 DEMO ACTIVITY view children, * 承接列表交互(tap/down/move/swipe)、列表视图态与列表区块标题 on_draw 直绘。 - * 嵌套生命周期(list_view_enter/leave)由 demo 页 on_enter/on_leave 驱动(SDK 骨架不递归)。 */ + * 嵌套生命周期由 SDK view_enter/view_leave 递归驱动(随 demo 页进出;list_view_enter/leave + * 已退役,无需 App 层显式接管)。 */ meow_view *list_view_create(void); /* 建 CONTAINER 子视图(须即 meow_view_add_child) */ meow_view *list_view_get(void); /* 返回子视图(宿主测嵌套 on_enter/on_leave 断言) */ -void list_view_enter(void); /* 进入子视图(置 ENTERED + on_enter,幂等) */ -void list_view_leave(void); /* 离开子视图(清 ENTERED + on_leave,幂等) */ void list_view_bind(meow_widget *w, rect_t list, rect_t title); /* 内容重建后绑控件+几何+恢复态 */ void list_view_release(void); /* 内容释放后摘引用/几何 */ int list_view_hit(int x, int y); /* tap 分发给列表区,命中即消费(含选中) */ diff --git a/ui/demo/demo.c b/ui/demo/demo.c index ac6e6e7..ae5175a 100644 --- a/ui/demo/demo.c +++ b/ui/demo/demo.c @@ -408,7 +408,8 @@ 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 中经注册表触发) */ + /* 列表区 CONTAINER 子视图随本页进入由 SDK view_enter 递归驱动(其 on_draw 在 demo_rebuild_to + * →demo_paint 中经注册表绘制;meow_draw_view_entered 含祖先已进入判定,首批可见)。 */ demo_rebuild_to(0); meow_log(MEOW_LOG_INFO, "demo enter scroll=0"); } @@ -418,7 +419,7 @@ static void demo_page_leave(meow_view *v, void *ctx) (void)v; ((demo_ctrl *)ctx)->active = 0; g_demo = 0; - list_view_leave(); /* 子离开先于父离开(嵌套顺序) */ + /* 列表区子视图由 SDK view_leave 在父之前递归离开(子<先>父,§A.4/D.1)。 */ } static void demo_page_destroy(meow_view *v, void *ctx) diff --git a/ui/demo/list/list.c b/ui/demo/list/list.c index e102546..220e28e 100644 --- a/ui/demo/list/list.c +++ b/ui/demo/list/list.c @@ -13,8 +13,9 @@ * 实现「子>父」命中。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)。 + * - SDK(meow_ui_view.c)的 view_enter/view_leave **递归 children**(批次①→③ 后接线): + * 本子视图随 demo 页 on_enter/on_leave 自动进入/离开,无需 App 层显式驱动(list_view_enter/leave + * 已退役);父 on_enter 重绘时子视图经 meow_draw_view_entered(含祖先已进入)可见。 * - on_draw 是回调、view 不缓存像素(非保留,§5.8.7);绘制由 meow_ui_paint_full/invalidate * 触发,仅当本子视图 state 含 MEOW_VIEW_STATE_ENTERED 时注册表才绘制(meow_draw_view_entered)。 */ @@ -66,24 +67,8 @@ static void list_page_destroy(meow_view *v, void *ctx) 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)。 */ +/* 建 CONTAINER 子视图(demo_page_create 调,随即 meow_view_add_child 到 demo ACTIVITY view)。 + * 进入/离开经 SDK view_enter/view_leave 递归驱动(随 demo 页),本文件不再显式接管。 */ meow_view *list_view_create(void) { static const meow_view_hooks h = {