[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