Fix incorrect UI scaling after changing monitors DPI under Wayland
Add a GHOST_kEventWindowDPIHintChanged event to ensure the UI is properly updated.
This commit is contained in:
parent
047d0e6c4a
commit
ef51825c06
|
@ -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. */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue