mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-28 04:35:33 +00:00
Bug 1174574 part 1 - [css-grid] Move the guts of nsGridContainerFrame::CalculateTrackSizes into a Tracks method. r=dholbert
This commit is contained in:
parent
60bf6b5654
commit
f91e1d63d8
@ -231,7 +231,8 @@ struct MOZ_STACK_CLASS nsGridContainerFrame::Tracks
|
|||||||
explicit Tracks(Dimension aDimension) : mDimension(aDimension) {}
|
explicit Tracks(Dimension aDimension) : mDimension(aDimension) {}
|
||||||
|
|
||||||
void Initialize(const TrackSizingFunctions& aFunctions,
|
void Initialize(const TrackSizingFunctions& aFunctions,
|
||||||
nscoord aPercentageBasis);
|
uint32_t aNumTracks,
|
||||||
|
nscoord aContentBoxSize);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return true if aRange spans at least one track with an intrinsic sizing
|
* Return true if aRange spans at least one track with an intrinsic sizing
|
||||||
@ -574,6 +575,18 @@ struct MOZ_STACK_CLASS nsGridContainerFrame::Tracks
|
|||||||
nsTArray<GridItemInfo>& aGridItems,
|
nsTArray<GridItemInfo>& aGridItems,
|
||||||
const TrackSizingFunctions& aFunctions,
|
const TrackSizingFunctions& aFunctions,
|
||||||
nscoord aAvailableSize);
|
nscoord aAvailableSize);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implements "12.3. Track Sizing Algorithm"
|
||||||
|
* http://dev.w3.org/csswg/css-grid/#algo-track-sizing
|
||||||
|
*/
|
||||||
|
void CalculateSizes(GridReflowState& aState,
|
||||||
|
nsTArray<GridItemInfo>& aGridItems,
|
||||||
|
const TrackSizingFunctions& aFunctions,
|
||||||
|
nscoord aContentSize,
|
||||||
|
LineRange GridArea::* aRange,
|
||||||
|
IntrinsicISizeType aConstraint);
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
void Dump() const
|
void Dump() const
|
||||||
{
|
{
|
||||||
@ -1598,9 +1611,18 @@ nsGridContainerFrame::TrackSize::Initialize(nscoord aPercentageBasis,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
nsGridContainerFrame::Tracks::Initialize(const TrackSizingFunctions& aFunctions,
|
nsGridContainerFrame::Tracks::Initialize(
|
||||||
nscoord aPercentageBasis)
|
const TrackSizingFunctions& aFunctions,
|
||||||
|
uint32_t aNumTracks,
|
||||||
|
nscoord aContentBoxSize)
|
||||||
{
|
{
|
||||||
|
mSizes.SetLength(aNumTracks);
|
||||||
|
PodZero(mSizes.Elements(), mSizes.Length());
|
||||||
|
nscoord percentageBasis = aContentBoxSize;
|
||||||
|
if (percentageBasis == NS_UNCONSTRAINEDSIZE) {
|
||||||
|
percentageBasis = 0;
|
||||||
|
}
|
||||||
|
|
||||||
const uint32_t explicitGridOffset = aFunctions.mExplicitGridOffset;
|
const uint32_t explicitGridOffset = aFunctions.mExplicitGridOffset;
|
||||||
MOZ_ASSERT(mSizes.Length() >=
|
MOZ_ASSERT(mSizes.Length() >=
|
||||||
explicitGridOffset + aFunctions.mMinSizingFunctions.Length());
|
explicitGridOffset + aFunctions.mMinSizingFunctions.Length());
|
||||||
@ -1608,19 +1630,19 @@ nsGridContainerFrame::Tracks::Initialize(const TrackSizingFunctions& aFunctions,
|
|||||||
aFunctions.mMaxSizingFunctions.Length());
|
aFunctions.mMaxSizingFunctions.Length());
|
||||||
uint32_t i = 0;
|
uint32_t i = 0;
|
||||||
for (; i < explicitGridOffset; ++i) {
|
for (; i < explicitGridOffset; ++i) {
|
||||||
mSizes[i].Initialize(aPercentageBasis,
|
mSizes[i].Initialize(percentageBasis,
|
||||||
aFunctions.mAutoMinSizing,
|
aFunctions.mAutoMinSizing,
|
||||||
aFunctions.mAutoMaxSizing);
|
aFunctions.mAutoMaxSizing);
|
||||||
}
|
}
|
||||||
uint32_t j = 0;
|
uint32_t j = 0;
|
||||||
for (uint32_t len = aFunctions.mMinSizingFunctions.Length(); j < len; ++j) {
|
for (uint32_t len = aFunctions.mMinSizingFunctions.Length(); j < len; ++j) {
|
||||||
mSizes[i + j].Initialize(aPercentageBasis,
|
mSizes[i + j].Initialize(percentageBasis,
|
||||||
aFunctions.mMinSizingFunctions[j],
|
aFunctions.mMinSizingFunctions[j],
|
||||||
aFunctions.mMaxSizingFunctions[j]);
|
aFunctions.mMaxSizingFunctions[j]);
|
||||||
}
|
}
|
||||||
i += j;
|
i += j;
|
||||||
for (; i < mSizes.Length(); ++i) {
|
for (; i < mSizes.Length(); ++i) {
|
||||||
mSizes[i].Initialize(aPercentageBasis,
|
mSizes[i].Initialize(percentageBasis,
|
||||||
aFunctions.mAutoMinSizing,
|
aFunctions.mAutoMinSizing,
|
||||||
aFunctions.mAutoMaxSizing);
|
aFunctions.mAutoMaxSizing);
|
||||||
}
|
}
|
||||||
@ -1716,43 +1738,46 @@ MaxContentContribution(nsIFrame* aChild,
|
|||||||
nsLayoutUtils::PREF_ISIZE);
|
nsLayoutUtils::PREF_ISIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
nsGridContainerFrame::Tracks::CalculateSizes(
|
||||||
|
GridReflowState& aState,
|
||||||
|
nsTArray<GridItemInfo>& aGridItems,
|
||||||
|
const TrackSizingFunctions& aFunctions,
|
||||||
|
nscoord aContentBoxSize,
|
||||||
|
LineRange GridArea::* aRange,
|
||||||
|
IntrinsicISizeType aConstraint)
|
||||||
|
{
|
||||||
|
nscoord percentageBasis = aContentBoxSize;
|
||||||
|
if (percentageBasis == NS_UNCONSTRAINEDSIZE) {
|
||||||
|
percentageBasis = 0;
|
||||||
|
}
|
||||||
|
ResolveIntrinsicSize(aState, aGridItems, aFunctions, aRange, percentageBasis,
|
||||||
|
aConstraint);
|
||||||
|
if (aConstraint != nsLayoutUtils::MIN_ISIZE) {
|
||||||
|
DistributeFreeSpace(aContentBoxSize);
|
||||||
|
StretchFlexibleTracks(aState, aGridItems, aFunctions, aContentBoxSize);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
nsGridContainerFrame::CalculateTrackSizes(GridReflowState& aState,
|
nsGridContainerFrame::CalculateTrackSizes(GridReflowState& aState,
|
||||||
const LogicalSize& aContentBox,
|
const LogicalSize& aContentBox,
|
||||||
IntrinsicISizeType aConstraint)
|
IntrinsicISizeType aConstraint)
|
||||||
{
|
{
|
||||||
aState.mCols.mSizes.SetLength(mGridColEnd);
|
|
||||||
PodZero(aState.mCols.mSizes.Elements(), aState.mCols.mSizes.Length());
|
|
||||||
const WritingMode& wm = aState.mWM;
|
const WritingMode& wm = aState.mWM;
|
||||||
nscoord colPercentageBasis = aContentBox.ISize(wm);
|
aState.mCols.Initialize(aState.mColFunctions, mGridColEnd,
|
||||||
auto& colFunctions = aState.mColFunctions;
|
aContentBox.ISize(wm));
|
||||||
aState.mCols.Initialize(colFunctions, colPercentageBasis);
|
aState.mRows.Initialize(aState.mRowFunctions, mGridRowEnd,
|
||||||
aState.mCols.ResolveIntrinsicSize(aState, mGridItems, colFunctions,
|
aContentBox.BSize(wm));
|
||||||
&GridArea::mCols, colPercentageBasis,
|
|
||||||
aConstraint);
|
aState.mCols.CalculateSizes(aState, mGridItems, aState.mColFunctions,
|
||||||
if (aConstraint != nsLayoutUtils::MIN_ISIZE) {
|
aContentBox.ISize(wm), &GridArea::mCols,
|
||||||
nscoord size = aContentBox.ISize(wm);
|
aConstraint);
|
||||||
aState.mCols.DistributeFreeSpace(size);
|
|
||||||
aState.mCols.StretchFlexibleTracks(aState, mGridItems, colFunctions, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
aState.mRows.mSizes.SetLength(mGridRowEnd);
|
|
||||||
PodZero(aState.mRows.mSizes.Elements(), aState.mRows.mSizes.Length());
|
|
||||||
nscoord rowPercentageBasis = aContentBox.BSize(wm);
|
|
||||||
if (rowPercentageBasis == NS_AUTOHEIGHT) {
|
|
||||||
rowPercentageBasis = 0;
|
|
||||||
}
|
|
||||||
auto& rowFunctions = aState.mRowFunctions;
|
|
||||||
aState.mRows.Initialize(rowFunctions, rowPercentageBasis);
|
|
||||||
aState.mIter.Reset(); // XXX cleanup this Reset mess!
|
aState.mIter.Reset(); // XXX cleanup this Reset mess!
|
||||||
aState.mRows.ResolveIntrinsicSize(aState, mGridItems, rowFunctions,
|
aState.mRows.CalculateSizes(aState, mGridItems, aState.mRowFunctions,
|
||||||
&GridArea::mRows, rowPercentageBasis,
|
aContentBox.BSize(wm), &GridArea::mRows,
|
||||||
aConstraint);
|
aConstraint);
|
||||||
if (aConstraint != nsLayoutUtils::MIN_ISIZE) {
|
|
||||||
nscoord size = aContentBox.BSize(wm);
|
|
||||||
aState.mRows.DistributeFreeSpace(size);
|
|
||||||
aState.mRows.StretchFlexibleTracks(aState, mGridItems, rowFunctions, size);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
Loading…
Reference in New Issue
Block a user