From d47f77169f8c3bdb6675a67a736b5591a752b52c Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Fri, 21 Aug 2020 17:50:41 +0200 Subject: LibWeb: Remember the selection state of each LayoutNode Instead of computing it on the fly while painting each layout node, they now remember their selection state. This avoids a whole bunch of tree traversal while painting with anything selected. --- Libraries/LibWeb/Layout/LayoutNode.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'Libraries/LibWeb/Layout/LayoutNode.h') diff --git a/Libraries/LibWeb/Layout/LayoutNode.h b/Libraries/LibWeb/Layout/LayoutNode.h index b441c3afe2..246d40761f 100644 --- a/Libraries/LibWeb/Layout/LayoutNode.h +++ b/Libraries/LibWeb/Layout/LayoutNode.h @@ -43,6 +43,14 @@ namespace Web { struct HitTestResult { RefPtr layout_node; int index_in_node { 0 }; + + enum InternalPosition { + None, + Before, + Inside, + After, + }; + InternalPosition internal_position { None }; }; enum class HitTestType { @@ -142,6 +150,17 @@ public: float font_size() const; + enum class SelectionState { + None, // No selection + Start, // Selection starts in this LayoutNode + End, // Selection ends in this LayoutNode + StartAndEnd, // Selection starts and ends in this LayoutNode + Full, // Selection starts before and ends after this LayoutNode + }; + + SelectionState selection_state() const { return m_selection_state; } + void set_selection_state(SelectionState state) { m_selection_state = state; } + protected: LayoutNode(DOM::Document&, DOM::Node*); @@ -155,6 +174,7 @@ private: bool m_has_style { false }; bool m_visible { true }; bool m_children_are_inline { false }; + SelectionState m_selection_state { SelectionState::None }; }; class LayoutNodeWithStyle : public LayoutNode { -- cgit v1.2.3