Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Unified Diff: Source/core/rendering/RenderFlowThread.h

Issue 143323014: *** DO NOT LAND *** Attempt to understand Regions complexity Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/rendering/RenderFlexibleBox.cpp ('k') | Source/core/rendering/RenderFlowThread.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « Source/core/rendering/RenderFlexibleBox.cpp ('k') | Source/core/rendering/RenderFlowThread.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698