mirror of
https://github.com/RGBCube/serenity
synced 2025-05-18 21:45:08 +00:00
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.
This commit is contained in:
parent
68271c4fce
commit
def37e65f3
7 changed files with 11 additions and 8 deletions
|
@ -680,11 +680,12 @@ void WebContentView::handle_web_content_process_crash()
|
|||
load_html(builder.to_deprecated_string(), m_url);
|
||||
}
|
||||
|
||||
void WebContentView::notify_server_did_paint(Badge<WebContentClient>, i32 bitmap_id)
|
||||
void WebContentView::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;
|
||||
|
|
|
@ -119,7 +119,7 @@ public:
|
|||
void update_palette(PaletteMode = PaletteMode::Default);
|
||||
|
||||
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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -84,7 +84,7 @@ private:
|
|||
HeadlessWebContentView() = default;
|
||||
|
||||
void notify_server_did_layout(Badge<WebView::WebContentClient>, Gfx::IntSize) override { }
|
||||
void notify_server_did_paint(Badge<WebView::WebContentClient>, i32) override { }
|
||||
void notify_server_did_paint(Badge<WebView::WebContentClient>, i32, Gfx::IntSize) override { }
|
||||
void notify_server_did_invalidate_content_rect(Badge<WebView::WebContentClient>, Gfx::IntRect const&) override { }
|
||||
void notify_server_did_change_selection(Badge<WebView::WebContentClient>) override { }
|
||||
void notify_server_did_request_cursor_change(Badge<WebView::WebContentClient>, Gfx::StandardCursor) override { }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue