diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/rendering/SelectionSubtreeRoot.h | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/WebCore/rendering/SelectionSubtreeRoot.h')
-rw-r--r-- | Source/WebCore/rendering/SelectionSubtreeRoot.h | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/Source/WebCore/rendering/SelectionSubtreeRoot.h b/Source/WebCore/rendering/SelectionSubtreeRoot.h new file mode 100644 index 000000000..c7399ef96 --- /dev/null +++ b/Source/WebCore/rendering/SelectionSubtreeRoot.h @@ -0,0 +1,119 @@ + /* + * Copyright (C) 2014 Igalia S.L. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above + * copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF + * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#pragma once + +#include "RenderObject.h" +#include "RenderSelectionInfo.h" + +namespace WebCore { + +class Document; + +class SelectionSubtreeRoot { +public: + + typedef HashMap<RenderObject*, std::unique_ptr<RenderSelectionInfo>> SelectedObjectMap; + typedef HashMap<const RenderBlock*, std::unique_ptr<RenderBlockSelectionInfo>> SelectedBlockMap; + + struct OldSelectionData { + OldSelectionData() + { + } + + std::optional<unsigned> selectionStartPos; + std::optional<unsigned> selectionEndPos; + SelectedObjectMap selectedObjects; + SelectedBlockMap selectedBlocks; + }; + + class SelectionSubtreeData { + public: + SelectionSubtreeData() = default; + + SelectionSubtreeData(RenderObject* selectionStart, std::optional<unsigned> selectionStartPos, RenderObject* selectionEnd, std::optional<unsigned> selectionEndPos) + : m_selectionStart(selectionStart) + , m_selectionStartPos(selectionStartPos) + , m_selectionEnd(selectionEnd) + , m_selectionEndPos(selectionEndPos) + { + } + + RenderObject* selectionStart() const { return m_selectionStart; } + std::optional<unsigned> selectionStartPos() const { return m_selectionStartPos; } + RenderObject* selectionEnd() const { return m_selectionEnd; } + std::optional<unsigned> selectionEndPos() const { return m_selectionEndPos; } + bool selectionClear() const + { + return !m_selectionStart + && (!m_selectionStartPos) + && !m_selectionEnd + && (!m_selectionEndPos); + } + + void selectionStartEndPositions(unsigned& startPos, unsigned& endPos) const + { + startPos = m_selectionStartPos.value(); + endPos = m_selectionEndPos.value(); + } + void setSelectionStart(RenderObject* selectionStart) { m_selectionStart = selectionStart; } + void setSelectionStartPos(std::optional<unsigned> selectionStartPos) { m_selectionStartPos = selectionStartPos;} + void setSelectionEnd(RenderObject* selectionEnd) { m_selectionEnd = selectionEnd; } + void setSelectionEndPos(std::optional<unsigned> selectionEndPos) { m_selectionEndPos = selectionEndPos;} + void clearSelection() + { + m_selectionStart = nullptr; + m_selectionStartPos = std::nullopt; + m_selectionEnd = nullptr; + m_selectionEndPos = std::nullopt; + } + + private: + RenderObject* m_selectionStart { nullptr }; + std::optional<unsigned> m_selectionStartPos; + RenderObject* m_selectionEnd { nullptr }; + std::optional<unsigned> m_selectionEndPos; + }; + + typedef HashMap<SelectionSubtreeRoot*, SelectionSubtreeData> RenderSubtreesMap; + typedef HashMap<const SelectionSubtreeRoot*, std::unique_ptr<OldSelectionData>> SubtreeOldSelectionDataMap; + + SelectionSubtreeRoot(); + + SelectionSubtreeData& selectionData() { return m_selectionSubtreeData; } + const SelectionSubtreeData& selectionData() const { return m_selectionSubtreeData; } + + void setSelectionData(const SelectionSubtreeData& selectionSubtreeData) { m_selectionSubtreeData = selectionSubtreeData; } + void adjustForVisibleSelection(Document&); + +private: + SelectionSubtreeData m_selectionSubtreeData; +}; + +} // namespace WebCore |