• 全新单提交:清除含敏感信息的旧历史(sudo 口令、内网 IP、SSH 密钥路径、热点 SSID、设备 MAC) • 本地开发文档/测试记录/构建脚本全部移入 gitignored 的 devdocs/ 与 scripts/build/(不入库) • 保留:MeowOS 源码(launcher/watchdog/bootmenu/meow_svcd/SDK)、项目规范文档、mips-repo 增补组件:SDK 统一日志+通知 API、meow_svcd 服务管理器、mips-repo 软件仓库
70 lines
2.3 KiB
C
70 lines
2.3 KiB
C
/* meow_touch.c — 实现 Launcher 统一触摸接口(见 meow_touch.h)。 */
|
|
#include "meow_touch.h"
|
|
|
|
void mt_reset(meow_touch *mt)
|
|
{
|
|
mt->down = 0;
|
|
mt->valid = 0;
|
|
mt->down_x = -1;
|
|
mt->down_y = -1;
|
|
mt->last_x = -1;
|
|
mt->last_y = -1;
|
|
}
|
|
|
|
void mt_abs(meow_touch *mt, int x, int y)
|
|
{
|
|
if (x >= 0) mt->last_x = x;
|
|
if (y >= 0) mt->last_y = y;
|
|
/* 已按下且原点未锁,且两轴终于都有效 → 锁原点(goodix 时序免疫:只认 down 之后
|
|
* 的首个有效坐标,绝不锁残留 -1/上一手势旧坐标)。 */
|
|
if (mt->down && !mt->valid && mt->last_x >= 0 && mt->last_y >= 0) {
|
|
mt->down_x = mt->last_x;
|
|
mt->down_y = mt->last_y;
|
|
mt->valid = 1;
|
|
}
|
|
}
|
|
|
|
int mt_down(meow_touch *mt)
|
|
{
|
|
mt->down = 1;
|
|
mt->valid = 0;
|
|
/* 本次以「无坐标」起步:BTN_TOUCH 先于 ABS(本设备实测),down 前的 last 是上一
|
|
* 手势残留(-1/旧坐标),必须丢弃,只认 down 后到来的首个有效 ABS。 */
|
|
mt->last_x = -1;
|
|
mt->last_y = -1;
|
|
return 1;
|
|
}
|
|
|
|
int mt_up(meow_touch *mt, int *dx, int *dy)
|
|
{
|
|
int tx = mt->down_x, ty = mt->down_y;
|
|
int was_valid = mt->valid;
|
|
int ddx = mt->last_x - tx, ddy = mt->last_y - ty;
|
|
int adx = ddx < 0 ? -ddx : ddx, ady = ddy < 0 ? -ddy : ddy;
|
|
if (dx) *dx = ddx;
|
|
if (dy) *dy = ddy;
|
|
/* 复位手势态(down/valid);保留 down_x/y 供 mt_in 判定按钮命中,调用方下一手势
|
|
* 再由 mt_down 重置。 */
|
|
mt->down = 0;
|
|
mt->valid = 0;
|
|
if (!was_valid || tx < 0 || ty < 0) return 0; /* 从未锁到有效坐标:ghost/残留,丢本次 */
|
|
if (adx >= MEOW_TOUCH_SWIPE_THRESH || ady >= MEOW_TOUCH_SWIPE_THRESH) return 0; /* 滑动 */
|
|
return 1; /* 有效 tap */
|
|
}
|
|
|
|
int mt_in(meow_touch *mt, int x, int y, int w, int h)
|
|
{
|
|
return mt->down_x >= x && mt->down_x < x + w &&
|
|
mt->down_y >= y && mt->down_y < y + h;
|
|
}
|
|
|
|
/* 全局左缘返回判定(A-0):原点在左缘 + 向右位移≥MEOW_EDGE_SWIPE 且横向主导。
|
|
* 与 SDK meow_ui_input.c 的 EDGE_W/SWIPE_THRESH 同一语义,供设置页/应用列表复用。 */
|
|
int meow_edge_back(int down_x, int dx, int dy)
|
|
{
|
|
int ady = dy < 0 ? -dy : dy;
|
|
if (down_x >= 0 && down_x < MEOW_EDGE_W && dx >= MEOW_EDGE_SWIPE && ady < dx)
|
|
return 1;
|
|
return 0;
|
|
}
|