diff options
Diffstat (limited to 'Source/WebCore/style/RenderTreePosition.h')
-rw-r--r-- | Source/WebCore/style/RenderTreePosition.h | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/Source/WebCore/style/RenderTreePosition.h b/Source/WebCore/style/RenderTreePosition.h new file mode 100644 index 000000000..47a05926c --- /dev/null +++ b/Source/WebCore/style/RenderTreePosition.h @@ -0,0 +1,101 @@ +/* + * Copyright (C) 2015 Apple Inc. All rights reserved. + * + * 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 APPLE INC. AND ITS CONTRIBUTORS ``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 APPLE INC. OR ITS CONTRIBUTORS + * 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 "RenderElement.h" +#include "RenderNamedFlowThread.h" +#include "RenderText.h" +#include "RenderView.h" + +namespace WebCore { + +class RenderTreePosition { +public: + explicit RenderTreePosition(RenderView& root) + : m_parent(root) + , m_hasValidNextSibling(true) + { + } + + explicit RenderTreePosition(RenderElement& parent) + : m_parent(parent) + { + } + +#if ENABLE(CSS_REGIONS) + static RenderTreePosition insertionPositionForFlowThread(Element* insertionParent, Element& child, const RenderStyle&); +#endif + + RenderElement& parent() const { return m_parent; } + void insert(RenderObject&); + bool canInsert(RenderElement&) const; + bool canInsert(RenderText&) const; + + void computeNextSibling(const Node&); + void invalidateNextSibling() { m_hasValidNextSibling = false; } + void invalidateNextSibling(const RenderObject&); + + RenderObject* previousSiblingRenderer(const Text&) const; + RenderObject* nextSiblingRenderer(const Node&) const; + static bool isRendererReparented(const RenderObject&); + +private: +#if ENABLE(CSS_REGIONS) + RenderTreePosition(RenderFlowThread& parent, RenderObject* nextSibling) + : m_parent(parent) + , m_nextSibling(nextSibling) + , m_hasValidNextSibling(true) + { + } +#endif + + RenderElement& m_parent; + RenderObject* m_nextSibling { nullptr }; + bool m_hasValidNextSibling { false }; +#if !ASSERT_DISABLED + unsigned m_assertionLimitCounter { 0 }; +#endif +}; + +inline bool RenderTreePosition::canInsert(RenderElement& renderer) const +{ + ASSERT(!renderer.parent()); + return m_parent.isChildAllowed(renderer, renderer.style()); +} + +inline bool RenderTreePosition::canInsert(RenderText& renderer) const +{ + ASSERT(!renderer.parent()); + return m_parent.isChildAllowed(renderer, m_parent.style()); +} + +inline void RenderTreePosition::insert(RenderObject& renderer) +{ + ASSERT(m_hasValidNextSibling); + m_parent.addChild(&renderer, m_nextSibling); +} + +} // namespace WebCore |