Skip to content

Conversation

Copy link
Contributor

Copilot AI commented Dec 28, 2025

Tkinter applications on Windows appear blurry on high-DPI displays (150%/200% scaling) because Windows applies bitmap scaling to DPI-unaware applications.

Changes

  • Runtime DPI awareness: Added enable_dpi_awareness() in __main__.py called before Tk initialization

    • Tries SetProcessDpiAwarenessContext(PER_MONITOR_AWARE_V2) (Win10 1703+)
    • Falls back to SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE) (Win8.1+)
    • Falls back to SetProcessDPIAware() (Vista+)
  • Build-time manifest: Created wow_sync.manifest declaring dpiAwareness: PerMonitorV2 for PyInstaller executable

  • Build configuration: Updated build.py to embed manifest on Windows builds via --manifest flag

def enable_dpi_awareness():
    """Enable DPI awareness on Windows to prevent blurry UI."""
    if sys.platform == 'win32':
        try:
            import ctypes
            DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2 = ctypes.c_void_p(-4)
            PROCESS_PER_MONITOR_DPI_AWARE = 2
            
            try:
                ctypes.windll.user32.SetProcessDpiAwarenessContext(
                    DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2
                )
            except (AttributeError, OSError):
                # ... fallback chain

Windows-only changes. No impact on macOS/Linux.

Original prompt

can we improve the dpi scaling on windows, its kind of blurry


✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

Copilot AI and others added 2 commits December 28, 2025 19:43
Co-authored-by: bryfur <7673964+bryfur@users.noreply.github.com>
…tant

Co-authored-by: bryfur <7673964+bryfur@users.noreply.github.com>
Copilot AI changed the title [WIP] Improve DPI scaling for better clarity on Windows Fix blurry UI on Windows high-DPI displays Dec 28, 2025
Copilot AI requested a review from bryfur December 28, 2025 19:46
@bryfur bryfur marked this pull request as ready for review December 28, 2025 19:47
Copilot AI review requested due to automatic review settings December 28, 2025 19:47
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes blurry UI rendering on Windows high-DPI displays (150%/200% scaling) by implementing DPI awareness at both runtime and build time. The solution uses a defense-in-depth approach: runtime code handles execution from source, while the manifest handles built executables.

Key Changes:

  • Added runtime DPI awareness detection with fallback chain supporting Windows Vista through Windows 10 1703+
  • Created application manifest declaring PerMonitorV2 DPI awareness for built executables
  • Integrated manifest embedding into the Windows build process via PyInstaller

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.

File Description
wow_sync/main.py Adds enable_dpi_awareness() function with cascading fallbacks for DPI awareness APIs, called before Tk initialization
wow_sync.manifest Defines DPI awareness settings (both legacy dpiAware and modern PerMonitorV2) for Windows executable
build.py Integrates manifest into Windows builds using PyInstaller's --manifest flag

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@bryfur bryfur merged commit bdb3629 into master Dec 28, 2025
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants