From cdf87d22044ccb2b87191d73827bc8f2c6f6a51a Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Tue, 29 Dec 2020 00:44:58 +0100 Subject: [PATCH] LibWeb: Fill OOPWV with the palette base color until we have pixels We were painting unfinished pixels while waiting for the WebContent process to render the page. This caused OOPWV to flicker black sometimes, which looked pretty bad. This way we still flicker, but at least we flicker with the correct palette color. :^) --- Libraries/LibWeb/OutOfProcessWebView.cpp | 11 ++++++++++- Libraries/LibWeb/OutOfProcessWebView.h | 2 ++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/Libraries/LibWeb/OutOfProcessWebView.cpp b/Libraries/LibWeb/OutOfProcessWebView.cpp index 7044a2c63c..50c71de703 100644 --- a/Libraries/LibWeb/OutOfProcessWebView.cpp +++ b/Libraries/LibWeb/OutOfProcessWebView.cpp @@ -31,6 +31,7 @@ #include #include #include +#include #include REGISTER_WIDGET(Web, OutOfProcessWebView) @@ -76,8 +77,14 @@ void OutOfProcessWebView::paint_event(GUI::PaintEvent& event) return; GUI::Painter painter(*this); - painter.add_clip_rect(frame_inner_rect()); painter.add_clip_rect(event.rect()); + + if (!m_has_usable_bitmap) { + painter.fill_rect(frame_inner_rect(), palette().base()); + return; + } + + painter.add_clip_rect(frame_inner_rect()); painter.translate(frame_thickness(), frame_thickness()); ASSERT(m_front_bitmap); @@ -92,6 +99,7 @@ void OutOfProcessWebView::resize_event(GUI::ResizeEvent& event) m_front_bitmap = nullptr; m_back_bitmap = nullptr; + m_has_usable_bitmap = false; if (available_size().is_empty()) return; @@ -143,6 +151,7 @@ void OutOfProcessWebView::theme_change_event(GUI::ThemeChangeEvent& event) void OutOfProcessWebView::notify_server_did_paint(Badge, i32 shbuf_id) { if (m_back_bitmap->shbuf_id() == shbuf_id) { + m_has_usable_bitmap = true; swap(m_back_bitmap, m_front_bitmap); update(); } diff --git a/Libraries/LibWeb/OutOfProcessWebView.h b/Libraries/LibWeb/OutOfProcessWebView.h index 5779d6f6da..a742a01af8 100644 --- a/Libraries/LibWeb/OutOfProcessWebView.h +++ b/Libraries/LibWeb/OutOfProcessWebView.h @@ -89,6 +89,8 @@ private: RefPtr m_client; RefPtr m_front_bitmap; RefPtr m_back_bitmap; + + bool m_has_usable_bitmap { false }; }; }