Skip to content

optimize: 外置键鼠链路健壮性重构 + 视角浮点游标 + 指针捕获/输入法自定义快捷键 - #1878

Merged
ShirosakiMio merged 3 commits into
mainfrom
optimize/external-mouse-input
Oct 6, 2026
Merged

ShirosakiMio merged 3 commits into
mainfrom
optimize/external-mouse-input

Conversation

@ShirosakiMio

Copy link
Copy Markdown
Collaborator

概述针对外置键鼠链路的三类问题(捕获不稳定、右键/中键误触与双发、部分设备视角过慢/过快/顿挫)做整体修复,并新增指针捕获与输入法的自定义快捷键。## 鼠标链路健壮性- 指针捕获看门狗:requestPointerCapture 失败是静默的且中途易丢失(IME、对话框、模拟器注入时序),现由看门狗周期检查 hasPointerCapture() 自动重试;实体鼠标模式仅在游戏内(CursorDisabled)维持捕获,菜单态回归系统指针。- 降级模式:捕获持续失败的设备(部分模拟器)自动降级为悬停坐标差值驱动视角,未捕获的鼠标 touch 点击补投按键,保证基本可用。- 鼠标键状态机去重:系统把右键/中键转换成 BACK/HOME 的 KeyEvent 与原始 MotionEvent 双路到达时只投递一次,根治右键双触发;BACK 事件按 InputDevice.getSources() 回查鼠标来源(部分 ROM 转换后丢失 source 标记)。- 卡键防护:光标模式切换/切后台/窗口失焦时对仍按下的鼠标键补发释放。## 视角精度(过慢/过快/顿挫)- 捕获事件的相对位移常为亚像素值,原 (int) 截断把小位移整批吞成 0(高报点率/高分辨率设备尤其严重),现以亚像素余数累积器保证总位移无损。- 视角坐标改浮点游标直推:sendCursorPos 本为 float,中间的 (int)(x * scaleFactor) 与 FORCE_RESOLUTION 换算截断全部消除(scaleFactor<1 时小位移不再整批丢失)。- 菜单光标与触摸板路径行为不变;浮点游标与外部绝对定位来源(触摸板/悬停)双向同步,切换不跳变。## 新增快捷键- 指针捕获切换键(默认 F8):直接切换 Android 指针捕获,已捕获则释放、未捕获则请求;切换后进入手动接管(自动策略维持该意图),游戏光标模式变化时回归自动。- 输入法切换键(默认 Shift+Enter,与原硬编码行为一致)。- 均在右侧菜单「鼠标」页自定义:主键为点击监听式绑定(BACK 取消),修饰键无/Shift/Ctrl/Alt 下拉;配置随 MenuSetting JSON 持久化,旧配置文件缺省落到与旧行为一致的默认值。## 测试- MuMu(Android 15 x86_64)实测捕获恢复、实体鼠标模式、快捷键绑定流程。

- 指针捕获看门狗:静默丢失自动重试;实体鼠标模式仅游戏内维持捕获,菜单态用系统指针
- 捕获持续失败时降级为悬停差值转视角,未捕获鼠标的 touch 点击补投按键
- 鼠标键状态机去重,根治右键/中键经系统转换 BACK/HOME 与原始事件双触发的问题;BACK 按设备能力回查鼠标来源
- 右菜单鼠标页新增指针捕获切换键与输入法切换键设置(主键绑定+修饰键选择),默认 F8 与 Shift+Enter,随 MenuSetting 持久化
- 自定义快捷键此前只在抬起时匹配:按下被转发给游戏而抬起被吞,游戏侧收不到释放会持续
  按住(F8 等非 ENTER 快捷键即可触发);改为匹配后按下与抬起一律不再下发
- 按键监听态原先只有成功捕获按键才清除:点开设置行后不按键、直接收回右菜单或切到后台,
  监听会一直吞掉所有按键(含菜单视图隐藏后用于唤回菜单的音量键),并把下一个按下的键
  误绑定为快捷键;改为右菜单收起、菜单视图隐藏、页面暂停三处统一放弃监听
@ShirosakiMio
ShirosakiMio force-pushed the optimize/external-mouse-input branch from 79beffc to 4b0bc81 Compare October 6, 2026 04:34
@ShirosakiMio
ShirosakiMio merged commit 5e76d74 into main Oct 6, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant