Skip to content

Commit d91fa36

Browse files
committed
Backed out 2 changesets (bug 1908320) for causing wr failures on align-items-baseline-column-vert.html. CLOSED TREE
Backed out changeset 86c1052ebb70 (bug 1908320) Backed out changeset 99afd830a8bd (bug 1908320)
1 parent 6c7c730 commit d91fa36

File tree

6 files changed

+70
-64
lines changed

6 files changed

+70
-64
lines changed

layout/generic/nsGridContainerFrame.cpp

Lines changed: 41 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -2118,10 +2118,7 @@ struct nsGridContainerFrame::Tracks {
21182118
uint32_t mBaselineTrack;
21192119
nscoord mBaseline;
21202120
nscoord mSize;
2121-
// True if the baseline is not parallel to the alignment context.
2122-
bool mIsOrthogonal;
21232121
GridItemInfo* mGridItem;
2124-
21252122
static bool IsBaselineTrackLessThan(const ItemBaselineData& a,
21262123
const ItemBaselineData& b) {
21272124
return a.mBaselineTrack < b.mBaselineTrack;
@@ -5921,37 +5918,22 @@ void nsGridContainerFrame::Tracks::CalculateItemBaselines(
59215918
nscoord maxDescent = 0;
59225919
uint32_t currentTrack = kAutoLine; // guaranteed to not match any item
59235920
uint32_t trackStartIndex = 0;
5924-
bool trackHasParallelItems = false;
59255921
for (uint32_t i = 0, len = aBaselineItems.Length(); true; ++i) {
59265922
// Find the maximum baseline and descent in the current track.
59275923
if (i != len) {
59285924
const ItemBaselineData& item = aBaselineItems[i];
59295925
if (currentTrack == item.mBaselineTrack) {
59305926
maxBaseline = std::max(maxBaseline, item.mBaseline);
59315927
maxDescent = std::max(maxDescent, item.mSize - item.mBaseline);
5932-
trackHasParallelItems |= !item.mIsOrthogonal;
59335928
continue;
59345929
}
59355930
}
5936-
// Baseline alignment does not take effect if all items in the alignment
5937-
// context is orthogonal to the baseline axis.
5938-
if (trackHasParallelItems) {
5939-
// Iterate the current track again and update the baseline offsets making
5940-
// all items baseline-aligned within this group in this track.
5941-
for (uint32_t j = trackStartIndex; j < i; ++j) {
5942-
const ItemBaselineData& item = aBaselineItems[j];
5943-
item.mGridItem->mBaselineOffset[mAxis] = maxBaseline - item.mBaseline;
5944-
MOZ_ASSERT(item.mGridItem->mBaselineOffset[mAxis] >= 0);
5945-
}
5946-
} else {
5947-
for (uint32_t j = trackStartIndex; j < i; ++j) {
5948-
const ItemBaselineData& item = aBaselineItems[j];
5949-
item.mGridItem->mBaselineOffset[mAxis] = 0;
5950-
// The item is still baseline aligned, but we remove the type so that we
5951-
// can still get fallback alignment.
5952-
item.mGridItem->mState[mAxis] &=
5953-
~(ItemState::eSelfBaseline | ItemState::eContentBaseline);
5954-
}
5931+
// Iterate the current track again and update the baseline offsets making
5932+
// all items baseline-aligned within this group in this track.
5933+
for (uint32_t j = trackStartIndex; j < i; ++j) {
5934+
const ItemBaselineData& item = aBaselineItems[j];
5935+
item.mGridItem->mBaselineOffset[mAxis] = maxBaseline - item.mBaseline;
5936+
MOZ_ASSERT(item.mGridItem->mBaselineOffset[mAxis] >= 0);
59555937
}
59565938
if (i != 0) {
59575939
// Store the size of this baseline-aligned subtree.
@@ -5972,7 +5954,6 @@ void nsGridContainerFrame::Tracks::CalculateItemBaselines(
59725954
// Initialize data for the next track with baseline-aligned items.
59735955
const ItemBaselineData& item = aBaselineItems[i];
59745956
currentTrack = item.mBaselineTrack;
5975-
trackHasParallelItems = !item.mIsOrthogonal;
59765957
trackStartIndex = i;
59775958
maxBaseline = item.mBaseline;
59785959
maxDescent = item.mSize - item.mBaseline;
@@ -5987,7 +5968,6 @@ void nsGridContainerFrame::Tracks::InitializeItemBaselines(
59875968
return;
59885969
}
59895970

5990-
const bool isInlineAxis = mAxis == LogicalAxis::Inline; // i.e. columns
59915971
nsTArray<ItemBaselineData> firstBaselineItems;
59925972
nsTArray<ItemBaselineData> lastBaselineItems;
59935973
const WritingMode containerWM = aState.mWM;
@@ -5998,6 +5978,7 @@ void nsGridContainerFrame::Tracks::InitializeItemBaselines(
59985978
// baseline sharing group.
59995979
auto containerBlockStartSide =
60005980
containerWM.PhysicalSide(MakeLogicalSide(mAxis, LogicalEdge::Start));
5981+
60015982
for (GridItemInfo& gridItem : aGridItems) {
60025983
if (gridItem.IsSubgrid(mAxis)) {
60035984
// A subgrid itself is never baseline-aligned.
@@ -6010,30 +5991,36 @@ void nsGridContainerFrame::Tracks::InitializeItemBaselines(
60105991
const auto childWM = child->GetWritingMode();
60115992

60125993
const bool isOrthogonal = containerWM.IsOrthogonalTo(childWM);
5994+
const bool isInlineAxis = mAxis == LogicalAxis::Inline; // i.e. columns
5995+
5996+
// XXX update the line below to include orthogonal grid/table boxes
5997+
// XXX since they have baselines in both dimensions. And flexbox with
5998+
// XXX reversed main/cross axis?
60135999
const bool itemHasBaselineParallelToTrack = isInlineAxis == isOrthogonal;
6000+
if (itemHasBaselineParallelToTrack) {
6001+
// [align|justify]-self:[last ]baseline.
6002+
auto selfAlignment =
6003+
isOrthogonal
6004+
? child->StylePosition()->UsedJustifySelf(containerStyle)._0
6005+
: child->StylePosition()->UsedAlignSelf(containerStyle)._0;
6006+
selfAlignment &= ~StyleAlignFlags::FLAG_BITS;
6007+
if (selfAlignment == StyleAlignFlags::BASELINE) {
6008+
state |= ItemState::eFirstBaseline | ItemState::eSelfBaseline;
6009+
const GridArea& area = gridItem.mArea;
6010+
baselineTrack = isInlineAxis ? area.mCols.mStart : area.mRows.mStart;
6011+
} else if (selfAlignment == StyleAlignFlags::LAST_BASELINE) {
6012+
state |= ItemState::eLastBaseline | ItemState::eSelfBaseline;
6013+
const GridArea& area = gridItem.mArea;
6014+
baselineTrack = (isInlineAxis ? area.mCols.mEnd : area.mRows.mEnd) - 1;
6015+
}
60146016

6015-
// [align|justify]-self:[last ]baseline.
6016-
auto selfAlignment =
6017-
isInlineAxis
6018-
? child->StylePosition()->UsedJustifySelf(containerStyle)._0
6019-
: child->StylePosition()->UsedAlignSelf(containerStyle)._0;
6020-
selfAlignment &= ~StyleAlignFlags::FLAG_BITS;
6021-
if (selfAlignment == StyleAlignFlags::BASELINE) {
6022-
state |= ItemState::eFirstBaseline | ItemState::eSelfBaseline;
6023-
const GridArea& area = gridItem.mArea;
6024-
baselineTrack = isInlineAxis ? area.mCols.mStart : area.mRows.mStart;
6025-
} else if (selfAlignment == StyleAlignFlags::LAST_BASELINE) {
6026-
state |= ItemState::eLastBaseline | ItemState::eSelfBaseline;
6027-
const GridArea& area = gridItem.mArea;
6028-
baselineTrack = (isInlineAxis ? area.mCols.mEnd : area.mRows.mEnd) - 1;
6029-
}
6030-
6031-
// https://drafts.csswg.org/css-align-3/#baseline-align-content
6032-
// Baseline content-alignment can only apply if the align-content axis is
6033-
// parallel with the box’s block axis; otherwise the fallback alignment is
6034-
// used.
6035-
if (!isInlineAxis) {
60366017
// [align|justify]-content:[last ]baseline.
6018+
// https://drafts.csswg.org/css-align-3/#baseline-align-content
6019+
// "[...] and its computed 'align-self' or 'justify-self' (whichever
6020+
// affects its block axis) is 'stretch' or 'self-start' ('self-end').
6021+
// For this purpose, the 'start', 'end', 'flex-start', and 'flex-end'
6022+
// values of 'align-self' are treated as either 'self-start' or
6023+
// 'self-end', whichever they end up equivalent to.
60376024
auto alignContent = child->StylePosition()->mAlignContent.primary;
60386025
alignContent &= ~StyleAlignFlags::FLAG_BITS;
60396026
if (alignContent == StyleAlignFlags::BASELINE ||
@@ -6140,10 +6127,8 @@ void nsGridContainerFrame::Tracks::InitializeItemBaselines(
61406127
? grid->GetBBaseline(baselineAlignment)
61416128
: grid->GetIBaseline(baselineAlignment));
61426129
} else {
6143-
if (itemHasBaselineParallelToTrack) {
6144-
baseline = child->GetNaturalBaselineBOffset(
6145-
childWM, baselineAlignment, BaselineExportContext::Other);
6146-
}
6130+
baseline = child->GetNaturalBaselineBOffset(
6131+
childWM, baselineAlignment, BaselineExportContext::Other);
61476132

61486133
if (!baseline) {
61496134
// If baseline alignment is specified on a grid item whose size in
@@ -6196,9 +6181,8 @@ void nsGridContainerFrame::Tracks::InitializeItemBaselines(
61966181
(baselineSharingGroup == BaselineSharingGroup::First)
61976182
? firstBaselineItems
61986183
: lastBaselineItems;
6199-
baselineItems.AppendElement(
6200-
ItemBaselineData{baselineTrack, finalBaseline, alignSize,
6201-
!itemHasBaselineParallelToTrack, &gridItem});
6184+
baselineItems.AppendElement(ItemBaselineData{
6185+
baselineTrack, finalBaseline, alignSize, &gridItem});
62026186
} else {
62036187
state &= ~ItemState::eAllBaselineBits;
62046188
}
@@ -6341,9 +6325,8 @@ void nsGridContainerFrame::Tracks::InitializeItemBaselinesInMasonryAxis(
63416325
baseline;
63426326
}
63436327
alignSize = frameSize;
6344-
aFirstBaselineItems.AppendElement(
6345-
ItemBaselineData({baselineTrack, baseline, alignSize,
6346-
/* isOrthogonal */ false, &gridItem}));
6328+
aFirstBaselineItems.AppendElement(ItemBaselineData(
6329+
{baselineTrack, baseline, alignSize, &gridItem}));
63476330
} else {
63486331
state &= ~ItemState::eAllBaselineBits;
63496332
}
@@ -6393,8 +6376,7 @@ void nsGridContainerFrame::Tracks::InitializeItemBaselinesInMasonryAxis(
63936376
auto alignSize =
63946377
frameSize + (isInlineAxis ? m.IStartEnd(wm) : m.BStartEnd(wm));
63956378
aLastBaselineItems.AppendElement(
6396-
ItemBaselineData({baselineTrack, descent, alignSize,
6397-
/* isOrthogonal */ false, &gridItem}));
6379+
ItemBaselineData({baselineTrack, descent, alignSize, &gridItem}));
63986380
} else {
63996381
state &= ~ItemState::eAllBaselineBits;
64006382
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[grid-align-baseline-003.html]
2+
[#target > div 3]
3+
expected: FAIL

testing/web-platform/meta/css/css-grid/alignment/grid-item-mixed-baseline-001.html.ini

Lines changed: 0 additions & 2 deletions
This file was deleted.

testing/web-platform/meta/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-002.html.ini

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,21 @@
3737
[.inline-grid 12]
3838
expected: FAIL
3939

40+
[.inline-grid 13]
41+
expected: FAIL
42+
43+
[.inline-grid 14]
44+
expected: FAIL
45+
46+
[.inline-grid 15]
47+
expected: FAIL
48+
49+
[.inline-grid 16]
50+
expected: FAIL
51+
52+
[.inline-grid 17]
53+
expected: FAIL
54+
4055
[.inline-grid 19]
4156
expected: FAIL
4257

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
11
[grid-self-baseline-not-applied-if-sizing-cyclic-dependency-003.html]
22
expected:
33
if (os == "android") and fission: [OK, TIMEOUT]
4-
[.grid 4]
4+
[.grid 1]
55
expected: FAIL
66

7-
[.grid 6]
7+
[.grid 3]
8+
expected: FAIL
9+
10+
[.grid 2]
811
expected: FAIL
912

10-
[.grid 5]
13+
[.grid 4]
14+
expected: FAIL
15+
16+
[.grid 6]
1117
expected: FAIL
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
[grid-self-baseline-vertical-lr-002.html]
2+
expected: FAIL

0 commit comments

Comments
 (0)