| 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
|
|
|