diff --git a/Libraries/LibHTML/Frame.cpp b/Libraries/LibHTML/Frame.cpp index ec0339f737..3f1894763d 100644 --- a/Libraries/LibHTML/Frame.cpp +++ b/Libraries/LibHTML/Frame.cpp @@ -32,6 +32,13 @@ void Frame::set_size(const Size& size) m_size = size; } +void Frame::set_viewport_rect(const Rect& rect) +{ + if (m_viewport_rect == rect) + return; + m_viewport_rect = rect; +} + void Frame::set_needs_display(const Rect& rect) { if (!on_set_needs_display) diff --git a/Libraries/LibHTML/Frame.h b/Libraries/LibHTML/Frame.h index bf28e8cd34..1272b32f54 100644 --- a/Libraries/LibHTML/Frame.h +++ b/Libraries/LibHTML/Frame.h @@ -30,10 +30,14 @@ public: void set_needs_display(const Rect&); Function on_set_needs_display; + void set_viewport_rect(const Rect&); + Rect viewport_rect() const { return m_viewport_rect; } + private: explicit Frame(HtmlView&); WeakPtr m_html_view; RefPtr m_document; Size m_size; + Rect m_viewport_rect; }; diff --git a/Libraries/LibHTML/HtmlView.cpp b/Libraries/LibHTML/HtmlView.cpp index dec45d1fef..cb72d44d61 100644 --- a/Libraries/LibHTML/HtmlView.cpp +++ b/Libraries/LibHTML/HtmlView.cpp @@ -95,6 +95,8 @@ void HtmlView::layout_and_sync_size() set_content_size(enclosing_int_rect(layout_root()->rect()).size()); } + main_frame().set_viewport_rect(visible_content_rect()); + #ifdef HTML_DEBUG dbgprintf("\033[33;1mLayout tree after layout:\033[0m\n"); ::dump_tree(*layout_root()); @@ -381,3 +383,8 @@ void HtmlView::dump_selection(const char* event_name) << layout_root()->selection().start().layout_node << ":" << layout_root()->selection().start().index_in_node << ", end: " << layout_root()->selection().end().layout_node << ":" << layout_root()->selection().end().index_in_node; } + +void HtmlView::did_scroll() +{ + main_frame().set_viewport_rect(visible_content_rect()); +} diff --git a/Libraries/LibHTML/HtmlView.h b/Libraries/LibHTML/HtmlView.h index ea2b8b733e..f5447b6019 100644 --- a/Libraries/LibHTML/HtmlView.h +++ b/Libraries/LibHTML/HtmlView.h @@ -47,6 +47,8 @@ protected: virtual void keydown_event(GKeyEvent&) override; private: + virtual void did_scroll() override; + void layout_and_sync_size(); void dump_selection(const char* event_name);