🐛 fix(window): 修复 Windows 恢复窗口后字体模糊

- Windows 从任务栏恢复窗口时直接触发 WebView2 zoom reset
- restore 场景不再依赖 viewport ratio drift 判断
- 覆盖最大化和非最大化窗口的恢复修复路径
- 保留最大化窗口零动画修复,避免二次最大化抖动
- 补充窗口恢复策略和 App 自动修复路径测试
This commit is contained in:
Syngnat
2026-06-02 14:04:00 +08:00
parent c72542c92c
commit e4a8c53079
5 changed files with 31 additions and 8 deletions

View File

@@ -27,9 +27,11 @@ describe('windowStateUi', () => {
expect(shouldToggleMaximisedWindowForScaleFix('restore', true)).toBe(false);
});
it('only calls the backend WebView2 zoom reset after a real restore drift', () => {
it('calls the backend WebView2 zoom reset whenever a minimized window is restored', () => {
expect(shouldResetWebViewZoomForScaleFix('restore', true)).toBe(true);
expect(shouldResetWebViewZoomForScaleFix('restore', false)).toBe(false);
// 字体模糊/DirectWrite 度量缓存异常不一定表现为 viewport ratio drift
// 因此任务栏恢复场景必须直接走零动画 WebView2 zoom reset。
expect(shouldResetWebViewZoomForScaleFix('restore', false)).toBe(true);
expect(shouldResetWebViewZoomForScaleFix('activation', true)).toBe(false);
expect(shouldResetWebViewZoomForScaleFix('ratio-change', true)).toBe(false);
});

View File

@@ -22,8 +22,8 @@ export const shouldToggleMaximisedWindowForScaleFix = (
export const shouldResetWebViewZoomForScaleFix = (
reason: WindowScaleFixReason,
hasViewportScaleDrift: boolean,
): boolean => reason === 'restore' && hasViewportScaleDrift;
_hasViewportScaleDrift: boolean,
): boolean => reason === 'restore';
export const resolveWindowsScaleCheckDelayMs = (trigger: WindowsScaleCheckTrigger): number =>
trigger === 'resize' ? 240 : 0;