[Bf-blender-cvs] [ef51825c062] master: Fix incorrect UI scaling after changing monitors DPI under Wayland

Campbell Barton noreply at git.blender.org
Fri Aug 26 04:48:40 CEST 2022


Commit: ef51825c06242c12892337f87c82299c2996fa50
Author: Campbell Barton
Date:   Fri Aug 26 11:46:28 2022 +1000
Branches: master
https://developer.blender.org/rBef51825c06242c12892337f87c82299c2996fa50

Fix incorrect UI scaling after changing monitors DPI under Wayland

Add a GHOST_kEventWindowDPIHintChanged event to ensure the UI is
properly updated.

===================================================================

M	intern/ghost/intern/GHOST_SystemWayland.cpp
M	intern/ghost/intern/GHOST_WindowWayland.cpp

===================================================================

diff --git a/intern/ghost/intern/GHOST_SystemWayland.cpp b/intern/ghost/intern/GHOST_SystemWayland.cpp
index 57b1a9bb434..13357a3d31a 100644
--- a/intern/ghost/intern/GHOST_SystemWayland.cpp
+++ b/intern/ghost/intern/GHOST_SystemWayland.cpp
@@ -2727,8 +2727,6 @@ static void output_handle_scale(void *data, struct wl_output * /*wl_output*/, co
     for (GHOST_IWindow *iwin : window_manager->getWindows()) {
       GHOST_WindowWayland *win = static_cast<GHOST_WindowWayland *>(iwin);
       win->outputs_changed_update_scale();
-      /* TODO(@campbellbarton): support refreshing the UI when the DPI changes.
-       * There are glitches when resizing the monitor which would be nice to solve. */
     }
   }
 }
diff --git a/intern/ghost/intern/GHOST_WindowWayland.cpp b/intern/ghost/intern/GHOST_WindowWayland.cpp
index e303bd5b6aa..d06ec872eca 100644
--- a/intern/ghost/intern/GHOST_WindowWayland.cpp
+++ b/intern/ghost/intern/GHOST_WindowWayland.cpp
@@ -935,6 +935,9 @@ GHOST_TSuccess GHOST_WindowWayland::notify_size()
  * Functionality only used for the WAYLAND implementation.
  * \{ */
 
+/**
+ * Return true when the windows scale or DPI changes.
+ */
 bool GHOST_WindowWayland::outputs_changed_update_scale()
 {
   uint32_t dpi_next;
@@ -963,6 +966,12 @@ bool GHOST_WindowWayland::outputs_changed_update_scale()
      * use a multiplier for the default DPI as workaround. */
     win->dpi = dpi_next;
     changed = true;
+
+    /* As this is a low-level function, we might want adding this event to be optional,
+     * always add the event unless it causes issues. */
+    GHOST_System *system = (GHOST_System *)GHOST_ISystem::getSystem();
+    system->pushEvent(
+        new GHOST_Event(system->getMilliSeconds(), GHOST_kEventWindowDPIHintChanged, this));
   }
 
   return changed;



More information about the Bf-blender-cvs mailing list