LibWeb+UI: Add internals API to set browser zoom

This commit is contained in:
InvalidUsernameException 2024-12-23 22:15:06 +01:00 committed by Alexander Kalenik
parent f39433d6b0
commit 5cc9a5802d
Notes: github-actions[bot] 2025-01-21 15:12:32 +00:00
17 changed files with 78 additions and 3 deletions

View file

@ -958,6 +958,11 @@ static void copy_data_to_clipboard(StringView data, NSPasteboardType pasteboard_
[NSMenu popUpContextMenu:self.select_dropdown withEvent:event forView:self];
};
m_web_view_bridge->on_set_browser_zoom = [](double factor) {
(void)factor;
dbgln("FIXME: A test called `window.internals.setBrowserZoom()` which is not implemented in the AppKit UI");
};
m_web_view_bridge->on_restore_window = [weak_self]() {
LadybirdWebView* self = weak_self;
if (self == nil) {

View file

@ -191,4 +191,10 @@ void HeadlessWebView::on_test_complete(TestCompletion completion)
m_test_promise->resolve(move(completion));
}
void HeadlessWebView::update_zoom()
{
client().async_set_device_pixels_per_css_pixel(m_client_state.page_index, m_device_pixel_ratio * m_zoom_level);
client().async_set_viewport_size(m_client_state.page_index, m_viewport_size);
}
}

View file

@ -33,7 +33,7 @@ public:
private:
HeadlessWebView(Core::AnonymousBuffer theme, Web::DevicePixelSize viewport_size);
void update_zoom() override { }
void update_zoom() override;
void initialize_client(CreateNewClient) override;
virtual Web::DevicePixelSize viewport_size() const override { return m_viewport_size; }

View file

@ -140,6 +140,7 @@ void run_dump_test(HeadlessWebView& view, Test& test, URL::URL const& url, int t
view.on_load_finish = {};
view.on_text_test_finish = {};
view.on_set_test_timeout = {};
view.reset_zoom();
view.on_test_complete({ test, TestResult::Timeout });
});
@ -199,6 +200,7 @@ void run_dump_test(HeadlessWebView& view, Test& test, URL::URL const& url, int t
};
auto on_test_complete = [&view, &test, timer, handle_completed_test]() {
view.reset_zoom();
clear_test_callbacks(view);
timer->stop();
@ -268,6 +270,10 @@ void run_dump_test(HeadlessWebView& view, Test& test, URL::URL const& url, int t
timer->start(milliseconds);
};
view.on_set_browser_zoom = [&view](double factor) {
view.set_zoom(factor);
};
view.load(url);
timer->start();
}
@ -278,6 +284,7 @@ static void run_ref_test(HeadlessWebView& view, Test& test, URL::URL const& url,
view.on_load_finish = {};
view.on_text_test_finish = {};
view.on_set_test_timeout = {};
view.reset_zoom();
view.on_test_complete({ test, TestResult::Timeout });
});
@ -335,13 +342,15 @@ static void run_ref_test(HeadlessWebView& view, Test& test, URL::URL const& url,
} else {
test.ref_test_expectation_type = RefTestExpectationType::Match;
}
view.take_screenshot()->when_resolved([&test, on_test_complete = move(on_test_complete)](RefPtr<Gfx::Bitmap> screenshot) {
view.take_screenshot()->when_resolved([&view, &test, on_test_complete = move(on_test_complete)](RefPtr<Gfx::Bitmap> screenshot) {
test.expectation_screenshot = move(screenshot);
view.reset_zoom();
on_test_complete();
});
} else {
view.take_screenshot()->when_resolved([&view, &test](RefPtr<Gfx::Bitmap> screenshot) {
test.actual_screenshot = move(screenshot);
view.reset_zoom();
view.debug_request("load-reference-page");
});
}
@ -358,6 +367,10 @@ static void run_ref_test(HeadlessWebView& view, Test& test, URL::URL const& url,
timer->start(milliseconds);
};
view.on_set_browser_zoom = [&view](double factor) {
view.set_zoom(factor);
};
view.load(url);
timer->start();
}

View file

@ -133,6 +133,7 @@ public slots:
void zoom_out();
void reset_zoom();
void update_zoom_menu();
void update_displayed_zoom_level();
void select_all();
void show_find_in_page();
void paste();
@ -154,7 +155,6 @@ private:
void debug_request(ByteString const& request, ByteString const& argument = "");
void set_current_tab(Tab* tab);
void update_displayed_zoom_level();
template<typename Callback>
void for_each_tab(Callback&& callback)

View file

@ -164,6 +164,12 @@ WebContentView::WebContentView(QWidget* window, RefPtr<WebView::WebContentClient
m_select_dropdown->exec(map_point_to_global_position(content_position));
};
on_set_browser_zoom = [this](double factor) {
set_zoom(factor);
auto* window = static_cast<BrowserWindow*>(this->window());
window->update_displayed_zoom_level();
};
}
WebContentView::~WebContentView() = default;