meow_ui.a→da4d3a7d; hello→c655ba43; 宿主4套件全PASS(含clip越界断言+view递归断言) 出入: W_SLIDER拇指在max处被裁(既有几何瑕疵可见化,待修); on_draw祖先已进入即画
118 lines
6.6 KiB
C
118 lines
6.6 KiB
C
/* 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 <stdint.h>
|
||
#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 */
|