Bug 939896 part 5: Move PositionItemInMainAxis to live on FlexLine, and make it position all the line's items. r=mats

This commit is contained in:
Daniel Holbert 2013-11-26 10:27:52 -08:00
parent bb73dce218
commit d108bffd8c
2 changed files with 36 additions and 36 deletions

View File

@ -550,6 +550,10 @@ public:
return mBaselineOffsetFromCrossStart;
}
void PositionItemsInMainAxis(uint8_t aJustifyContent,
nscoord aContentBoxMainSize,
const FlexboxAxisTracker& aAxisTracker);
void PositionItemsInCrossAxis(nscoord aLineStartPosition,
const FlexboxAxisTracker& aAxisTracker);
@ -1121,10 +1125,9 @@ protected:
// content-box.
class MOZ_STACK_CLASS MainAxisPositionTracker : public PositionTracker {
public:
MainAxisPositionTracker(nsFlexContainerFrame* aFlexContainerFrame,
const FlexboxAxisTracker& aAxisTracker,
const nsHTMLReflowState& aReflowState,
MainAxisPositionTracker(const FlexboxAxisTracker& aAxisTracker,
const nsTArray<FlexItem>& aItems,
uint8_t aJustifyContent,
nscoord aContentBoxMainSize);
~MainAxisPositionTracker() {
@ -1583,19 +1586,16 @@ nsFlexContainerFrame::ResolveFlexibleLengths(
}
MainAxisPositionTracker::
MainAxisPositionTracker(nsFlexContainerFrame* aFlexContainerFrame,
const FlexboxAxisTracker& aAxisTracker,
const nsHTMLReflowState& aReflowState,
MainAxisPositionTracker(const FlexboxAxisTracker& aAxisTracker,
const nsTArray<FlexItem>& aItems,
uint8_t aJustifyContent,
nscoord aContentBoxMainSize)
: PositionTracker(aAxisTracker.GetMainAxis()),
mPackingSpaceRemaining(aContentBoxMainSize), // we chip away at this below
mNumAutoMarginsInMainAxis(0),
mNumPackingSpacesRemaining(0)
mNumPackingSpacesRemaining(0),
mJustifyContent(aJustifyContent)
{
MOZ_ASSERT(aReflowState.frame == aFlexContainerFrame,
"Expecting the reflow state for the flex container frame");
// mPackingSpaceRemaining is initialized to the container's main size. Now
// we'll subtract out the main sizes of our flex items, so that it ends up
// with the *actual* amount of packing space.
@ -1613,7 +1613,6 @@ MainAxisPositionTracker::
mNumAutoMarginsInMainAxis = 0;
}
mJustifyContent = aFlexContainerFrame->StylePosition()->mJustifyContent;
// If packing space is negative, 'space-between' behaves like 'flex-start',
// and 'space-around' behaves like 'center'. In those cases, it's simplest to
// just pretend we have a different 'justify-content' value and share code.
@ -2140,27 +2139,34 @@ nsFlexContainerFrame::ComputeFlexContainerCrossSize(
}
void
nsFlexContainerFrame::PositionItemInMainAxis(
MainAxisPositionTracker& aMainAxisPosnTracker,
FlexItem& aItem)
FlexLine::PositionItemsInMainAxis(uint8_t aJustifyContent,
nscoord aContentBoxMainSize,
const FlexboxAxisTracker& aAxisTracker)
{
MainAxisPositionTracker mainAxisPosnTracker(aAxisTracker, mItems,
aJustifyContent,
aContentBoxMainSize);
for (uint32_t i = 0; i < mItems.Length(); ++i) {
FlexItem& item = mItems[i];
nscoord itemMainBorderBoxSize =
aItem.GetMainSize() +
aItem.GetBorderPaddingSizeInAxis(aMainAxisPosnTracker.GetAxis());
item.GetMainSize() +
item.GetBorderPaddingSizeInAxis(mainAxisPosnTracker.GetAxis());
// Resolve any main-axis 'auto' margins on aChild to an actual value.
aMainAxisPosnTracker.ResolveAutoMarginsInMainAxis(aItem);
mainAxisPosnTracker.ResolveAutoMarginsInMainAxis(item);
// Advance our position tracker to child's upper-left content-box corner,
// and use that as its position in the main axis.
aMainAxisPosnTracker.EnterMargin(aItem.GetMargin());
aMainAxisPosnTracker.EnterChildFrame(itemMainBorderBoxSize);
mainAxisPosnTracker.EnterMargin(item.GetMargin());
mainAxisPosnTracker.EnterChildFrame(itemMainBorderBoxSize);
aItem.SetMainPosition(aMainAxisPosnTracker.GetPosition());
item.SetMainPosition(mainAxisPosnTracker.GetPosition());
aMainAxisPosnTracker.ExitChildFrame(itemMainBorderBoxSize);
aMainAxisPosnTracker.ExitMargin(aItem.GetMargin());
aMainAxisPosnTracker.TraversePackingSpace();
mainAxisPosnTracker.ExitChildFrame(itemMainBorderBoxSize);
mainAxisPosnTracker.ExitMargin(item.GetMargin());
mainAxisPosnTracker.TraversePackingSpace();
}
}
// Helper method to take care of children who ASK_FOR_BASELINE, when
@ -2442,12 +2448,9 @@ nsFlexContainerFrame::Reflow(nsPresContext* aPresContext,
// Main-Axis Alignment - Flexbox spec section 9.5
// ==============================================
MainAxisPositionTracker mainAxisPosnTracker(this, axisTracker,
aReflowState, line.mItems,
contentBoxMainSize);
for (uint32_t i = 0; i < line.mItems.Length(); ++i) {
PositionItemInMainAxis(mainAxisPosnTracker, line.mItems[i]);
}
line.PositionItemsInMainAxis(aReflowState.mStylePosition->mJustifyContent,
contentBoxMainSize,
axisTracker);
// Cross-Axis Alignment - Flexbox spec section 9.6
// ===============================================

View File

@ -118,9 +118,6 @@ protected:
bool* aIsDefinite,
nsReflowStatus& aStatus);
void PositionItemInMainAxis(MainAxisPositionTracker& aMainAxisPosnTracker,
FlexItem& aItem);
nsresult SizeItemInCrossAxis(nsPresContext* aPresContext,
const FlexboxAxisTracker& aAxisTracker,
nsHTMLReflowState& aChildReflowState,