refactor(hello): 视图框架批次② — hello.c 拆分为 app.c+ui/{home,full,demo}.c+ui/common/chrome.c+logic/{notify,state}.c(定案B: demo视图态留ui/;定案b: page导航包装activity栈);test_p1p2p3_repro 改多文件链接形态 (agent-177)

hello f45ba051→c06b3b4f; mipsel -Wall -Wextra 0 warning; 宿主 P1c/P2/P3+widgets 全 PASS
出入(诚实): view on_draw/on_event 路径暂未启用(注册表直绘已覆盖, on_draw 双画风险), 留批③实测; home/full 仍手绘未迁注册表
This commit is contained in:
MeowOS committed 2026-08-31 03:31:09 +08:00
1 parent 896f391fee
commit 1d2496b38c
12 files changed
+668 -364

No files matched your search

+102
View File
@@ -0,0 +1,102 @@
/* 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.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.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/g_drag_* /scroll 留 ui/demo.c,不迁 logic)----
* 暴露为 extern,供宿主测试对真实 demo 状态断言(P1/P2/P3)。 */
extern int g_demo; /* 1=处于 demo 演示页 */
extern int g_demo_focus; /* 1=LazyColumn 聚焦 */
extern int g_demo_scroll; /* 内容区滚动偏移 */
extern int g_drag_list; /* 手指在列表:拖拽滚列表 */
extern int g_drag_page; /* 手指在页内容:拖拽滚页面 */
extern meow_widget *g_dlc; /* LazyColumn */
extern meow_widget *g_dprc; /* ProgressBar 圆形 */
extern rect_t r_prc; /* 圆形进度外接框 */
extern rect_t r_list; /* 列表区几何 */
extern rect_t r_dr1, r_dr2; /* Radio 几何 */
/* ---- 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 */