From 3af48be58a4343848cff64f2827767440dcfcfec Mon Sep 17 00:00:00 2001 From: Robbert van der Helm Date: Sun, 7 May 2023 12:46:06 +0200 Subject: [PATCH] Revert SWP_NOCOPYBITS removal from 9fd6603ce3f This was added on the request of Aurora FM's developer because they use thousands of child windows for rendering, but this causes unnecessary flickering in some situations and it should no longer be as needed now that `fix_local_coordinates()` is only called once when moving windows around. --- CHANGELOG.md | 5 +++++ src/wine-host/editor.cpp | 6 +++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d1e1955..f72bad43 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,11 @@ Versioning](https://semver.org/spec/v2.0.0.html). to be released before informing Wine about the window's new screen coordinates. This prevents constant flickering when dragging plugin windows around with some plugin and window manager combinations. +- Since the above change limits the number of times a plugin GUI potentially has + to redraw when dragging the window around to once, the workaround added to + yabridge 5.0.2 for _Audio Nebula Aurora FM_ implementing drawing in a very + suboptimal way has be reverted. This removes flickering when resizing for a + lot of plugin GUIs again. - Yabridge now preemptively unsets the `WAYLAND_DISPLAY` environment variable when launching Wine. Upstream Wine currently does not yet have a Wayland driver, but future versions may. When that happens yabridge's X11 window diff --git a/src/wine-host/editor.cpp b/src/wine-host/editor.cpp index 5120d8fc..9b152e7f 100644 --- a/src/wine-host/editor.cpp +++ b/src/wine-host/editor.cpp @@ -448,7 +448,7 @@ void Editor::resize(uint16_t width, uint16_t height) { }); SetWindowPos(win32_window_.handle_, nullptr, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOREDRAW | SWP_NOACTIVATE | - SWP_NOOWNERZORDER | SWP_DEFERERASE); + SWP_NOOWNERZORDER | SWP_DEFERERASE | SWP_NOCOPYBITS); // Make sure that after the resize the screen coordinates always match // up properly. Without this Soundtoys Crystallizer might appear choppy @@ -1205,7 +1205,7 @@ LRESULT CALLBACK window_proc(HWND handle, handle, GWLP_USERDATA, static_cast(reinterpret_cast(editor))); } break; - // Setting `SWP_DEFERERASE` somewhat reduces flickering on + // Setting `SWP_NOCOPYBITS` somewhat reduces flickering on // `fix_local_coordinates()` calls with plugins that don't do double // buffering since it speeds up the redrawing process. case WM_WINDOWPOSCHANGING: { @@ -1216,7 +1216,7 @@ LRESULT CALLBACK window_proc(HWND handle, } WINDOWPOS* info = reinterpret_cast(lParam); - info->flags |= SWP_DEFERERASE; + info->flags |= SWP_DEFERERASE | SWP_NOCOPYBITS; } break; case WM_TIMER: { auto editor = reinterpret_cast(