Skip to content

Bug: 多显示器不同 DPI 缩放比下,重启后 cat scale 持续漂移 #972

@Entity303-404

Description

@Entity303-404

描述

Windows 多显示器环境且各显示器 DPI 缩放不同时(如主 125%、副 100%),每次重启 BongoCat,cat 的 scale 值会根据当前窗口所在显示器的缩放比重新计算,导致 scale 漂移。

如果同时开启了"保持在屏幕内",漂移会逐次累加:放大 → 移出屏幕 → clamp 到角落 → 再放大 → 无限循环。

复现步骤

  1. 主显示器 125% 缩放,副显示器 100% 缩放
  2. 开启"保持在屏幕内"
  3. 在主显示器上调好 cat scale(如 59)
  4. 关闭 BongoCat
  5. 重新启动
  6. scale 变为 74(59×1.25),窗口变大
  7. 保持在屏幕内触发,窗口被 clamp 到显示器边缘
  8. 再次重启 → scale 进一步放大,窗口被 clamp 到更角落
  9. 循环下去,scale 越来越大

如果不开启"保持在屏幕内",scale 只会漂移一次,不会逐次累加。

根因分析

问题出在 src/composables/useModel.tshandleResize()appWindow.size()(PhysicalSize,物理像素)计算 scale,而 src/pages/main/index.vuewatch(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 辅助生成

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions