/* * meow_ui_internal.h — SDK 内部各 TU 共享声明(不随 meow_ui.h 发布给应用)。 * 仅供 meow_ui_*.c 之间协作:渲染后端底层能力 + 输入事件队列 + 主题取用。 */ #ifndef MEOW_UI_INTERNAL_H #define MEOW_UI_INTERNAL_H #include #include "meow_ui.h" /* ---- 系统状态喂入(Stage-One 状态栏收敛;meow_ui_sys.c 提供)---- * launcher(系统进程)不跑 SDK 事件循环(无 meow_ui_run),SDK 的 meow_ui_sys_refresh() * 不会在 launcher 里自动触发;且电量/音量/亮度等权威值本就在 launcher 的 g_sys 快照里 * (launcher 是背光/音量写入方)。故此 API 让 launcher 把权威快照喂进 SDK 的系统状态, * 喂入即置状态栏 force,下一次 present() 重画顶条。SDK 自身 meow_ui_sys_refresh() 仍按 * 同源兜底(供 App 流程 meow_ui_run 使用)。只填 SDK 快照所需最小字段,与 launcher 的 * meow_sys_state(meow_launcherd.c)字段名交叉映射,二者是不同 TU 的异名类型,故用此 * 专用喂入结构,避免 launcher 引入 meow_ui_sys.h 造成 typedef 重定义。 */ typedef struct meow_ui_feed { int batt; /* 电量 %,-1 未知 */ int charging; /* 1 充电/满 0 放电 */ int wifi_on; /* 1 网卡 up(operstate==up) */ int bt_seen; /* hci0 节点存在 */ int bt_on; /* 实际上电 */ int vol; /* 音量 0-100 */ int brightness; /* 背光 1-100;<=0 视为未知/屏关不入顶条 */ } meow_ui_feed; void meow_ui_sys_feed(const meow_ui_feed *f); /* 喂权威快照 + 置 force 重绘顶条 */ /* ---- 主题(meow_ui_theme.c 提供)---- * 重置主题缓存,使下一次 meow_theme_get() 重读 settings.conf(display.theme / * display.theme_mode / display.theme_dark_start|end)。launcher 在 statusbar 刷新前调用, * 让 SDK 状态栏(其主题是缓存的)跟手 launcher 侧主题变更,避免「launcher 界面已换肤、 * 状态栏滞留旧主题」。App 无需调用(主题变更本就由 Settings 改 settings.conf,下一个 * set_mode/get 自然读到——缓存仅挡「同会话内 settings 被外部改写」的即时反映)。 */ void meow_theme_reload(void); /* ---- 渲染后端(meow_ui_gfx.c)提供 ---- */ /* 把 RGBA 像素(stb_image 输出,4 通道 straight alpha)blit 进 back_buf; * alpha 为全局不透明度 0-255(255 时仍用像素自身 alpha 做逐像素混合)。 */ void meow_gfx_blit_rgba(int x, int y, int w, int h, const uint8_t *rgba, int alpha); /* 标记一个区域脏(供非标准绘制使用)。 */ void meow_gfx_mark_dirty(int x, int y, int w, int h); /* 标记整帧脏(launcher 手动脏模型桥接:自绘 raw 像素后标全屏,present 走 SDK)。 */ void meow_gfx_mark_full(void); /* 返回离屏 back_buf 指针(launcher 系统组件与 SDK 共用同一 back_buf 用)。 */ unsigned char *meow_ui_back_buf(void); /* 实心圆角矩形(控件按钮底色用;公共 §3 只有空心 draw_rect_round)。[D3] */ void meow_gfx_fill_round(int x, int y, int w, int h, int r, uint32_t color); /* 是否运行于真实 fb 之上(0 = 头less/离屏,qemu/宿主)。 */ int meow_gfx_is_device(void); /* 中文/日文字库(mfont)是否已加载(状态栏「蓝牙」CJK 与回退 "BT" 二选一)。 */ int meow_gfx_mfont_ready(void); /* ---- 输入层(meow_ui_input.c)---- */ /* 语义事件:由输入线程解析后压入队列,run/IME 循环弹出。 */ #define MEOW_EV_KEY 1 /* a=keycode, b=1 按下 / 0 抬起 */ #define MEOW_EV_TAP 2 /* a=x, b=y(触摸抬起落点) */ #define MEOW_EV_SWIPE 3 /* a=MEOW_SWIPE_*, b=距离(px) */ #define MEOW_EV_SWIPE_PROGRESS 4 /* a=按下X(t_dx), b=当前X(t_cx);dx=b-a(>0=左缘向内划=返回手势) */ typedef struct meow_input_ev { uint8_t type; int a, b; } meow_input_ev; /* 启动输入线程(幂等)。无设备时仅空转。 */ void meow_input_start(void); /* 从队列弹出一个事件;无事件返回 0。 */ int meow_input_pop(meow_input_ev *ev); /* 注入一条语义事件(宿主验证手势分发/进度条用;设备上无调用方)。 */ void meow_input_inject(int type, int a, int b); /* 清空队列(IME 打开前丢弃残留触摸,避免误敲)。 */ void meow_input_drain(void); /* ---- 实时触摸态(供控件绘制按压/按住视觉;输入线程写、app 主线读)---- * 与语义事件队列无关:这些直接读输入线程的触摸状态机当前值,让 meow_widget_draw * 在「手指按下期间」能如实反映按钮的按下/按住视觉,而无需 app 自行追踪按下。 */ int meow_input_touch_down(void); /* 当前是否有触摸按下 */ int meow_input_touch_x(void); /* 当前 X(无按下=-1) */ int meow_input_touch_y(void); /* 当前 Y(无按下=-1) */ unsigned int meow_input_touch_hold_ms(void); /* 按下已持续毫秒(抬起后 0) */ /* 宿主单测/内部注入:模拟一次按压。down=1 时 x,y 为压点、hold_ms 可指定「已按住时长」 * (把按下时刻回拨),便于测按住态;down=0 复位。设备运行时无调用方。 */ void meow_input_touch_set(int down, int x, int y, unsigned hold_ms); /* ---- 控件层实时刷新(meow_ui_widget.c)---- * 每帧由 meow_ui_run 调用(主线程):实时触摸按下/释放/按住达阈值时,重绘命中的按钮区 * 并局部上屏,让按压/按住/释放视觉即时反映,无需 app 在 on_tick/on_tap 重绘(agent-119)。 * 仅作用于 SDK 控件按钮(meow_widget_draw 的 W_BTN);app 纯自绘不适用。 */ void meow_widget_touch_refresh(void); /* ---- App 跨 Activity 全局控件(meow_ui_global.c,§6.1 ②骨架)---- * 渲染帧(meow_ui_gfx present())在 active activity 内容之上、全局状态栏之下调用 * meow_ui_global_render;触摸 TAP 分发先给 meow_ui_global_hit(命中返回 1=消费, * 否则落到 active activity 页面控件)。跨 Activity 常驻,由 SDK 调度。 */ void meow_ui_global_render(void); int meow_ui_global_hit(int x, int y); /* ---- IME(meow_ui_ime.c)---- */ /* 当前是否显示软键盘。 */ int meow_ime_active(void); /* 软键盘拦截一次触摸。返回 1=已消费(供 IME 转键/提交),0=未命中(透传给 app)。 */ int meow_ime_handle_tap(int x, int y); /* 软键盘绘制覆盖层(每次 flush 前调用;覆盖底部约 40%)。 */ void meow_ime_draw(void); /* 关闭 IME 并交付最终结果(result: 1=确认 0=取消)。 */ void meow_ime_close(int result); #endif /* MEOW_UI_INTERNAL_H */