diff options
Diffstat (limited to 'Userland/Libraries')
-rw-r--r-- | Userland/Libraries/LibWebView/OutOfProcessWebView.cpp | 29 | ||||
-rw-r--r-- | Userland/Libraries/LibWebView/OutOfProcessWebView.h | 12 |
2 files changed, 41 insertions, 0 deletions
diff --git a/Userland/Libraries/LibWebView/OutOfProcessWebView.cpp b/Userland/Libraries/LibWebView/OutOfProcessWebView.cpp index d9c5a89cd3..f8560e0368 100644 --- a/Userland/Libraries/LibWebView/OutOfProcessWebView.cpp +++ b/Userland/Libraries/LibWebView/OutOfProcessWebView.cpp @@ -159,6 +159,35 @@ void OutOfProcessWebView::handle_resize() request_repaint(); } +void OutOfProcessWebView::zoom_in() +{ + if (m_zoom_level >= ZOOM_MAX_LEVEL) + return; + m_zoom_level += ZOOM_STEP; + update_zoom(); +} + +void OutOfProcessWebView::zoom_out() +{ + if (m_zoom_level <= ZOOM_MIN_LEVEL) + return; + m_zoom_level -= ZOOM_STEP; + update_zoom(); +} + +void OutOfProcessWebView::reset_zoom() +{ + m_zoom_level = 1.0f; + update_zoom(); +} + +void OutOfProcessWebView::update_zoom() +{ + client().async_set_device_pixels_per_css_pixel(m_device_pixel_ratio * m_zoom_level); + // FIXME: Refactor this into separate update_viewport_rect() + request_repaint() like in Ladybird + handle_resize(); +} + void OutOfProcessWebView::keydown_event(GUI::KeyEvent& event) { enqueue_input_event(event); diff --git a/Userland/Libraries/LibWebView/OutOfProcessWebView.h b/Userland/Libraries/LibWebView/OutOfProcessWebView.h index 935af25e89..73bc7a66ec 100644 --- a/Userland/Libraries/LibWebView/OutOfProcessWebView.h +++ b/Userland/Libraries/LibWebView/OutOfProcessWebView.h @@ -77,6 +77,10 @@ public: void set_system_visibility_state(bool visible); + void zoom_in(); + void zoom_out(); + void reset_zoom(); + Gfx::ShareableBitmap take_screenshot() const; Gfx::ShareableBitmap take_document_screenshot(); @@ -121,6 +125,10 @@ public: Function<void()> on_forward_button; private: + static constexpr auto ZOOM_MIN_LEVEL = 0.3f; + static constexpr auto ZOOM_MAX_LEVEL = 5.0f; + static constexpr auto ZOOM_STEP = 0.1f; + OutOfProcessWebView(); // ^Widget @@ -197,6 +205,7 @@ private: void request_repaint(); void handle_resize(); + void update_zoom(); void create_client(); WebContentClient& client(); @@ -231,6 +240,9 @@ private: Queue<InputEvent> m_pending_input_events; bool m_content_scales_to_viewport { false }; + + float m_zoom_level { 1.0 }; + float m_device_pixel_ratio { 1.0 }; }; } |