描述
Windows 多显示器环境且各显示器 DPI 缩放不同时(如主 125%、副 100%),每次重启 BongoCat,cat 的 scale 值会根据当前窗口所在显示器的缩放比重新计算,导致 scale 漂移。
如果同时开启了"保持在屏幕内",漂移会逐次累加:放大 → 移出屏幕 → clamp 到角落 → 再放大 → 无限循环。
复现步骤
- 主显示器 125% 缩放,副显示器 100% 缩放
- 开启"保持在屏幕内"
- 在主显示器上调好 cat scale(如 59)
- 关闭 BongoCat
- 重新启动
- scale 变为 74(59×1.25),窗口变大
- 保持在屏幕内触发,窗口被 clamp 到显示器边缘
- 再次重启 → scale 进一步放大,窗口被 clamp 到更角落
- 循环下去,scale 越来越大
如果不开启"保持在屏幕内",scale 只会漂移一次,不会逐次累加。
根因分析
问题出在 src/composables/useModel.ts 的 handleResize() 用 appWindow.size()(PhysicalSize,物理像素)计算 scale,而 src/pages/main/index.vue 的 watch(scale) 又用这个 scale 去 setSize(PhysicalSize),形成反馈循环。
不同 DPI 缩放下物理像素换算不一致,导致每次重启 scale 都偏移。
建议修复
src/composables/useModel.ts - handleResize()
用 innerSize()(逻辑像素)替代 size()(物理像素):
const logicalSize = await appWindow.innerSize()
catStore.window.scale = round((logicalSize.width / width) * 100)
环境
BongoCat v1.1.0
Windows 11
主显示器 2560×1440 @125%
副显示器 1018×1629 @100%
此 Issue 由 AI 辅助生成
描述
Windows 多显示器环境且各显示器 DPI 缩放不同时(如主 125%、副 100%),每次重启 BongoCat,cat 的 scale 值会根据当前窗口所在显示器的缩放比重新计算,导致 scale 漂移。
如果同时开启了"保持在屏幕内",漂移会逐次累加:放大 → 移出屏幕 → clamp 到角落 → 再放大 → 无限循环。
复现步骤
如果不开启"保持在屏幕内",scale 只会漂移一次,不会逐次累加。
根因分析
问题出在
src/composables/useModel.ts的handleResize()用appWindow.size()(PhysicalSize,物理像素)计算 scale,而src/pages/main/index.vue的watch(scale)又用这个 scale 去setSize(PhysicalSize),形成反馈循环。不同 DPI 缩放下物理像素换算不一致,导致每次重启 scale 都偏移。
建议修复
src/composables/useModel.ts- handleResize()用
innerSize()(逻辑像素)替代size()(物理像素):