diff options
author | Andreas Kling <kling@serenityos.org> | 2020-08-21 17:50:41 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2020-08-21 17:57:24 +0200 |
commit | d47f77169f8c3bdb6675a67a736b5591a752b52c (patch) | |
tree | 4ad2cb19410f7fafd5e17a05548dc18ecd3e6612 /Libraries/LibWeb/Layout/LayoutNode.h | |
parent | cf4870c93e274ad7f0620f86241b85de9a2adc76 (diff) | |
download | serenity-d47f77169f8c3bdb6675a67a736b5591a752b52c.zip |
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.
Diffstat (limited to 'Libraries/LibWeb/Layout/LayoutNode.h')
-rw-r--r-- | Libraries/LibWeb/Layout/LayoutNode.h | 20 |
1 files changed, 20 insertions, 0 deletions
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<LayoutNode> 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 { |