Index: Source/core/rendering/RenderFlowThread.h |
diff --git a/Source/core/rendering/RenderFlowThread.h b/Source/core/rendering/RenderFlowThread.h |
deleted file mode 100644 |
index 27bfba903cc8ac05b1908c854fff27449a02143b..0000000000000000000000000000000000000000 |
--- a/Source/core/rendering/RenderFlowThread.h |
+++ /dev/null |
@@ -1,323 +0,0 @@ |
-/* |
- * Copyright (C) 2011 Adobe Systems Incorporated. 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 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. |
- */ |
- |
-#ifndef RenderFlowThread_h |
-#define RenderFlowThread_h |
- |
- |
-#include "core/rendering/RenderBlockFlow.h" |
-#include "wtf/HashCountedSet.h" |
-#include "wtf/ListHashSet.h" |
-#include "wtf/PassRefPtr.h" |
- |
-namespace WebCore { |
- |
-struct LayerFragment; |
-typedef Vector<LayerFragment, 1> LayerFragments; |
-class RenderFlowThread; |
-class RenderStyle; |
-class RenderRegion; |
- |
-typedef ListHashSet<RenderRegion*> RenderRegionList; |
- |
-// RenderFlowThread is used to collect all the render objects that participate in a |
-// flow thread. It will also help in doing the layout. However, it will not render |
-// directly to screen. Instead, RenderRegion objects will redirect their paint |
-// and nodeAtPoint methods to this object. Each RenderRegion will actually be a viewPort |
-// of the RenderFlowThread. |
- |
-class RenderFlowThread: public RenderBlockFlow { |
-public: |
- RenderFlowThread(); |
- virtual ~RenderFlowThread() { }; |
- |
- virtual bool isRenderFlowThread() const OVERRIDE FINAL { return true; } |
- |
- virtual void layout() OVERRIDE FINAL; |
- |
- // Always create a RenderLayer for the RenderFlowThread so that we |
- // can easily avoid drawing the children directly. |
- virtual LayerType layerTypeRequired() const OVERRIDE FINAL { return NormalLayer; } |
- |
- virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffset, HitTestAction) OVERRIDE FINAL; |
- |
- void removeFlowChildInfo(RenderObject*); |
-#ifndef NDEBUG |
- bool hasChildInfo(RenderObject* child) const { return child && child->isBox() && m_regionRangeMap.contains(toRenderBox(child)); } |
-#endif |
- |
- virtual void addRegionToThread(RenderRegion*); |
- virtual void removeRegionFromThread(RenderRegion*); |
- const RenderRegionList& renderRegionList() const { return m_regionList; } |
- |
- virtual void updateLogicalWidth() OVERRIDE FINAL; |
- virtual void computeLogicalHeight(LayoutUnit logicalHeight, LayoutUnit logicalTop, LogicalExtentComputedValues&) const OVERRIDE; |
- |
- void paintFlowThreadPortionInRegion(PaintInfo&, RenderRegion*, const LayoutRect& flowThreadPortionRect, const LayoutRect& flowThreadPortionOverflowRect, const LayoutPoint&) const; |
- bool hitTestFlowThreadPortionInRegion(RenderRegion*, const LayoutRect& flowThreadPortionRect, const LayoutRect& flowThreadPortionOverflowRect, const HitTestRequest&, HitTestResult&, const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffset) const; |
- |
- bool hasRegions() const { return m_regionList.size(); } |
- // Check if the content is flown into at least a region with region styling rules. |
- bool hasRegionsWithStyling() const { return m_hasRegionsWithStyling; } |
- void checkRegionsWithStyling(); |
- virtual void regionChangedWritingMode(RenderRegion*) { } |
- |
- void validateRegions(); |
- void invalidateRegions(); |
- bool hasValidRegionInfo() const { return !m_regionsInvalidated && !m_regionList.isEmpty(); } |
- |
- static PassRefPtr<RenderStyle> createFlowThreadStyle(RenderStyle* parentStyle); |
- |
- virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle) OVERRIDE; |
- |
- void repaintRectangleInRegions(const LayoutRect&) const; |
- |
- LayoutPoint adjustedPositionRelativeToOffsetParent(const RenderBoxModelObject&, const LayoutPoint&); |
- |
- LayoutUnit pageLogicalTopForOffset(LayoutUnit); |
- LayoutUnit pageLogicalWidthForOffset(LayoutUnit); |
- LayoutUnit pageLogicalHeightForOffset(LayoutUnit); |
- LayoutUnit pageRemainingLogicalHeightForOffset(LayoutUnit, PageBoundaryRule = IncludePageBoundary); |
- |
- virtual void setPageBreak(LayoutUnit /*offset*/, LayoutUnit /*spaceShortage*/) { } |
- virtual void updateMinimumPageHeight(LayoutUnit /*offset*/, LayoutUnit /*minHeight*/) { } |
- |
- enum RegionAutoGenerationPolicy { |
- AllowRegionAutoGeneration, |
- DisallowRegionAutoGeneration, |
- }; |
- RenderRegion* regionAtBlockOffset(LayoutUnit, bool extendLastRegion = false, RegionAutoGenerationPolicy = AllowRegionAutoGeneration); |
- |
- RenderRegion* regionFromAbsolutePointAndBox(IntPoint, const RenderBox* flowedBox); |
- |
- bool regionsHaveUniformLogicalWidth() const { return m_regionsHaveUniformLogicalWidth; } |
- bool regionsHaveUniformLogicalHeight() const { return m_regionsHaveUniformLogicalHeight; } |
- |
- RenderRegion* mapFromFlowToRegion(TransformState&) const; |
- |
- void removeRenderBoxRegionInfo(RenderBox*); |
- bool logicalWidthChangedInRegionsForBlock(const RenderBlock*); |
- |
- LayoutUnit contentLogicalWidthOfFirstRegion() const; |
- LayoutUnit contentLogicalHeightOfFirstRegion() const; |
- LayoutUnit contentLogicalLeftOfFirstRegion() const; |
- |
- RenderRegion* firstRegion() const; |
- RenderRegion* lastRegion() const; |
- |
- bool previousRegionCountChanged() const { return m_previousRegionCount != m_regionList.size(); } |
- void updatePreviousRegionCount() { m_previousRegionCount = m_regionList.size(); } |
- |
- void setRegionRangeForBox(const RenderBox*, LayoutUnit offsetFromLogicalTopOfFirstPage); |
- void getRegionRangeForBox(const RenderBox*, RenderRegion*& startRegion, RenderRegion*& endRegion) const; |
- |
- void clearRenderObjectCustomStyle(const RenderObject*, |
- const RenderRegion* oldStartRegion = 0, const RenderRegion* oldEndRegion = 0, |
- const RenderRegion* newStartRegion = 0, const RenderRegion* newEndRegion = 0); |
- |
- // Check if the object is in region and the region is part of this flow thread. |
- bool objectInFlowRegion(const RenderObject*, const RenderRegion*) const; |
- |
- void markAutoLogicalHeightRegionsForLayout(); |
- |
- bool addForcedRegionBreak(LayoutUnit, RenderObject* breakChild, bool isBefore, LayoutUnit* offsetBreakAdjustment = 0); |
- void applyBreakAfterContent(LayoutUnit); |
- |
- bool pageLogicalSizeChanged() const { return m_pageLogicalSizeChanged; } |
- |
- bool hasAutoLogicalHeightRegions() const { ASSERT(isAutoLogicalHeightRegionsCountConsistent()); return m_autoLogicalHeightRegionsCount; } |
- void incrementAutoLogicalHeightRegions(); |
- void decrementAutoLogicalHeightRegions(); |
- |
-#ifndef NDEBUG |
- bool isAutoLogicalHeightRegionsCountConsistent() const; |
-#endif |
- |
- void collectLayerFragments(LayerFragments&, const LayoutRect& layerBoundingBox, const LayoutRect& dirtyRect); |
- LayoutRect fragmentsBoundingBox(const LayoutRect& layerBoundingBox); |
- |
- void setInConstrainedLayoutPhase(bool value) { m_inConstrainedLayoutPhase = value; } |
- bool inConstrainedLayoutPhase() const { return m_inConstrainedLayoutPhase; } |
- |
- bool needsTwoPhasesLayout() const { return m_needsTwoPhasesLayout; } |
- void clearNeedsTwoPhasesLayout() { m_needsTwoPhasesLayout = false; } |
- |
- void pushFlowThreadLayoutState(const RenderObject*); |
- void popFlowThreadLayoutState(); |
- LayoutUnit offsetFromLogicalTopOfFirstRegion(const RenderBlock*) const; |
- |
- // Used to estimate the maximum height of the flow thread. |
- static LayoutUnit maxLogicalHeight() { return LayoutUnit::max() / 2; } |
- |
-protected: |
- virtual const char* renderName() const = 0; |
- |
- // Overridden by columns/pages to set up an initial logical width of the page width even when |
- // no regions have been generated yet. |
- virtual LayoutUnit initialLogicalWidth() const { return 0; }; |
- |
- virtual void mapLocalToContainer(const RenderLayerModelObject* repaintContainer, TransformState&, MapCoordinatesFlags = ApplyContainerFlip, bool* wasFixed = 0) const OVERRIDE FINAL; |
- |
- void updateRegionsFlowThreadPortionRect(const RenderRegion* = 0); |
- bool shouldRepaint(const LayoutRect&) const; |
- bool regionInRange(const RenderRegion* targetRegion, const RenderRegion* startRegion, const RenderRegion* endRegion) const; |
- |
- LayoutRect computeRegionClippingRect(const LayoutPoint&, const LayoutRect&, const LayoutRect&) const; |
- |
- void setDispatchRegionLayoutUpdateEvent(bool value) { m_dispatchRegionLayoutUpdateEvent = value; } |
- bool shouldDispatchRegionLayoutUpdateEvent() { return m_dispatchRegionLayoutUpdateEvent; } |
- |
- void setDispatchRegionOversetChangeEvent(bool value) { m_dispatchRegionOversetChangeEvent = value; } |
- bool shouldDispatchRegionOversetChangeEvent() const { return m_dispatchRegionOversetChangeEvent; } |
- |
- // Override if the flow thread implementation supports dispatching events when the flow layout is updated (e.g. for named flows) |
- virtual void dispatchRegionLayoutUpdateEvent() { m_dispatchRegionLayoutUpdateEvent = false; } |
- virtual void dispatchRegionOversetChangeEvent() { m_dispatchRegionOversetChangeEvent = false; } |
- |
- void initializeRegionsComputedAutoHeight(RenderRegion* = 0); |
- |
- virtual void autoGenerateRegionsToBlockOffset(LayoutUnit) { }; |
- |
- bool cachedOffsetFromLogicalTopOfFirstRegion(const RenderBox*, LayoutUnit&) const; |
- void setOffsetFromLogicalTopOfFirstRegion(const RenderBox*, LayoutUnit); |
- void clearOffsetFromLogicalTopOfFirstRegion(const RenderBox*); |
- |
- const RenderBox* currentStatePusherRenderBox() const; |
- |
- RenderRegionList m_regionList; |
- unsigned short m_previousRegionCount; |
- |
- class RenderRegionRange { |
- public: |
- RenderRegionRange() |
- { |
- setRange(0, 0); |
- } |
- |
- RenderRegionRange(RenderRegion* start, RenderRegion* end) |
- { |
- setRange(start, end); |
- } |
- |
- void setRange(RenderRegion* start, RenderRegion* end) |
- { |
- m_startRegion = start; |
- m_endRegion = end; |
- } |
- |
- RenderRegion* startRegion() const { return m_startRegion; } |
- RenderRegion* endRegion() const { return m_endRegion; } |
- |
- private: |
- RenderRegion* m_startRegion; |
- RenderRegion* m_endRegion; |
- }; |
- |
- typedef PODInterval<LayoutUnit, RenderRegion*> RegionInterval; |
- typedef PODIntervalTree<LayoutUnit, RenderRegion*> RegionIntervalTree; |
- |
- class RegionSearchAdapter { |
- public: |
- RegionSearchAdapter(LayoutUnit offset) |
- : m_offset(offset) |
- , m_result(0) |
- { |
- } |
- |
- const LayoutUnit& lowValue() const { return m_offset; } |
- const LayoutUnit& highValue() const { return m_offset; } |
- void collectIfNeeded(const RegionInterval&); |
- |
- RenderRegion* result() const { return m_result; } |
- |
- private: |
- LayoutUnit m_offset; |
- RenderRegion* m_result; |
- }; |
- |
- // A maps from RenderBox |
- typedef HashMap<const RenderBox*, RenderRegionRange> RenderRegionRangeMap; |
- RenderRegionRangeMap m_regionRangeMap; |
- |
- typedef HashMap<RenderObject*, RenderRegion*> RenderObjectToRegionMap; |
- RenderObjectToRegionMap m_breakBeforeToRegionMap; |
- RenderObjectToRegionMap m_breakAfterToRegionMap; |
- |
- // Stack of objects that pushed a LayoutState object on the RenderView. The |
- // objects on the stack are the ones that are curently in the process of being |
- // laid out. |
- ListHashSet<const RenderObject*> m_statePusherObjectsStack; |
- typedef HashMap<const RenderBox*, LayoutUnit> RenderBoxToOffsetMap; |
- RenderBoxToOffsetMap m_boxesToOffsetMap; |
- |
- unsigned m_autoLogicalHeightRegionsCount; |
- |
- RegionIntervalTree m_regionIntervalTree; |
- |
- bool m_regionsInvalidated : 1; |
- bool m_regionsHaveUniformLogicalWidth : 1; |
- bool m_regionsHaveUniformLogicalHeight : 1; |
- bool m_hasRegionsWithStyling : 1; |
- bool m_dispatchRegionLayoutUpdateEvent : 1; |
- bool m_dispatchRegionOversetChangeEvent : 1; |
- bool m_pageLogicalSizeChanged : 1; |
- bool m_inConstrainedLayoutPhase : 1; |
- bool m_needsTwoPhasesLayout : 1; |
- |
-private: |
- virtual bool supportsPartialLayout() const OVERRIDE FINAL { return false; } |
- |
-}; |
- |
-DEFINE_RENDER_OBJECT_TYPE_CASTS(RenderFlowThread, isRenderFlowThread()); |
- |
-class CurrentRenderFlowThreadMaintainer { |
- WTF_MAKE_NONCOPYABLE(CurrentRenderFlowThreadMaintainer); |
-public: |
- CurrentRenderFlowThreadMaintainer(RenderFlowThread*); |
- ~CurrentRenderFlowThreadMaintainer(); |
-private: |
- RenderFlowThread* m_renderFlowThread; |
- RenderFlowThread* m_previousRenderFlowThread; |
-}; |
- |
-// These structures are used by PODIntervalTree for debugging. |
-#ifndef NDEBUG |
-template <> struct ValueToString<LayoutUnit> { |
- static String string(const LayoutUnit value) { return String::number(value.toFloat()); } |
-}; |
- |
-template <> struct ValueToString<RenderRegion*> { |
- static String string(const RenderRegion* value) { return String::format("%p", value); } |
-}; |
-#endif |
- |
-} // namespace WebCore |
- |
-#endif // RenderFlowThread_h |