/* hello_internal.h — hello 应用内部共享头(UI 各页 + app 装配层 + 宿主测试面)。 * * 层级(SDK_VIEW_FRAMEWORK_DESIGN.md §B.1/B.2): * - ui/ 每页一个 view 文件(持视图态 scroll/focus/drag/几何);共享 chrome 在 ui/common/; * - logic 下纯业务模块(state: taps/secs;notify: 通知发送/取消),UI 只经 logic_* / notify_* 调用; * - app.c main + 装配 + 事件分发(把 meow_ui_run 的平铺回调路由到各页)。 * 页面组织:home/full/demo 各建一个 meow_view(ACTIVITY),生命周期用 * meow_view_page_push/pop 驱动(on_enter/on_leave 唯一入口);绘图仍走 batch① 已接线的 * 路径(home/full 手绘 + demo 走 meow_ui_paint_full 注册表),on_draw 本批置 NULL(见报告)。 * * 本头是全应用/测试的跨 TU 声明:只声明(extern),不定义,避免多定义。宿主 test_p1p2p3_repro * 直接 #include 本头 + 链接各 .c,驱动 demo 真实函数(demo_paint/demo_rebuild_to/demo_touch_down) * 对 back_buf 做断言——这是测「真实 demo 代码 + 真实 SDK」,不是模拟桩。 */ #ifndef HELLO_INTERNAL_H #define HELLO_INTERNAL_H #include #include "meow_ui.h" #include "meow_ui_view.h" #include "logic/logic.h" /* ---- App 级弹层(app.c 创建;demo 页打开/关)---- */ extern meow_dialog *g_dlg; /* Dialog(阻塞模态;main 创建一次) */ extern meow_sheet *g_sheet; /* BottomSheet(阻塞模态;main 创建一次) */ /* ---- Activity 归属(§6.1 ①)---- */ #define ACT_HOME 0 #define ACT_FULL 1 #define ACT_DEMO 2 /* ---- SDK 控件不透明:App 自记几何,用于局部 flush / 命中 / scroll 重建 ---- */ typedef struct { int x, y, w, h; } rect_t; #define RX(x,y,w,h) ((rect_t){ (x), (y), (w), (h) }) /* ---- 视图控制器(ctx = biz-UI 绑定点)---- * 本批控制器为薄壳:持 meow_view 回指针;页面细粒度视图态(g_ds/g_drag_* /scroll 等)留在各页 * 模块作用域全局(设计定案 B:demo 视图态不迁 logic)。控制器未来可吸收这些状态。 */ typedef struct { meow_view *view; int active; /* 是否有页进入(与模块 active 全局同步) */ int _pad; } home_ctrl; typedef struct { meow_view *view; int active; int _pad; } full_ctrl; typedef struct { meow_view *view; int active; /* = g_demo */ int focus; /* = g_demo_focus */ int scroll; /* = g_demo_scroll */ int _pad; } demo_ctrl; /* ---- home 页(ui/home/home.c)---- */ meow_view *home_view_create(void); /* 建 home view;on_create 建 home 控件 + 注册业务监听器 */ int home_on_tap(int x, int y);/* home 态命中分发:返回 1=已消费(含导航到 demo/full) */ /* ---- full 页(ui/full.c)---- */ meow_view *full_view_create(void); /* 建 full view(无控件;全屏文本由 full_draw 手绘) */ int full_is_active(void); /* 1=处于全屏态 */ void full_draw(void); /* 画全屏帧(clear accent + 文本 + flush) */ /* ---- demo 页(ui/demo/demo.c)---- */ meow_view *demo_view_create(void); /* 建 demo view;on_create 调 demo_init() 建 chrome+内容 */ int demo_is_active(void); /* 1=处于 demo 页 */ void demo_on_tap(int x, int y); void demo_touch_down(int x, int y); void demo_touch_move(int x, int y); void demo_swipe(int dir, int dist); void demo_tick(uint64_t now); /* demo 构建/绘制入口(宿主 test_p1p2p3_repro 直接驱动 + demo view 复用): * demo_init 建 chrome+内容(scroll=0);demo_paint 整帧按 z 重画;demo_rebuild_to 重建到 scroll。 */ void demo_init(void); void demo_paint(void); void demo_rebuild_to(int scroll); /* ---- demo 视图态(设计定案 B:g_ds 非列表字段/scroll/drag_page 留 ui/demo/demo.c,不迁 logic; * 列表视图态批③ 迁 ui/demo/list/list.c——下列四项定义在 list.c,经本头 extern 跨 TU 共享)。---- * 暴露为 extern,供宿主测试对真实 demo 状态断言(P1/P2/P3)。 */ extern int g_demo; /* 1=处于 demo 演示页 */ extern int g_demo_focus; /* 1=LazyColumn 聚焦(list.c) */ extern int g_demo_scroll; /* 内容区滚动偏移 */ extern int g_drag_list; /* 手指在列表:拖拽滚列表(list.c) */ extern int g_drag_page; /* 手指在页内容:拖拽滚页面 */ extern meow_widget *g_dlc; /* LazyColumn(list.c) */ extern meow_widget *g_dprc; /* ProgressBar 圆形 */ extern rect_t r_prc; /* 圆形进度外接框 */ extern rect_t r_list; /* 列表区几何(list.c) */ 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 直绘。 * 嵌套生命周期由 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_bind(meow_widget *w, rect_t list, rect_t title); /* 内容重建后绑控件+几何+恢复态 */ void list_view_release(void); /* 内容释放后摘引用/几何 */ int list_view_hit(int x, int y); /* tap 分发给列表区,命中即消费(含选中) */ int list_view_down(int x, int y); /* touch_down 命中列表:置 focus+drag_list */ int list_view_move(int y); /* touch_move 拖动列表:1=在列表拖动 */ int list_view_swipe(int del); /* swipe:列表聚焦时滚列表,1=已消费 */ /* ---- chrome(ui/common/chrome.c)---- */ extern meow_widget *g_tb; /* TopAppBar(chrome 固定) */ extern meow_widget *g_nav; /* NavigationBar(chrome 固定) */ extern meow_widget *g_fab; /* FAB(chrome 置顶;demo 交互可重建换 label) */ extern rect_t r_tb, r_nav, r_fab; void chrome_create(void); /* 建 chrome(调用方须先 push ACT_DEMO 使 owner=ACT_DEMO) */ void chrome_free(void); /* 释放 chrome(demo on_destroy 调) */ #endif /* HELLO_INTERNAL_H */