GDK-Win32/4.0: Enable HiDPI support for Windows

Desktop / GNOME / GTK - Chun-wei Fan [] - 4 November 2016 05:14 UTC

This enables HiDPI support for GTK+ on Windows, so that the fonts and window look better on HiDPI displays. Notes for the current work:

-The DPI awareness enabling can be disabled if and only if an application manifest is not embedded in the app to enable DPI awareness AND a user compatibility setting is not set to limit DPI awareness for the app, via the envvar GDK_WIN32_DISABLE_HIDPI. The app manifest/user setting for DPI awareness will always win against the envvar, and so the HiDPI items will be always setup in such scenarios, unless DPI awareness is disabled.

-Both automatic detection for the scaling factor and setting the scale factor using the GDK_SCALE envvar are supported, where the envvar takes precedence, which will therefore disable automatic scaling when resolution changes.

-We now default to a per-system DPI awareness model, which means that we do not handle WM_DPICHANGED, unless one sets the GDK_WIN32_PER_MONITOR_HIDPI envvar, where notes for it are in the following point.

-Automatic scaling during WM_DISPLAYCHANGE is handled (DPI setting change of current monitor) is now supported. WM_DPICHANGED is handled as well, except that the window positioning during the change of scaling still needs to be refined, a change in GDK itself may be required for this.

-I am unable to test the wintab items because I don't have such devices around.

6abd65c GDK-Win32/4.0: Enable HiDPI support for Windows
gdk/win32/gdkdevice-win32.c | 26 +-
gdk/win32/gdkdevice-wintab.c | 10 +-
gdk/win32/gdkdevicemanager-win32.c | 11 +-
gdk/win32/gdkdisplay-win32.c | 338 +++++++++++++++++++++
gdk/win32/gdkdisplay-win32.h | 47 +++
gdk/win32/gdkevents-win32.c | 191 ++++++++----
gdk/win32/gdkgeometry-win32.c | 33 ++-
gdk/win32/gdkmain-win32.c | 1 +
gdk/win32/gdkmonitor-win32.c | 18 +-
gdk/win32/gdkprivate-win32.h | 12 +-
gdk/win32/gdkscreen-win32.c | 72 +++--
gdk/win32/gdkwindow-win32.c | 575 +++++++++++++++++++++++-------------
gdk/win32/gdkwindow-win32.h | 15 +
13 files changed, 1027 insertions(+), 322 deletions(-)


  • Share