feat(sdk): 绘制期通用clip + view递归/on_event接线 (agent-195) — ①栈式clip rect(g_clip_stack[16]), 所有写像素原语过clip, meow_widget_draw push/pop控件矩形(含W_CUSTOM, 根治越界脏区), IME/模态顶层全屏不受影响 ②view enter/leave递归children + meow_view_dispatch_event(z降序子>父命中即消费); hello App层显式驱动退役
meow_ui.a→da4d3a7d; hello→c655ba43; 宿主4套件全PASS(含clip越界断言+view递归断言) 出入: W_SLIDER拇指在max处被裁(既有几何瑕疵可见化,待修); on_draw祖先已进入即画
This commit is contained in:
1 parent
44410031f5
commit
3ae6b31c00
4 files changed
+10
-25
No files matched your search
+2
-3
@@ -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 分发给列表区,命中即消费(含选中) */
|
||||
|
||||
+3
-2
@@ -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)
|
||||
|
||||
+5
-20
@@ -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 = {
|
||||
|
||||
Reference in new issue
Block a user