Files
MeowOS Dev 245bee2946 MeowOS for HiBy R3 Pro II — 公共发布版本(历史已重置)
• 全新单提交:清除含敏感信息的旧历史(sudo 口令、内网 IP、SSH 密钥路径、热点 SSID、设备 MAC)
• 本地开发文档/测试记录/构建脚本全部移入 gitignored 的 devdocs/ 与 scripts/build/(不入库)
• 保留:MeowOS 源码(launcher/watchdog/bootmenu/meow_svcd/SDK)、项目规范文档、mips-repo
增补组件:SDK 统一日志+通知 API、meow_svcd 服务管理器、mips-repo 软件仓库
2026-08-30 01:12:34 +08:00

64 lines
4.0 KiB
C
Raw Permalink 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_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 */