From bf464665a781c25c1051768d49782887896edf2a Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Wed, 23 Aug 2023 10:33:26 -0400 Subject: [PATCH] Ladybird+LibWebView: Migrate layout notification to LibWebView callbacks --- Ladybird/AppKit/UI/LadybirdWebView.mm | 6 +++--- Ladybird/AppKit/UI/LadybirdWebViewBridge.cpp | 8 -------- Ladybird/AppKit/UI/LadybirdWebViewBridge.h | 3 --- Ladybird/Qt/WebContentView.cpp | 19 +++++++++---------- Ladybird/Qt/WebContentView.h | 1 - .../LibWebView/OutOfProcessWebView.cpp | 9 ++++----- .../LibWebView/OutOfProcessWebView.h | 1 - .../Libraries/LibWebView/ViewImplementation.h | 2 +- .../Libraries/LibWebView/WebContentClient.cpp | 3 ++- Userland/Utilities/headless-browser.cpp | 1 - 10 files changed, 19 insertions(+), 34 deletions(-) diff --git a/Ladybird/AppKit/UI/LadybirdWebView.mm b/Ladybird/AppKit/UI/LadybirdWebView.mm index bf63b1d885..a812dce96c 100644 --- a/Ladybird/AppKit/UI/LadybirdWebView.mm +++ b/Ladybird/AppKit/UI/LadybirdWebView.mm @@ -164,9 +164,9 @@ struct HideCursor { - (void)setWebViewCallbacks { - m_web_view_bridge->on_layout = [self](auto content_size) { - auto ns_content_size = Ladybird::gfx_size_to_ns_size(content_size); - [[self documentView] setFrameSize:ns_content_size]; + m_web_view_bridge->on_did_layout = [self](auto content_size) { + auto inverse_device_pixel_ratio = m_web_view_bridge->inverse_device_pixel_ratio(); + [[self documentView] setFrameSize:NSMakeSize(content_size.width() * inverse_device_pixel_ratio, content_size.height() * inverse_device_pixel_ratio)]; }; m_web_view_bridge->on_ready_to_paint = [self]() { diff --git a/Ladybird/AppKit/UI/LadybirdWebViewBridge.cpp b/Ladybird/AppKit/UI/LadybirdWebViewBridge.cpp index 2e710ea917..803c33aaa5 100644 --- a/Ladybird/AppKit/UI/LadybirdWebViewBridge.cpp +++ b/Ladybird/AppKit/UI/LadybirdWebViewBridge.cpp @@ -104,14 +104,6 @@ Optional WebViewBridge::paintable() return Paintable { *bitmap, bitmap_size }; } -void WebViewBridge::notify_server_did_layout(Badge, Gfx::IntSize content_size) -{ - if (on_layout) { - content_size = scale_for_device(content_size, m_inverse_device_pixel_ratio); - on_layout(content_size); - } -} - void WebViewBridge::notify_server_did_request_cursor_change(Badge, Gfx::StandardCursor cursor) { if (on_cursor_change) diff --git a/Ladybird/AppKit/UI/LadybirdWebViewBridge.h b/Ladybird/AppKit/UI/LadybirdWebViewBridge.h index 8821f42ff2..7105271dd8 100644 --- a/Ladybird/AppKit/UI/LadybirdWebViewBridge.h +++ b/Ladybird/AppKit/UI/LadybirdWebViewBridge.h @@ -49,8 +49,6 @@ public: }; Optional paintable(); - Function on_layout; - Function on_scroll; Function on_cursor_change; @@ -61,7 +59,6 @@ public: private: WebViewBridge(Vector screen_rects, float device_pixel_ratio, Optional webdriver_content_ipc_path); - virtual void notify_server_did_layout(Badge, Gfx::IntSize content_size) override; virtual void notify_server_did_request_cursor_change(Badge, Gfx::StandardCursor cursor) override; virtual void notify_server_did_request_scroll(Badge, i32, i32) override; virtual void notify_server_did_request_scroll_to(Badge, Gfx::IntPoint) override; diff --git a/Ladybird/Qt/WebContentView.cpp b/Ladybird/Qt/WebContentView.cpp index 2311342a1c..347910bf73 100644 --- a/Ladybird/Qt/WebContentView.cpp +++ b/Ladybird/Qt/WebContentView.cpp @@ -76,6 +76,15 @@ WebContentView::WebContentView(StringView webdriver_content_ipc_path, WebView::E create_client(enable_callgrind_profiling); + on_did_layout = [this](auto content_size) { + verticalScrollBar()->setMinimum(0); + verticalScrollBar()->setMaximum(content_size.height() - m_viewport_rect.height()); + verticalScrollBar()->setPageStep(m_viewport_rect.height()); + horizontalScrollBar()->setMinimum(0); + horizontalScrollBar()->setMaximum(content_size.width() - m_viewport_rect.width()); + horizontalScrollBar()->setPageStep(m_viewport_rect.width()); + }; + on_ready_to_paint = [this]() { viewport()->update(); }; @@ -654,16 +663,6 @@ void WebContentView::notify_server_did_request_cursor_change(Badge, Gfx::IntSize content_size) -{ - verticalScrollBar()->setMinimum(0); - verticalScrollBar()->setMaximum(content_size.height() - m_viewport_rect.height()); - verticalScrollBar()->setPageStep(m_viewport_rect.height()); - horizontalScrollBar()->setMinimum(0); - horizontalScrollBar()->setMaximum(content_size.width() - m_viewport_rect.width()); - horizontalScrollBar()->setPageStep(m_viewport_rect.width()); -} - void WebContentView::notify_server_did_request_scroll(Badge, i32 x_delta, i32 y_delta) { horizontalScrollBar()->setValue(max(0, horizontalScrollBar()->value() + x_delta)); diff --git a/Ladybird/Qt/WebContentView.h b/Ladybird/Qt/WebContentView.h index e8ff7b1087..bd186b1aa6 100644 --- a/Ladybird/Qt/WebContentView.h +++ b/Ladybird/Qt/WebContentView.h @@ -76,7 +76,6 @@ public: }; void update_palette(PaletteMode = PaletteMode::Default); - virtual void notify_server_did_layout(Badge, Gfx::IntSize content_size) override; virtual void notify_server_did_request_cursor_change(Badge, Gfx::StandardCursor cursor) override; virtual void notify_server_did_request_scroll(Badge, i32, i32) override; virtual void notify_server_did_request_scroll_to(Badge, Gfx::IntPoint) override; diff --git a/Userland/Libraries/LibWebView/OutOfProcessWebView.cpp b/Userland/Libraries/LibWebView/OutOfProcessWebView.cpp index f78898a626..6d745d97bc 100644 --- a/Userland/Libraries/LibWebView/OutOfProcessWebView.cpp +++ b/Userland/Libraries/LibWebView/OutOfProcessWebView.cpp @@ -29,6 +29,10 @@ OutOfProcessWebView::OutOfProcessWebView() create_client(); + on_did_layout = [this](auto content_size) { + set_content_size(content_size); + }; + on_ready_to_paint = [this]() { update(); }; @@ -184,11 +188,6 @@ void OutOfProcessWebView::notify_server_did_request_cursor_change(Badge, Gfx::IntSize content_size) -{ - set_content_size(content_size); -} - void OutOfProcessWebView::notify_server_did_request_scroll(Badge, i32 x_delta, i32 y_delta) { horizontal_scrollbar().increase_slider_by(x_delta); diff --git a/Userland/Libraries/LibWebView/OutOfProcessWebView.h b/Userland/Libraries/LibWebView/OutOfProcessWebView.h index daf7405dfb..410a5241a9 100644 --- a/Userland/Libraries/LibWebView/OutOfProcessWebView.h +++ b/Userland/Libraries/LibWebView/OutOfProcessWebView.h @@ -82,7 +82,6 @@ private: // ^WebView::ViewImplementation virtual void create_client(EnableCallgrindProfiling = EnableCallgrindProfiling::No) override; virtual void update_zoom() override; - virtual void notify_server_did_layout(Badge, Gfx::IntSize content_size) override; virtual void notify_server_did_request_cursor_change(Badge, Gfx::StandardCursor cursor) override; virtual void notify_server_did_request_scroll(Badge, i32, i32) override; virtual void notify_server_did_request_scroll_to(Badge, Gfx::IntPoint) override; diff --git a/Userland/Libraries/LibWebView/ViewImplementation.h b/Userland/Libraries/LibWebView/ViewImplementation.h index 33e52e0d8e..3300fcbac0 100644 --- a/Userland/Libraries/LibWebView/ViewImplementation.h +++ b/Userland/Libraries/LibWebView/ViewImplementation.h @@ -94,6 +94,7 @@ public: }; ErrorOr take_screenshot(ScreenshotType); + Function on_did_layout; Function on_ready_to_paint; Function on_new_tab; Function on_activate_tab; @@ -139,7 +140,6 @@ public: Function on_minimize_window; Function on_fullscreen_window; - virtual void notify_server_did_layout(Badge, Gfx::IntSize content_size) = 0; virtual void notify_server_did_request_cursor_change(Badge, Gfx::StandardCursor cursor) = 0; virtual void notify_server_did_request_scroll(Badge, i32, i32) = 0; virtual void notify_server_did_request_scroll_to(Badge, Gfx::IntPoint) = 0; diff --git a/Userland/Libraries/LibWebView/WebContentClient.cpp b/Userland/Libraries/LibWebView/WebContentClient.cpp index 419a99865b..6adf8b7a6c 100644 --- a/Userland/Libraries/LibWebView/WebContentClient.cpp +++ b/Userland/Libraries/LibWebView/WebContentClient.cpp @@ -88,7 +88,8 @@ void WebContentClient::did_request_cursor_change(i32 cursor_type) void WebContentClient::did_layout(Gfx::IntSize content_size) { dbgln_if(SPAM_DEBUG, "handle: WebContentClient::DidLayout! content_size={}", content_size); - m_view.notify_server_did_layout({}, content_size); + if (m_view.on_did_layout) + m_view.on_did_layout(content_size); } void WebContentClient::did_change_title(DeprecatedString const& title) diff --git a/Userland/Utilities/headless-browser.cpp b/Userland/Utilities/headless-browser.cpp index 555d678c66..6f231dbefa 100644 --- a/Userland/Utilities/headless-browser.cpp +++ b/Userland/Utilities/headless-browser.cpp @@ -102,7 +102,6 @@ public: private: HeadlessWebContentView() = default; - void notify_server_did_layout(Badge, Gfx::IntSize) override { } void notify_server_did_request_cursor_change(Badge, Gfx::StandardCursor) override { } void notify_server_did_request_scroll(Badge, i32, i32) override { } void notify_server_did_request_scroll_to(Badge, Gfx::IntPoint) override { }