From 5db720dc597f172872b128f74fa70eea544ce3d1 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sat, 12 Jan 2019 03:13:42 +0100 Subject: [PATCH] Don't repaint the root layer in invalidated areas with windows over them. --- Widgets/WindowManager.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Widgets/WindowManager.cpp b/Widgets/WindowManager.cpp index a3eec92928..90e8fa2a0b 100644 --- a/Widgets/WindowManager.cpp +++ b/Widgets/WindowManager.cpp @@ -245,14 +245,23 @@ void WindowManager::processMouseEvent(MouseEvent& event) void WindowManager::compose() { printf("[WM] recompose_count: %u\n", ++m_recompose_count); - auto& framebuffer = FrameBuffer::the(); + auto any_window_contains_rect = [this] (const Rect& r) { + for (auto* window = m_windows_in_order.head(); window; window = window->next()) { + if (outerRectForWindow(window->rect()).contains(r)) + return true; + } + return false; + }; { for (auto& r : m_invalidated_rects) { + if (any_window_contains_rect(r)) + continue; dbgprintf("Repaint root %d,%d %dx%d\n", r.x(), r.y(), r.width(), r.height()); PaintEvent event(r); m_rootWidget->paintEvent(event); } } + auto& framebuffer = FrameBuffer::the(); for (auto* window = m_windows_in_order.head(); window; window = window->next()) { if (!window->backing()) continue;