• 全新单提交:清除含敏感信息的旧历史(sudo 口令、内网 IP、SSH 密钥路径、热点 SSID、设备 MAC) • 本地开发文档/测试记录/构建脚本全部移入 gitignored 的 devdocs/ 与 scripts/build/(不入库) • 保留:MeowOS 源码(launcher/watchdog/bootmenu/meow_svcd/SDK)、项目规范文档、mips-repo 增补组件:SDK 统一日志+通知 API、meow_svcd 服务管理器、mips-repo 软件仓库
64 lines
4.0 KiB
C
64 lines
4.0 KiB
C
/* meow_touch.h — Launcher 统一触摸接口(轻量,不依赖 SDK)。
|
||
*
|
||
* 背景:Launcher 的低性能 UI(应用列表 / 电源菜单 / 确认框)各自有一套独立、重复的
|
||
* 触摸解析,除应用列表(M2.23 已修原点锁定)外其余都踩同一个 goodix 依赖 bug:
|
||
* BTN_TOUCH=1 按下边沿到来时 ABS 坐标可能尚未更新(goodix 时序不保证 ABS 与
|
||
* BTN_TOUCH 先后),旧代码在按下边沿用「当时 t_last_x/y」立即锁原点 → 锁到上一手势
|
||
* 残留(-1/旧坐标)→ 抬手命中按钮失败 → 「点两下」。本接口把「坐标时序免疫」的
|
||
* 手势解析收敛成一份,供各 UI 复用,语义与 M2.23 应用列表修法一致。
|
||
*
|
||
* 关键语义:
|
||
* - mt_down() 不立即锁原点:只标「已按下」,并把 last 坐标归 -1(本次以无坐标起步),
|
||
* 原点由 mt_abs() 在 down 之后出现的首个有效坐标锁定(BOTH >=0 才锁)。杜绝 GOODIX
|
||
* 残留,与 M2.23 应用列表 t_down_valid 同源。
|
||
* - mt_up() 算抬手位移:abs(dx)>=MEOW_TOUCH_SWIPE_THRESH || abs(dy)>=… → 判滑动
|
||
* (返回 0,供将来切屏),否则有效 tap(返回 1)。抬手后复位手势态(down/valid),
|
||
* 但保留 down_x/y 供 mt_in() 判定按钮命中 —— 调用方处理完再开下一手势。
|
||
* - mt_reset() 彻底清空,杜绝跨手势污染。
|
||
*
|
||
* 与应用列表(run_menu 内联,M2.23 直接内联实现)语义一致;列表保留内联(含 cooldown
|
||
* 丢弃/滑动日志/行带判定等额外逻辑),其余 UI 迁到本接口。
|
||
*/
|
||
#ifndef MEOW_TOUCH_H
|
||
#define MEOW_TOUCH_H
|
||
|
||
typedef struct meow_touch {
|
||
int down, valid; /* down=已按下;valid=原点已锁(down 后首个有效 ABS) */
|
||
int down_x, down_y; /* 按下原点(goodix 时序免疫:等 down 后首个有效坐标才锁) */
|
||
int last_x, last_y; /* 最新坐标(-1=本次尚未见到有效坐标) */
|
||
} meow_touch;
|
||
|
||
/* 抬手位移 >= 阈值判为滑动(不命中);与 launcher MENU_SWIPE_THRESH(65) 一致。 */
|
||
#define MEOW_TOUCH_SWIPE_THRESH 65
|
||
|
||
/* 全局左缘返回判定(A-0 方案,M2.39 抽出共享,供设置页/应用列表等 system 界面复用,
|
||
* 与 SDK meow_ui_input.c 的 EDGE_W(24)/SWIPE_THRESH(65) 对齐——同一套"左缘起点+右滑≥阈值"
|
||
* 语义,避免各界面自造重复判定。 */
|
||
#define MEOW_EDGE_W 24 /* 左缘起点宽度(down_x < 此值才认返回手势) */
|
||
#define MEOW_EDGE_SWIPE 65 /* 向右位移阈值(dx >= 此值且横向主导 → 左缘返回) */
|
||
|
||
/* 左缘返回判定:down_x=按下原点X,dx/dy=抬手位移。
|
||
* 返回 1=命中(left-edge + 向右≥MEOW_EDGE_SWIPE 且横向主导);0=否。
|
||
* 供设置页/应用列表等系统界面复用;SDK 手势引擎对 APP 用 on_swipe(LEFT) 同语义。 */
|
||
int meow_edge_back(int down_x, int dx, int dy);
|
||
|
||
/* 手势结束彻底清空(下一手势零污染;也用于起始初始化)。 */
|
||
void mt_reset(meow_touch *mt);
|
||
|
||
/* 喂 ABS_X/ABS_Y(调用方按事件逐个喂:AX 事件传 (val, mt->last_y),AY 事件传
|
||
* (mt->last_x, val)):更新 last;若已按下且未锁原点且两轴均有效 → 锁原点。 */
|
||
void mt_abs(meow_touch *mt, int x, int y);
|
||
|
||
/* BTN_TOUCH=1 按下边沿:标 down + last 归 -1(本次以无坐标起步,只认 down 后首个有效
|
||
* ABS 作原点)。返回 1=接受此按下(是否进一步处理由调用方决定,如 cooldown/日志)。 */
|
||
int mt_down(meow_touch *mt);
|
||
|
||
/* BTN_TOUCH=0 抬手边沿:计算位移写入 dx/dy 输出参数;复位 down/valid(保留 down_x/y 供 mt_in)。
|
||
* 返回 1=有效 tap,0=滑动(位移>=阈值)或从未锁到有效坐标(ghost/残留)。 */
|
||
int mt_up(meow_touch *mt, int *dx, int *dy);
|
||
|
||
/* 按下原点是否落在矩形 [x, x+w) × [y, y+h)(tap 命中;须在 mt_up() 返回 1 后调用)。 */
|
||
int mt_in(meow_touch *mt, int x, int y, int w, int h);
|
||
|
||
#endif /* MEOW_TOUCH_H */
|