Files
MeowOS-For-R3P2/patch_v2/sdk/meow_ui_internal.h
T
MeowOS 6824defdf9 M2.60→M2.61 骨架: SDK Activity 栈 + 控件归属(agent-122) + 按钮去圈/即时重绘(agent-119) + SDK 模板文档(agent-121)
- SDK §6.1 三层控件模型: Activity栈(push/pop/active) + 页面控件归属 owner + meow_ui_global_* 骨架(②) + 系统级仅内部接口(③)
- meow_widget 加 owner; live_btn_hit/meow_widget_hit 仅 active activity 命中; touch_refresh stale 保护
- 根治"全屏页触摸主页按钮闪现"(跨页面控件残留); 控件对象复用弹栈不重建
- hello 迁移双 Activity(home/full): 全屏左滑=弹栈回主页, 根左滑=退出
- agent-119 按钮去圈(纯色accent+黑12/24%)+即时局部重绘保留; agent-121 SDK模板§5.3-5.7
2026-08-30 15:27:10 +08:00

91 lines
4.7 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* meow_ui_internal.h — SDK 内部各 TU 共享声明(不随 meow_ui.h 发布给应用)。
* 仅供 meow_ui_*.c 之间协作:渲染后端底层能力 + 输入事件队列 + 主题取用。
*/
#ifndef MEOW_UI_INTERNAL_H
#define MEOW_UI_INTERNAL_H
#include <stdint.h>
#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 */