diff --git a/Ladybird/WebView.cpp b/Ladybird/WebView.cpp index f0c1f903e7..9b53f4cf02 100644 --- a/Ladybird/WebView.cpp +++ b/Ladybird/WebView.cpp @@ -1,5 +1,6 @@ /* * Copyright (c) 2022, Dex♪ + * Copyright (c) 2022, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ @@ -49,6 +50,7 @@ #include #include #include +#include class HeadlessBrowserPageClient final : public Web::PageClient { public: @@ -198,6 +200,16 @@ public: virtual void page_did_layout() override { + auto* layout_root = this->layout_root(); + VERIFY(layout_root); + Gfx::IntSize content_size; + if (layout_root->paint_box()->has_overflow()) + content_size = enclosing_int_rect(layout_root->paint_box()->scrollable_overflow_rect().value()).size(); + else + content_size = enclosing_int_rect(layout_root->paint_box()->absolute_rect()).size(); + + m_view.verticalScrollBar()->setMaximum(content_size.height() - m_viewport_rect.height()); + m_view.horizontalScrollBar()->setMaximum(content_size.width() - m_viewport_rect.width()); } virtual void page_did_request_scroll_into_view(Gfx::IntRect const&) override @@ -273,10 +285,10 @@ void WebView::paintEvent(QPaintEvent* event) painter.setClipRect(event->rect()); auto output_rect = m_page_client->viewport_rect(); + output_rect.set_x(horizontalScrollBar()->value()); + output_rect.set_y(verticalScrollBar()->value()); auto output_bitmap = MUST(Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, output_rect.size())); - dbgln("paintEvent: {}", output_rect); - m_page_client->paint(output_rect, output_bitmap); QImage q_image(output_bitmap->scanline_u8(0), output_bitmap->width(), output_bitmap->height(), QImage::Format_RGB32); @@ -285,7 +297,7 @@ void WebView::paintEvent(QPaintEvent* event) void WebView::resizeEvent(QResizeEvent* event) { - Gfx::IntRect rect(0, 0, event->size().width(), event->size().height()); + Gfx::IntRect rect(horizontalScrollBar()->value(), verticalScrollBar()->value(), event->size().width(), event->size().height()); m_page_client->set_viewport_rect(rect); } diff --git a/Ladybird/WebView.h b/Ladybird/WebView.h index d6a242aad0..9dbf24ae00 100644 --- a/Ladybird/WebView.h +++ b/Ladybird/WebView.h @@ -1,3 +1,9 @@ +/* + * Copyright (c) 2022, Andreas Kling + * + * SPDX-License-Identifier: BSD-2-Clause + */ + #pragma once #define AK_DONT_REPLACE_STD diff --git a/Ladybird/main.cpp b/Ladybird/main.cpp index d2f59f2e02..94f56d5906 100644 --- a/Ladybird/main.cpp +++ b/Ladybird/main.cpp @@ -1,3 +1,9 @@ +/* + * Copyright (c) 2022, Andreas Kling + * + * SPDX-License-Identifier: BSD-2-Clause + */ + #include "WebView.h" #include #include