Skip to content

新增投屏窗口内的蓝牙绝对坐标鼠标控制(免 F9) - #82

Open
Moheng-S wants to merge 2 commits into
RayrenSX:mainfrom
Moheng-S:feat/absolute-bluetooth-window-mouse
Open

Moheng-S wants to merge 2 commits into
RayrenSX:mainfrom
Moheng-S:feat/absolute-bluetooth-window-mouse

Conversation

@Moheng-S

@Moheng-S Moheng-S commented Nov 8, 2026

Copy link
Copy Markdown

改动说明

  • 新增可选的蓝牙绝对坐标鼠标模式,支持主预览和独立投屏窗口。开启后,鼠标移入画面即可点击、拖动和滚动,移出后可继续操作 Windows,无需按 F9 切换。
  • 根据实际视频区域计算坐标,处理黑边和预览旋转。拖出画面或窗口失焦时,在最后一个有效位置释放按键。
  • 在启动蓝牙反控时选择相对或绝对坐标的 HID 报告描述符。如果 iPad 缓存了旧描述符,切换模式后可能需要在系统蓝牙设置中重新配对。
  • 增加九点定位探针,以及首次点击坐标、按键顺序、拖出释放、重新进入和暂停的回归测试。用户指南与更新记录也补充了对应说明。

验证情况

  • Windows 应用 Release 发布构建、五语本地化校验及蓝牙专项回归(--bluetooth-input-toggle)均已通过。
  • 在 iPad8,1 上试过九点定位和集成后的绝对坐标点击,初步使用未发现明显问题。具体 iPadOS 构建号和其他机型的兼容性待补充。
  • 完整仓库 Release 构建和交互桌面测试待补充。此前桌面测试进程未能取得前台焦点。

实现说明

  • 窗口输入。 NativePreviewHost 和 NativePreviewWindow 将主预览和独立窗口内的鼠标事件交给 MainWindow.HandleWindowBluetoothPointer。该方法使用 PreviewCoordinateMapper.Normalize 按实际视频矩形计算归一化坐标,再应用预览旋转。黑边和画面外的输入会触发离开处理。
  • HID 会话。 MainViewModel 在启动蓝牙反控时读取模式设置,由 BluetoothHidMouseService 发布对应的 Report Map。绝对模式沿用鼠标 Report ID 2 的六字节格式,将 X/Y 声明为 0–32767 的 16 位绝对坐标。滚轮仍使用相对量。
  • 点击与释放。 按下和抬起分别携带事件发生时的坐标,移动报告可以合并为最新位置,按键变化则按顺序发送。离开画面或失焦时会使旧的移动失效,并在最后一个有效坐标发送释放报告。暂停时也保留坐标,避免释放动作把指针拉到左上角。

AI 辅助声明

本 PR 的实现代码、回归测试和说明文档由 OpenAI 的 ChatGPT Codex 辅助编写。功能需求和 iPad 真机试用反馈由提交者提供。上面的「验证情况」列出了已执行的检查和待验证项。

Anchor the pointer with absolute HID reports and send gestures through a separate relative mouse report. Refresh the absolute pointer after release and preserve normal Windows input across preview handoff.

Cover consecutive drags, release on exit, missed button-up recovery and legacy F9 behavior in the Bluetooth regression suite.
@Moheng-S
Moheng-S marked this pull request as ready for review November 8, 2026 13:34
@Moheng-S
Moheng-S requested a review from RayrenSX as a code owner November 8, 2026 13:34
@RayrenSX

RayrenSX commented Nov 8, 2026

Copy link
Copy Markdown
Owner

首先,非常感谢您对本项目的贡献!

两个月前,在开发蓝牙反控功能时,我也曾尝试实现类似功能。不过,经过一轮简短的内部测试后,发现兼容性问题较多,因此暂时搁置了这项工作。

您提到此次实现有 AI 辅助参与,结合之前遇到的兼容性问题,我需要花一些时间仔细审查代码并进行验证,因此审核周期可能会稍长一些。感谢您的耐心与理解!

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.

2 participants