Index: sky/engine/core/rendering/RenderBlockFlow.h |
diff --git a/sky/engine/core/rendering/RenderBlockFlow.h b/sky/engine/core/rendering/RenderBlockFlow.h |
index e748c254142e868743ccf2cd12b7714a487f0565..06b40e3da7ff5138ad3f1d50980b0b20d515fdfd 100644 |
--- a/sky/engine/core/rendering/RenderBlockFlow.h |
+++ b/sky/engine/core/rendering/RenderBlockFlow.h |
@@ -42,7 +42,6 @@ |
namespace blink { |
-class MarginInfo; |
class LineBreaker; |
class LineWidth; |
class FloatingObject; |
@@ -51,7 +50,6 @@ class RenderBlockFlow : public RenderBlock { |
public: |
explicit RenderBlockFlow(ContainerNode*); |
virtual ~RenderBlockFlow(); |
- virtual void trace(Visitor*) override; |
static RenderBlockFlow* createAnonymous(Document*); |
@@ -141,8 +139,8 @@ private: |
void layoutBlockFlow(bool relayoutChildren, SubtreeLayoutScope&); |
void layoutBlockChildren(bool relayoutChildren, SubtreeLayoutScope&, LayoutUnit beforeEdge, LayoutUnit afterEdge); |
- void layoutBlockChild(RenderBox* child, MarginInfo&); |
- void adjustPositionedBlock(RenderBox* child, const MarginInfo&); |
+ void layoutBlockChild(RenderBox* child); |
+ void adjustPositionedBlock(RenderBox* child); |
virtual bool hitTestFloats(const HitTestRequest&, HitTestResult&, const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffset) override final; |
@@ -176,123 +174,14 @@ public: |
bool everHadLayout; |
}; |
- class MarginValues { |
- public: |
- MarginValues(LayoutUnit beforePos, LayoutUnit beforeNeg, LayoutUnit afterPos, LayoutUnit afterNeg) |
- : m_positiveMarginBefore(beforePos) |
- , m_negativeMarginBefore(beforeNeg) |
- , m_positiveMarginAfter(afterPos) |
- , m_negativeMarginAfter(afterNeg) |
- { } |
- |
- LayoutUnit positiveMarginBefore() const { return m_positiveMarginBefore; } |
- LayoutUnit negativeMarginBefore() const { return m_negativeMarginBefore; } |
- LayoutUnit positiveMarginAfter() const { return m_positiveMarginAfter; } |
- LayoutUnit negativeMarginAfter() const { return m_negativeMarginAfter; } |
- |
- void setPositiveMarginBefore(LayoutUnit pos) { m_positiveMarginBefore = pos; } |
- void setNegativeMarginBefore(LayoutUnit neg) { m_negativeMarginBefore = neg; } |
- void setPositiveMarginAfter(LayoutUnit pos) { m_positiveMarginAfter = pos; } |
- void setNegativeMarginAfter(LayoutUnit neg) { m_negativeMarginAfter = neg; } |
- |
- private: |
- LayoutUnit m_positiveMarginBefore; |
- LayoutUnit m_negativeMarginBefore; |
- LayoutUnit m_positiveMarginAfter; |
- LayoutUnit m_negativeMarginAfter; |
- }; |
- MarginValues marginValuesForChild(RenderBox* child) const; |
- |
- // Allocated only when some of these fields have non-default values |
- struct RenderBlockFlowRareData : public DummyBase<RenderBlockFlowRareData> { |
- WTF_MAKE_NONCOPYABLE(RenderBlockFlowRareData); WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED; |
- public: |
- RenderBlockFlowRareData(const RenderBlockFlow* block) |
- : m_margins(positiveMarginBeforeDefault(block), negativeMarginBeforeDefault(block), positiveMarginAfterDefault(block), negativeMarginAfterDefault(block)) |
- , m_discardMarginBefore(false) |
- , m_discardMarginAfter(false) |
- { |
- } |
- void trace(Visitor*); |
- |
- static LayoutUnit positiveMarginBeforeDefault(const RenderBlockFlow* block) |
- { |
- return std::max<LayoutUnit>(block->marginBefore(), 0); |
- } |
- static LayoutUnit negativeMarginBeforeDefault(const RenderBlockFlow* block) |
- { |
- return std::max<LayoutUnit>(-block->marginBefore(), 0); |
- } |
- static LayoutUnit positiveMarginAfterDefault(const RenderBlockFlow* block) |
- { |
- return std::max<LayoutUnit>(block->marginAfter(), 0); |
- } |
- static LayoutUnit negativeMarginAfterDefault(const RenderBlockFlow* block) |
- { |
- return std::max<LayoutUnit>(-block->marginAfter(), 0); |
- } |
- |
- MarginValues m_margins; |
- bool m_discardMarginBefore : 1; |
- bool m_discardMarginAfter : 1; |
- }; |
- LayoutUnit marginOffsetForSelfCollapsingBlock(); |
- |
protected: |
- LayoutUnit maxPositiveMarginBefore() const { return m_rareData ? m_rareData->m_margins.positiveMarginBefore() : RenderBlockFlowRareData::positiveMarginBeforeDefault(this); } |
- LayoutUnit maxNegativeMarginBefore() const { return m_rareData ? m_rareData->m_margins.negativeMarginBefore() : RenderBlockFlowRareData::negativeMarginBeforeDefault(this); } |
- LayoutUnit maxPositiveMarginAfter() const { return m_rareData ? m_rareData->m_margins.positiveMarginAfter() : RenderBlockFlowRareData::positiveMarginAfterDefault(this); } |
- LayoutUnit maxNegativeMarginAfter() const { return m_rareData ? m_rareData->m_margins.negativeMarginAfter() : RenderBlockFlowRareData::negativeMarginAfterDefault(this); } |
- |
- void setMaxMarginBeforeValues(LayoutUnit pos, LayoutUnit neg); |
- void setMaxMarginAfterValues(LayoutUnit pos, LayoutUnit neg); |
- |
- void setMustDiscardMarginBefore(bool = true); |
- void setMustDiscardMarginAfter(bool = true); |
- |
- bool mustDiscardMarginBefore() const; |
- bool mustDiscardMarginAfter() const; |
- |
- bool mustDiscardMarginBeforeForChild(const RenderBox*) const; |
- bool mustDiscardMarginAfterForChild(const RenderBox*) const; |
- |
- bool mustSeparateMarginBeforeForChild(const RenderBox*) const; |
- bool mustSeparateMarginAfterForChild(const RenderBox*) const; |
- |
- void initMaxMarginValues() |
- { |
- if (m_rareData) { |
- m_rareData->m_margins = MarginValues(RenderBlockFlowRareData::positiveMarginBeforeDefault(this) , RenderBlockFlowRareData::negativeMarginBeforeDefault(this), |
- RenderBlockFlowRareData::positiveMarginAfterDefault(this), RenderBlockFlowRareData::negativeMarginAfterDefault(this)); |
- |
- m_rareData->m_discardMarginBefore = false; |
- m_rareData->m_discardMarginAfter = false; |
- } |
- } |
- |
virtual ETextAlign textAlignmentForLine(bool endsWithSoftBreak) const; |
private: |
- virtual LayoutUnit collapsedMarginBefore() const override final { return maxPositiveMarginBefore() - maxNegativeMarginBefore(); } |
- virtual LayoutUnit collapsedMarginAfter() const override final { return maxPositiveMarginAfter() - maxNegativeMarginAfter(); } |
- |
- LayoutUnit collapseMargins(RenderBox* child, MarginInfo&, bool childIsSelfCollapsing); |
- LayoutUnit estimateLogicalTopPosition(RenderBox* child, const MarginInfo&); |
- void marginBeforeEstimateForChild(RenderBox*, LayoutUnit&, LayoutUnit&, bool&) const; |
- void handleAfterSideOfBlock(RenderBox* lastChild, LayoutUnit top, LayoutUnit bottom, MarginInfo&); |
- void setCollapsedBottomMargin(const MarginInfo&); |
- |
- RenderBlockFlowRareData& ensureRareData(); |
- |
LayoutUnit m_paintInvalidationLogicalTop; |
LayoutUnit m_paintInvalidationLogicalBottom; |
- virtual bool isSelfCollapsingBlock() const override; |
- |
protected: |
- OwnPtr<RenderBlockFlowRareData> m_rareData; |
- |
friend class BreakingContext; // FIXME: It uses insertFloatingObject and positionNewFloatOnLine, if we move those out from the private scope/add a helper to LineBreaker, we can remove this friend |
- friend class MarginInfo; |
friend class LineBreaker; |
// FIXME-BLOCKFLOW: These methods have implementations in |