diff options
author | Andreas Kling <kling@serenityos.org> | 2023-05-14 18:53:29 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2023-05-15 10:04:29 +0200 |
commit | def37e65f38d51cd8d7f4f63a9075c7921280f6d (patch) | |
tree | befe27a4ac9364f8d581931038080e4d3a8b84b6 /Userland/Libraries/LibWebView | |
parent | 68271c4fcea40aefb263ce4d5b195742d3a26ef4 (diff) | |
download | serenity-def37e65f38d51cd8d7f4f63a9075c7921280f6d.zip |
Ladybird+LibWebView: Remember the size of the last paint
This will allow us to change the size of the backing store bitmap
without conflating the size of the bitmap and the size of the paint.
Diffstat (limited to 'Userland/Libraries/LibWebView')
4 files changed, 7 insertions, 5 deletions
diff --git a/Userland/Libraries/LibWebView/OutOfProcessWebView.cpp b/Userland/Libraries/LibWebView/OutOfProcessWebView.cpp index b976135a50..d503adf621 100644 --- a/Userland/Libraries/LibWebView/OutOfProcessWebView.cpp +++ b/Userland/Libraries/LibWebView/OutOfProcessWebView.cpp @@ -205,11 +205,12 @@ void OutOfProcessWebView::screen_rects_change_event(GUI::ScreenRectsChangeEvent& client().async_update_screen_rects(event.rects(), event.main_screen_index()); } -void OutOfProcessWebView::notify_server_did_paint(Badge<WebContentClient>, i32 bitmap_id) +void OutOfProcessWebView::notify_server_did_paint(Badge<WebContentClient>, i32 bitmap_id, Gfx::IntSize size) { if (m_client_state.back_bitmap.id == bitmap_id) { m_client_state.has_usable_bitmap = true; m_client_state.back_bitmap.pending_paints--; + m_client_state.back_bitmap.last_painted_size = size; swap(m_client_state.back_bitmap, m_client_state.front_bitmap); // We don't need the backup bitmap anymore, so drop it. m_backup_bitmap = nullptr; diff --git a/Userland/Libraries/LibWebView/OutOfProcessWebView.h b/Userland/Libraries/LibWebView/OutOfProcessWebView.h index 1f3dd23676..ca4baa89b7 100644 --- a/Userland/Libraries/LibWebView/OutOfProcessWebView.h +++ b/Userland/Libraries/LibWebView/OutOfProcessWebView.h @@ -126,7 +126,7 @@ private: virtual void create_client(EnableCallgrindProfiling = EnableCallgrindProfiling::No) override; virtual void update_zoom() override; virtual void notify_server_did_layout(Badge<WebContentClient>, Gfx::IntSize content_size) override; - virtual void notify_server_did_paint(Badge<WebContentClient>, i32 bitmap_id) override; + virtual void notify_server_did_paint(Badge<WebContentClient>, i32 bitmap_id, Gfx::IntSize) override; virtual void notify_server_did_invalidate_content_rect(Badge<WebContentClient>, Gfx::IntRect const&) override; virtual void notify_server_did_change_selection(Badge<WebContentClient>) override; virtual void notify_server_did_request_cursor_change(Badge<WebContentClient>, Gfx::StandardCursor cursor) override; diff --git a/Userland/Libraries/LibWebView/ViewImplementation.h b/Userland/Libraries/LibWebView/ViewImplementation.h index 872bf77eb1..9efe4d1ffb 100644 --- a/Userland/Libraries/LibWebView/ViewImplementation.h +++ b/Userland/Libraries/LibWebView/ViewImplementation.h @@ -71,7 +71,7 @@ public: void run_javascript(StringView); virtual void notify_server_did_layout(Badge<WebContentClient>, Gfx::IntSize content_size) = 0; - virtual void notify_server_did_paint(Badge<WebContentClient>, i32 bitmap_id) = 0; + virtual void notify_server_did_paint(Badge<WebContentClient>, i32 bitmap_id, Gfx::IntSize) = 0; virtual void notify_server_did_invalidate_content_rect(Badge<WebContentClient>, Gfx::IntRect const&) = 0; virtual void notify_server_did_change_selection(Badge<WebContentClient>) = 0; virtual void notify_server_did_request_cursor_change(Badge<WebContentClient>, Gfx::StandardCursor cursor) = 0; @@ -142,6 +142,7 @@ protected: struct SharedBitmap { i32 id { -1 }; i32 pending_paints { 0 }; + Gfx::IntSize last_painted_size; RefPtr<Gfx::Bitmap> bitmap; }; diff --git a/Userland/Libraries/LibWebView/WebContentClient.cpp b/Userland/Libraries/LibWebView/WebContentClient.cpp index 5e53927197..01238a2357 100644 --- a/Userland/Libraries/LibWebView/WebContentClient.cpp +++ b/Userland/Libraries/LibWebView/WebContentClient.cpp @@ -23,9 +23,9 @@ void WebContentClient::die() on_web_content_process_crash(); } -void WebContentClient::did_paint(Gfx::IntRect const&, i32 bitmap_id) +void WebContentClient::did_paint(Gfx::IntRect const& rect, i32 bitmap_id) { - m_view.notify_server_did_paint({}, bitmap_id); + m_view.notify_server_did_paint({}, bitmap_id, rect.size()); } void WebContentClient::did_finish_loading(AK::URL const& url) |