diff options
Diffstat (limited to 'intern')
-rw-r--r-- | intern/ghost/intern/GHOST_SystemWayland.cpp | 2 | ||||
-rw-r--r-- | intern/ghost/intern/GHOST_WindowWayland.cpp | 9 |
2 files changed, 9 insertions, 2 deletions
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; |