Repository navigation
Ask Win32 for the DPI, and give the app icons their alpha back - #2
Conversation
The Per-Monitor-V2 switches WinForms needs are in App.config, and the release ships one executable with no ConfigurO.exe.config beside it. Run that way, Control.DeviceDpi answers 96 everywhere, so the interface laid out at 100% and drew two-thirds size on a scaled display -- crisp, because the manifest still makes the process PMv2 aware, but small enough to read as an older build. Present since 1.0. Scale now comes from GetDpiForWindow, with GetDpiForMonitor and GetDeviceCaps behind it. Verified on the bare exe: 96/1.00 before, 144/1.50 after. 80 of the 139 icons were logos flattened onto opaque black -- invisible on a black page, a hard black square on a #232532 card. Alpha is restored by flooding inward from the border, so only black connected to the outside goes and interior dark survives; the antialiased fringe is un-premultiplied so edges stay smooth. No black-matted icon is left. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
ConfigurO/feed/icons/sumatrapdf.png
Line 1 in ce0e841
The modified epic.png, sublimemerge.png, and sumatrapdf.png grow from 20,983/30,846/28,838 bytes to 79,030/57,177/85,072 bytes respectively, despite docs/FEED.md:62-65 requiring every feed icon to remain under 50 KB. Because every first load or forced refresh downloads the complete icons.zip, these oversized assets permanently increase catalogue transfer and cache costs; preserve the restored alpha while optimizing these three PNGs back below the stated limit.
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Two user-visible fixes, both long-standing rather than new.
The interface has rendered at 1.0 scale since 1.0
The Per-Monitor-V2 switches WinForms needs live in
App.config. The release ships one executable with noConfigurO.exe.configbeside it — which is how every user runs it — soControl.DeviceDpianswers 96 on every machine and the whole layout is computed at 100%.Measured, same binary, only the
.configremoved:.configdpi=144 scale=1.50dpi=96 scale=1.00It was never blurry — the manifest still makes the process PMv2-aware, and the window measured at exactly 1340×860 physical with
GetDpiForWindowreturning 144. It was simply drawn two-thirds size on a 150% display, which reads as an older, denser build rather than as a bug.NocturneScale.DpiOfnow asks Win32:GetDpiForWindow, falling back toGetDpiForMonitor(8.1) thenGetDeviceCaps. The shell already does its own layout and handlesWM_DPICHANGEDitself, so it only ever needed the number. No config file required, single-exe distribution unchanged.Verified on the bare exe with nothing beside it:
dpi=144 scale=1.50, physical window 2582 × 1550.80 of 139 app icons were logos in a black box
Flattened onto opaque black with no alpha channel. Invisible against a black page; a hard black square against the app's
#232532cards.Rather than colour-keying black — which punches holes in any dark part of a mark — alpha is restored by flooding inward from the border, so only black actually connected to the outside is removed. Opera keeps its counter, 7-Zip keeps its grey field, Vivaldi keeps its red tile. The one-pixel fringe where each logo was antialiased against the black is un-premultiplied, so edges stay smooth instead of leaving a dark halo.
feed/icons.ziprebuilt the same waytools/build_feed.pypacks it — flat, deflated, 139 files.Checks
TreatWarningsAsErrorson..config).Not verified: in-app icon rendering —
C:\ProgramData\ConfigurO\Feed\is written by the elevated app and can't be swapped from a normal session. The feed pullsicons.zipfrommain, so Refresh links picks it up once this merges.version.txtuntouched; cutting 3.3 is a separate step.