feat(desktop): add UI scale setting to appearance settings (salvage #60249) - #60457
Merged
Conversation
This was referenced Jul 7, 2026
1 task
This was referenced Jul 28, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds a "UI Scale" row to the desktop app's Settings > Appearance so the whole interface can be resized without knowing the Ctrl/Cmd zoom shortcuts — an accessibility win for low-vision users.
Salvage of #60249 by @Adolanium onto current main, with his authorship preserved via cherry-pick. Fixes #60248.
Changes
apps/desktop/electron/zoom.cjs: pure zoom helpers (clampZoomLevel, percent ↔ zoom-level conversion, storage key) extracted frommain.cjsso the menu, shortcuts, and settings UI share one clamped scale.apps/desktop/electron/main.cjs:hermes:zoom:get/hermes:zoom:set-percentIPC endpoints (scoped to the asking window) + ahermes:zoom:changedbroadcast fromsetAndPersistZoomLevelso an open settings dialog live-follows keyboard zoom.apps/desktop/electron/preload.cjs+src/global.d.ts:hermesDesktop.zoombridge.apps/desktop/src/store/zoom.ts: nanostore mirroring the current percent.apps/desktop/src/app/settings/appearance-settings.tsx: UI Scale segmented control (90–175% presets) between Theme and Window Translucency. Values between presets (shortcut-only) highlight nothing; the description always shows the exact percent.uiScaleTitle/uiScaleDescin en, ja, zh, zh-hant + types.electron/zoom.test.cjs(7 tests), registered intest:desktop:platforms.apps/desktop/pr-assets/.Validation
node --test electron/zoom.test.cjsnpm run typecheck(apps/desktop)Related PRs
Duplicate cluster addressed by this salvage: #40868 (@liuhao1024, Jun 6), #47034 (@dongseok0, Jun 16), #49902 (@namredips, Jun 21) each proposed an Appearance-settings scale control earlier — credit to all three for identifying the gap; this implementation was chosen as the cleanest (single main-process-owned scale, live shortcut sync, unit tests).
Infographic