diff options
Diffstat (limited to 'Source/WebCore/rendering/RenderNamedFlowThread.h')
-rw-r--r-- | Source/WebCore/rendering/RenderNamedFlowThread.h | 90 |
1 files changed, 43 insertions, 47 deletions
diff --git a/Source/WebCore/rendering/RenderNamedFlowThread.h b/Source/WebCore/rendering/RenderNamedFlowThread.h index a82efa3e0..185dc14b9 100644 --- a/Source/WebCore/rendering/RenderNamedFlowThread.h +++ b/Source/WebCore/rendering/RenderNamedFlowThread.h @@ -13,7 +13,7 @@ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``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 COMPUTER, INC. OR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR * 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 @@ -23,11 +23,10 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - -#ifndef RenderNamedFlowThread_h -#define RenderNamedFlowThread_h +#pragma once #include "RenderFlowThread.h" +#include "SelectionSubtreeRoot.h" #include "Timer.h" #include <wtf/HashCountedSet.h> #include <wtf/ListHashSet.h> @@ -43,34 +42,27 @@ typedef ListHashSet<RenderNamedFlowThread*> RenderNamedFlowThreadList; typedef HashCountedSet<RenderNamedFlowThread*> RenderNamedFlowThreadCountedSet; typedef ListHashSet<Element*> NamedFlowContentElements; -class RenderNamedFlowThread final : public RenderFlowThread { +class RenderNamedFlowThread final : public RenderFlowThread, public SelectionSubtreeRoot { public: - RenderNamedFlowThread(Document&, PassRef<RenderStyle>, PassRefPtr<WebKitNamedFlow>); + RenderNamedFlowThread(Document&, RenderStyle&&, Ref<WebKitNamedFlow>&&); virtual ~RenderNamedFlowThread(); const AtomicString& flowThreadName() const; const RenderRegionList& invalidRenderRegionList() const { return m_invalidRegionList; } - RenderObject* nextRendererForNode(Node*) const; - RenderObject* previousRendererForNode(Node*) const; - - void addFlowChild(RenderObject* newChild); - void removeFlowChild(RenderObject*); - bool hasChildren() const { return !m_flowThreadChildList->isEmpty(); } -#ifndef NDEBUG - bool hasChild(RenderObject* child) const { return m_flowThreadChildList->contains(child); } -#endif + static RenderBlock* fragmentFromRenderBoxAsRenderBlock(RenderBox*, const IntPoint& absolutePoint, const RenderBox& flowedBox); void pushDependencies(RenderNamedFlowThreadList&); - virtual void addRegionToThread(RenderRegion*) override; - virtual void removeRegionFromThread(RenderRegion*) override; + void addRegionToThread(RenderRegion*) override; + void removeRegionFromThread(RenderRegion*) override; + + void regionChangedWritingMode(RenderRegion*) override; - virtual void regionChangedWritingMode(RenderRegion*) override; + LayoutRect decorationsClipRectForBoxInNamedFlowFragment(const RenderBox&, RenderNamedFlowFragment&) const; - bool overset() const { return m_overset; } - void computeOversetStateForRegions(LayoutUnit oldClientAfterEdge); + RenderNamedFlowFragment* fragmentFromAbsolutePointAndBox(const IntPoint&, const RenderBox& flowedBox); void registerNamedFlowContentElement(Element&); void unregisterNamedFlowContentElement(Element&); @@ -78,47 +70,57 @@ public: bool hasContentElement(Element&) const; bool isMarkedForDestruction() const; - void getRanges(Vector<RefPtr<Range>>&, const RenderRegion*) const; + void getRanges(Vector<RefPtr<Range>>&, const RenderNamedFlowFragment*) const; -#if USE(ACCELERATED_COMPOSITING) - virtual bool collectsGraphicsLayersUnderRegions() const override; -#endif + void applyBreakAfterContent(LayoutUnit) override; + + bool collectsGraphicsLayersUnderRegions() const override; // Check if the content is flown into at least a region with region styling rules. bool hasRegionsWithStyling() const { return m_hasRegionsWithStyling; } void checkRegionsWithStyling(); - void clearRenderObjectCustomStyle(const RenderObject*); + void clearRenderObjectCustomStyle(const RenderElement&); + + void removeFlowChildInfo(RenderElement&) override; + + LayoutUnit flowContentBottom() const { return m_flowContentBottom; } + void dispatchNamedFlowEvents(); - virtual void removeFlowChildInfo(RenderObject*) override final; + void setDispatchRegionOversetChangeEvent(bool value) { m_dispatchRegionOversetChangeEvent = value; } + + bool absoluteQuadsForBox(Vector<FloatQuad>&, bool*, const RenderBox*, float, float) const override; protected: void setMarkForDestruction(); void resetMarkForDestruction(); private: - virtual const char* renderName() const override; - virtual bool isRenderNamedFlowThread() const override { return true; } - virtual bool isChildAllowed(const RenderObject&, const RenderStyle&) const override; + void willBeDestroyed() override; + const char* renderName() const override; + bool isRenderNamedFlowThread() const override { return true; } + bool isChildAllowed(const RenderObject&, const RenderStyle&) const override; + void computeOverflow(LayoutUnit, bool = false) override; + void layout() override; - virtual void dispatchRegionLayoutUpdateEvent() override; - virtual void dispatchRegionOversetChangeEvent() override; + void dispatchRegionOversetChangeEventIfNeeded(); bool dependsOn(RenderNamedFlowThread* otherRenderFlowThread) const; void addDependencyOnFlowThread(RenderNamedFlowThread*); void removeDependencyOnFlowThread(RenderNamedFlowThread*); - void addRegionToNamedFlowThread(RenderRegion*); + void addFragmentToNamedFlowThread(RenderNamedFlowFragment*); void checkInvalidRegions(); bool canBeDestroyed() const { return m_invalidRegionList.isEmpty() && m_regionList.isEmpty() && m_contentElements.isEmpty(); } - void regionLayoutUpdateEventTimerFired(Timer<RenderNamedFlowThread>&); - void regionOversetChangeEventTimerFired(Timer<RenderNamedFlowThread>&); + void regionOversetChangeEventTimerFired(); void clearContentElements(); void updateWritingMode(); -private: + WebKitNamedFlow& namedFlow() { return m_namedFlow; } + const WebKitNamedFlow& namedFlow() const { return m_namedFlow; } + // Observer flow threads have invalid regions that depend on the state of this thread // to re-validate their regions. Keeping a set of observer threads make it easy // to notify them when a region was removed from this flow. @@ -129,27 +131,21 @@ private: // easy to sort the order of threads layout. RenderNamedFlowThreadCountedSet m_layoutBeforeThreadsSet; - // Holds the sorted children of a named flow. This is the only way we can get the ordering right. - typedef ListHashSet<RenderObject*> FlowThreadChildList; - OwnPtr<FlowThreadChildList> m_flowThreadChildList; - NamedFlowContentElements m_contentElements; RenderRegionList m_invalidRegionList; - bool m_overset : 1; bool m_hasRegionsWithStyling : 1; + bool m_dispatchRegionOversetChangeEvent : 1; // The DOM Object that represents a named flow. - RefPtr<WebKitNamedFlow> m_namedFlow; + Ref<WebKitNamedFlow> m_namedFlow; - Timer<RenderNamedFlowThread> m_regionLayoutUpdateEventTimer; - Timer<RenderNamedFlowThread> m_regionOversetChangeEventTimer; -}; + Timer m_regionOversetChangeEventTimer; -template<> inline bool isRendererOfType<const RenderNamedFlowThread>(const RenderObject& renderer) { return renderer.isRenderNamedFlowThread(); } -RENDER_OBJECT_TYPE_CASTS(RenderNamedFlowThread, isRenderNamedFlowThread()) + LayoutUnit m_flowContentBottom; +}; } // namespace WebCore -#endif // RenderNamedFlowThread_h +SPECIALIZE_TYPE_TRAITS_RENDER_OBJECT(RenderNamedFlowThread, isRenderNamedFlowThread()) |