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

Unified Diff: sky/engine/core/rendering/RenderBlockFlow.h

Issue 700743002: Remove margin collapsing. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years, 1 month 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 | « sky/engine/core/rendering/RenderBlock.cpp ('k') | sky/engine/core/rendering/RenderBlockFlow.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « sky/engine/core/rendering/RenderBlock.cpp ('k') | sky/engine/core/rendering/RenderBlockFlow.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698