소스 검색

LibHTML: Push the visible viewport rect from HtmlView to Frame

This will allow various mechanisms and optimizations based on the
currently visible viewport rect.
Andreas Kling 5 년 전
부모
커밋
7e068565bc
4개의 변경된 파일20개의 추가작업 그리고 0개의 파일을 삭제
  1. 7 0
      Libraries/LibHTML/Frame.cpp
  2. 4 0
      Libraries/LibHTML/Frame.h
  3. 7 0
      Libraries/LibHTML/HtmlView.cpp
  4. 2 0
      Libraries/LibHTML/HtmlView.h

+ 7 - 0
Libraries/LibHTML/Frame.cpp

@@ -32,6 +32,13 @@ void Frame::set_size(const Size& size)
     m_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)
 void Frame::set_needs_display(const Rect& rect)
 {
 {
     if (!on_set_needs_display)
     if (!on_set_needs_display)

+ 4 - 0
Libraries/LibHTML/Frame.h

@@ -30,10 +30,14 @@ public:
     void set_needs_display(const Rect&);
     void set_needs_display(const Rect&);
     Function<void(const Rect&)> on_set_needs_display;
     Function<void(const Rect&)> on_set_needs_display;
 
 
+    void set_viewport_rect(const Rect&);
+    Rect viewport_rect() const { return m_viewport_rect; }
+
 private:
 private:
     explicit Frame(HtmlView&);
     explicit Frame(HtmlView&);
 
 
     WeakPtr<HtmlView> m_html_view;
     WeakPtr<HtmlView> m_html_view;
     RefPtr<Document> m_document;
     RefPtr<Document> m_document;
     Size m_size;
     Size m_size;
+    Rect m_viewport_rect;
 };
 };

+ 7 - 0
Libraries/LibHTML/HtmlView.cpp

@@ -95,6 +95,8 @@ void HtmlView::layout_and_sync_size()
         set_content_size(enclosing_int_rect(layout_root()->rect()).size());
         set_content_size(enclosing_int_rect(layout_root()->rect()).size());
     }
     }
 
 
+    main_frame().set_viewport_rect(visible_content_rect());
+
 #ifdef HTML_DEBUG
 #ifdef HTML_DEBUG
     dbgprintf("\033[33;1mLayout tree after layout:\033[0m\n");
     dbgprintf("\033[33;1mLayout tree after layout:\033[0m\n");
     ::dump_tree(*layout_root());
     ::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().start().layout_node << ":" << layout_root()->selection().start().index_in_node << ", end: "
           << layout_root()->selection().end().layout_node << ":" << layout_root()->selection().end().index_in_node;
           << 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());
+}

+ 2 - 0
Libraries/LibHTML/HtmlView.h

@@ -47,6 +47,8 @@ protected:
     virtual void keydown_event(GKeyEvent&) override;
     virtual void keydown_event(GKeyEvent&) override;
 
 
 private:
 private:
+    virtual void did_scroll() override;
+
     void layout_and_sync_size();
     void layout_and_sync_size();
     void dump_selection(const char* event_name);
     void dump_selection(const char* event_name);