mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-12-07 21:59:54 +00:00
LibWeb+UI: Add internals API to set browser zoom
This commit is contained in:
parent
f39433d6b0
commit
5cc9a5802d
Notes:
github-actions[bot]
2025-01-21 15:12:32 +00:00
Author: https://github.com/InvalidUsernameException
Commit: 5cc9a5802d
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/2982
Reviewed-by: https://github.com/AtkinsSJ
17 changed files with 78 additions and 3 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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; }
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue