author | Daniel Holbert <dholbert@cs.stanford.edu> |
Tue, 22 Jul 2014 08:24:36 -0700 | |
changeset 195510 | 80c6223ed885ee3f8dc08a4881a91fc5579f24ff |
parent 195509 | 106c96d0abd10936e41b588df9da8ab0230dee81 |
child 195511 | ab0b0aea5baaf1a1ac003adf2c0981a2508d8c37 |
push id | 27184 |
push user | kwierso@gmail.com |
push date | Wed, 23 Jul 2014 00:39:18 +0000 |
treeherder | mozilla-central@0ad20ad7b70a [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | mats |
bugs | 1037177 |
milestone | 34.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/layout/generic/nsFlexContainerFrame.cpp +++ b/layout/generic/nsFlexContainerFrame.cpp @@ -253,21 +253,20 @@ private: * Represents a flex item. * Includes the various pieces of input that the Flexbox Layout Algorithm uses * to resolve a flexible width. */ class nsFlexContainerFrame::FlexItem : public LinkedListElement<FlexItem> { public: // Normal constructor: - FlexItem(nsIFrame* aChildFrame, + FlexItem(nsHTMLReflowState& aFlexItemReflowState, float aFlexGrow, float aFlexShrink, nscoord aMainBaseSize, nscoord aMainMinSize, nscoord aMainMaxSize, nscoord aCrossMinSize, nscoord aCrossMaxSize, - nsMargin aMargin, nsMargin aBorderPadding, const FlexboxAxisTracker& aAxisTracker); // Simplified constructor, to be used only for generating "struts": FlexItem(nsIFrame* aChildFrame, nscoord aCrossSize); // Accessors nsIFrame* Frame() const { return mFrame; } nscoord GetFlexBaseSize() const { return mFlexBaseSize; } @@ -1013,22 +1012,20 @@ nsFlexContainerFrame::GenerateFlexItemFo mainMaxSize = std::max(mainMaxSize, widgetMainMinSize); crossMinSize = std::max(crossMinSize, widgetCrossMinSize); crossMaxSize = std::max(crossMaxSize, widgetCrossMinSize); } } // Construct the flex item! - FlexItem* item = new FlexItem(aChildFrame, + FlexItem* item = new FlexItem(childRS, flexGrow, flexShrink, flexBaseSize, mainMinSize, mainMaxSize, crossMinSize, crossMaxSize, - childRS.ComputedPhysicalMargin(), - childRS.ComputedPhysicalBorderPadding(), aAxisTracker); // If we're inflexible, we can just freeze to our hypothetical main-size // up-front. Similarly, if we're a fixed-size widget, we only have one // valid size, so we freeze to keep ourselves from flexing. if (isFixedSizeWidget || (flexGrow == 0.0f && flexShrink == 0.0f)) { item->Freeze(); } @@ -1142,57 +1139,57 @@ nsFlexContainerFrame:: } if (isMainMinSizeAuto) { aFlexItem.UpdateMainMinSize(childDesiredHeight); } aFlexItem.SetHadMeasuringReflow(); } -FlexItem::FlexItem(nsIFrame* aChildFrame, +FlexItem::FlexItem(nsHTMLReflowState& aFlexItemReflowState, float aFlexGrow, float aFlexShrink, nscoord aFlexBaseSize, nscoord aMainMinSize, nscoord aMainMaxSize, nscoord aCrossMinSize, nscoord aCrossMaxSize, - nsMargin aMargin, nsMargin aBorderPadding, const FlexboxAxisTracker& aAxisTracker) - : mFrame(aChildFrame), + : mFrame(aFlexItemReflowState.frame), mFlexGrow(aFlexGrow), mFlexShrink(aFlexShrink), - mBorderPadding(aBorderPadding), - mMargin(aMargin), + mBorderPadding(aFlexItemReflowState.ComputedPhysicalBorderPadding()), + mMargin(aFlexItemReflowState.ComputedPhysicalMargin()), mMainMinSize(aMainMinSize), mMainMaxSize(aMainMaxSize), mCrossMinSize(aCrossMinSize), mCrossMaxSize(aCrossMaxSize), mMainPosn(0), mCrossSize(0), mCrossPosn(0), mAscent(0), mShareOfWeightSoFar(0.0f), mIsFrozen(false), mHadMinViolation(false), mHadMaxViolation(false), mHadMeasuringReflow(false), mIsStretched(false), mIsStrut(false), - mAlignSelf(aChildFrame->StylePosition()->mAlignSelf) + mAlignSelf(aFlexItemReflowState.mStylePosition->mAlignSelf) { MOZ_ASSERT(mFrame, "expecting a non-null child frame"); MOZ_ASSERT(mFrame->GetType() != nsGkAtoms::placeholderFrame, "placeholder frames should not be treated as flex items"); MOZ_ASSERT(!(mFrame->GetStateBits() & NS_FRAME_OUT_OF_FLOW), "out-of-flow frames should not be treated as flex items"); SetFlexBaseSizeAndMainSize(aFlexBaseSize); // Assert that any "auto" margin components are set to 0. // (We'll resolve them later; until then, we want to treat them as 0-sized.) #ifdef DEBUG { - const nsStyleSides& styleMargin = mFrame->StyleMargin()->mMargin; + const nsStyleSides& styleMargin = + aFlexItemReflowState.mStyleMargin->mMargin; NS_FOR_CSS_SIDES(side) { if (styleMargin.GetUnit(side) == eStyleUnit_Auto) { MOZ_ASSERT(GetMarginComponentForSide(side) == 0, "Someone else tried to resolve our auto margin"); } } } #endif // DEBUG