From 35d8504263374fa17a1c96088c56703e21067ba3 Mon Sep 17 00:00:00 2001 From: ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> Date: Wed, 25 Oct 2023 13:02:34 +0200 Subject: Fix "Wayland: Overlay windows look blurred" - cont'd (#808) --- src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'src/drivers') diff --git a/src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx b/src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx index da73319d8..6afc9588f 100644 --- a/src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx +++ b/src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx @@ -198,7 +198,11 @@ void Fl_Wayland_Window_Driver::flush_overlay() Fl_Wayland_Graphics_Driver::offscreen_buffer(other_xid->offscreen()); struct wld_window *xid = fl_wl_xid(pWindow); struct Fl_Wayland_Graphics_Driver::wld_buffer *wbuffer = xid->buffer; - memcpy(wbuffer->draw_buffer.buffer, buffer->buffer, wbuffer->draw_buffer.data_size); + if (wbuffer->draw_buffer.data_size != buffer->data_size) { + fl_copy_offscreen(0, 0, oWindow->w(), oWindow->h(), other_xid->offscreen(), 0, 0); + } else { + memcpy(wbuffer->draw_buffer.buffer, buffer->buffer, wbuffer->draw_buffer.data_size); + } } if (overlay() == oWindow) oWindow->draw_overlay(); } @@ -1846,6 +1850,9 @@ void Fl_Wayland_Window_Driver::resize(int X, int Y, int W, int H) { if (shown()) { float f = Fl::screen_scale(pWindow->screen_num()); if (is_a_resize) { + if (pWindow->as_overlay_window() && other_xid) { + destroy_double_buffer(); + } if (fl_win->kind == DECORATED) { // a decorated window if (fl_win->buffer) { Fl_Wayland_Graphics_Driver::buffer_release(fl_win); -- cgit v1.2.3