Skip to content

fix: 提供 Niri 灵动岛动态居中脚本 - #346

Open
txdycyy wants to merge 1 commit into
SPlayer-Dev:devfrom
txdycyy:fix/dynamic-island-centered-resize
Open

txdycyy wants to merge 1 commit into
SPlayer-Dev:devfrom
txdycyy:fix/dynamic-island-centered-resize

Conversation

@txdycyy

@txdycyy txdycyy commented Oct 3, 2026

Copy link
Copy Markdown

改动类型

  • 缺陷修复(fix)
  • 文档(docs)

是否包含破坏性变更

  • 否

改动说明

原生 Wayland 下,灵动岛随歌词改变窗口宽度时,Electron 无法自行设置窗口的全局位置。在 Niri 中可复现左边缘不动、窗口中心随宽度偏移:窗口宽度从 255 变为 711 时,中心横向移动了 228 个逻辑像素。

新增可选的 scripts/niri-island-center.mjs,通过 Niri IPC 订阅窗口事件,将灵动岛保持在所属显示器的水平中心,同时保留宽高、纵向位置和原有鼠标区域。只匹配 SPlayer 的 Dynamic Island 浮动窗口;普通窗口和其他应用不受影响。无需额外 npm 依赖,也不使用定时轮询或外部命令。

Niri 26.04 会为超过 10 个逻辑像素的浮动窗口移动添加动画,因此将修正拆为同一连接上的连续小步移动,避免换行时叠加额外的移动动画。重入事件会合并处理;缺失布局信息时跳过,连接或协议错误时退出并释放资源。

补充中英文安装、登录启动、卸载和兼容性说明,并提供可单独运行的回归测试。本修复由 Niri 用户主动启用,不改播放器默认行为,不改 Windows、macOS 或 KDE 的窗口实现。

关联 Issue

Related to #75、#223。

#223 包含 Linux 窗口形状处理和 KWin 居中方案;本 PR 补充 Niri 下的水平居中,不替代其实现,也不解决 #75 中的置顶或鼠标穿透问题。

测试情况

  • 实机:Linux / Niri 26.04 / Electron 43.2.0 / 原生 Wayland,2560×1440、缩放 1。
  • 在实际播放中,弹跳和平滑模式各采样 120 帧,同时记录窗口几何与画面中灵动岛的位置;240 帧中最大可见中心误差为 0.5 像素。此数据是采样结果,不代表逐帧覆盖所有显示配置。
  • 独立脚本测试:9 项通过,覆盖长短歌词、奇数宽度、多屏负坐标、分数缩放、边框偏移、窗口过滤、旧版缺失字段、快速事件合并、连接错误和资源释放。多屏及缩放为模拟 IPC 测试,尚未实机覆盖。
  • pnpm test:35 项 Node 测试、27 个文件中的 195 项 Vitest 测试通过。
  • pnpm typecheck、pnpm lint、全仓 Prettier 检查及 git diff --check 通过;lint 有 player.spec.ts 中既有的 2 条组件数量警告,无错误。
  • 本机已部署并验证当前会话居中,配置了下次登录启动;未通过注销重新登录测试启动项。
  • 已检查播放器前后内存采样;运行场景和歌曲不同,不据此声称内存改善。独立辅助进程单次 RSS 约 50 MiB。

兼容性边界:10 像素动画阈值属于 Niri 实现细节,已在 26.04 验证,未来升级需复验。横向拖动会重新居中,纵向拖动保留。Windows/macOS 未进行实机回归,本 PR 的辅助脚本只由 Niri 用户显式运行。

自查清单

  • 本 PR 只包含一个主要修复,没有夹带无关改动
  • AI 生成的代码已审阅,并完成上述本地自动化和实机测试
  • 提交文件已执行 Prettier 格式化,全仓格式检查、typecheck、lint 通过
  • 不涉及原生模块,无需 build:native,未手写 native 类型声明
  • 向 dev 分支提交

This branch has not been deployed

No deployments
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