/* * 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" /* ---- 渲染后端(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 */