mirror of
https://github.com/RGBCube/serenity
synced 2025-07-10 04:27:35 +00:00
LibHTML: Push the visible viewport rect from HtmlView to Frame
This will allow various mechanisms and optimizations based on the currently visible viewport rect.
This commit is contained in:
parent
85ac9705ba
commit
7e068565bc
4 changed files with 20 additions and 0 deletions
|
@ -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)
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
|
@ -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());
|
||||||
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue