Skip to content

Commit 40e4cc0

Browse files
fix build warnings and fix free space calculation in maximize step
1 parent db8a0a4 commit 40e4cc0

File tree

2 files changed

+31
-27
lines changed

2 files changed

+31
-27
lines changed

yoga/algorithm/grid/GridLayout.cpp

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -362,29 +362,29 @@ void calculateGridLayoutInternal(Node* node,
362362
// alignment of grid items happen in the grid area
363363
// measured dimension includes padding and border
364364
float actualItemWidth = item.node->getLayout().measuredDimension(Dimension::Width);
365-
auto freeSpaceInlineAxis = containingBlockWidth - actualItemWidth - marginInlineStart - marginInlineEnd;
365+
auto freeSpaceInlineAxisItem = containingBlockWidth - actualItemWidth - marginInlineStart - marginInlineEnd;
366366
float leftAutoMarginOffset = 0.0f;
367367
float rightAutoMarginOffset = 0.0f;
368368
// https://www.w3.org/TR/css-grid-1/#auto-margins
369369
// auto margins in either axis absorb positive free space prior to alignment via the box alignment properties, thereby disabling the effects of any self-alignment properties in that axis.
370370
if (item.node->style().flexStartMarginIsAuto(FlexDirection::Row, direction)
371371
&& item.node->style().flexEndMarginIsAuto(FlexDirection::Row, direction)) {
372-
leftAutoMarginOffset = freeSpaceInlineAxis / 2;
373-
rightAutoMarginOffset = freeSpaceInlineAxis / 2;
374-
freeSpaceInlineAxis = 0.0f;
372+
leftAutoMarginOffset = freeSpaceInlineAxisItem / 2;
373+
rightAutoMarginOffset = freeSpaceInlineAxisItem / 2;
374+
freeSpaceInlineAxisItem = 0.0f;
375375
} else if (item.node->style().flexStartMarginIsAuto(FlexDirection::Row, direction)) {
376-
leftAutoMarginOffset = freeSpaceInlineAxis;
377-
freeSpaceInlineAxis = 0.0f;
376+
leftAutoMarginOffset = freeSpaceInlineAxisItem;
377+
freeSpaceInlineAxisItem = 0.0f;
378378
} else if (item.node->style().flexEndMarginIsAuto(FlexDirection::Row, direction)) {
379-
rightAutoMarginOffset = freeSpaceInlineAxis;
380-
freeSpaceInlineAxis = 0.0f;
379+
rightAutoMarginOffset = freeSpaceInlineAxisItem;
380+
freeSpaceInlineAxisItem = 0.0f;
381381
}
382382

383383
float justifySelfOffset = 0.0f;
384384
if (justifySelf == Justify::End) {
385-
justifySelfOffset = freeSpaceInlineAxis;
385+
justifySelfOffset = freeSpaceInlineAxisItem;
386386
} else if (justifySelf == Justify::Center) {
387-
justifySelfOffset = freeSpaceInlineAxis / 2;
387+
justifySelfOffset = freeSpaceInlineAxisItem / 2;
388388
}
389389

390390
float finalLeft;
@@ -397,24 +397,24 @@ void calculateGridLayoutInternal(Node* node,
397397
item.node->setLayoutPosition(finalLeft, PhysicalEdge::Left);
398398

399399
float actualItemHeight = item.node->getLayout().measuredDimension(Dimension::Height);
400-
auto freeSpaceBlockAxis = containingBlockHeight - actualItemHeight - marginBlockStart - marginBlockEnd;
400+
auto freeSpaceBlockAxisItem = containingBlockHeight - actualItemHeight - marginBlockStart - marginBlockEnd;
401401
float topAutoMarginOffset = 0.0f;
402402
if (item.node->style().flexStartMarginIsAuto(FlexDirection::Column, direction)
403403
&& item.node->style().flexEndMarginIsAuto(FlexDirection::Column, direction)) {
404-
topAutoMarginOffset = freeSpaceBlockAxis / 2;
405-
freeSpaceBlockAxis = 0.0f;
404+
topAutoMarginOffset = freeSpaceBlockAxisItem / 2;
405+
freeSpaceBlockAxisItem = 0.0f;
406406
} else if (item.node->style().flexStartMarginIsAuto(FlexDirection::Column, direction)) {
407-
topAutoMarginOffset = freeSpaceBlockAxis;
408-
freeSpaceBlockAxis = 0.0f;
407+
topAutoMarginOffset = freeSpaceBlockAxisItem;
408+
freeSpaceBlockAxisItem = 0.0f;
409409
} else if (item.node->style().flexEndMarginIsAuto(FlexDirection::Column, direction)) {
410-
freeSpaceBlockAxis = 0.0f;
410+
freeSpaceBlockAxisItem = 0.0f;
411411
}
412412

413413
float alignSelfOffset = 0.0f;
414414
if (alignSelf == Align::End) {
415-
alignSelfOffset = freeSpaceBlockAxis;
415+
alignSelfOffset = freeSpaceBlockAxisItem;
416416
} else if (alignSelf == Align::Center) {
417-
alignSelfOffset = freeSpaceBlockAxis / 2;
417+
alignSelfOffset = freeSpaceBlockAxisItem / 2;
418418
}
419419

420420
float finalTop = gridAreaTop + marginBlockStart + topAutoMarginOffset + alignSelfOffset + gridBlockOffset + leadingPaddingAndBorderBlock;

yoga/algorithm/grid/TrackSizing.h

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -514,7 +514,11 @@ struct TrackSizing {
514514
void distributeFreeSpaceToTracks(Dimension dimension, float targetAvailableSize) {
515515
auto& tracks = dimension == Dimension::Width ? columnTracks : rowTracks;
516516
auto sizingMode = dimension == Dimension::Width ? widthSizingMode : heightSizingMode;
517-
auto freeSpace = calculateFreeSpace(dimension);
517+
float freeSpace = 0.0f;
518+
if (yoga::isDefined(targetAvailableSize)) {
519+
auto totalBaseSize = getTotalBaseSize(dimension);
520+
freeSpace = std::max(0.0f, targetAvailableSize - totalBaseSize);
521+
}
518522

519523
// For the purpose of this step: if sizing the grid container under a max-content constraint, the free space is infinite;
520524
// if sizing under a min-content constraint, the free space is zero.
@@ -864,18 +868,18 @@ struct TrackSizing {
864868
};
865869

866870
float getMaxContentContribution(const GridItemArea& item, Dimension dimension, const ItemConstraint& itemConstraints) {
867-
auto widthSizingMode = dimension == Dimension::Width ? SizingMode::MaxContent : itemConstraints.widthSizingMode;
868-
auto heightSizingMode = dimension == Dimension::Height ? SizingMode::MaxContent : itemConstraints.heightSizingMode;
869-
auto availableWidth = dimension == Dimension::Width ? YGUndefined : itemConstraints.width;
870-
auto availableHeight = dimension == Dimension::Height ? YGUndefined : itemConstraints.height;
871+
auto itemWidthSizingMode = dimension == Dimension::Width ? SizingMode::MaxContent : itemConstraints.widthSizingMode;
872+
auto itemHeightSizingMode = dimension == Dimension::Height ? SizingMode::MaxContent : itemConstraints.heightSizingMode;
873+
auto itemAvailableWidth = dimension == Dimension::Width ? YGUndefined : itemConstraints.width;
874+
auto itemAvailableHeight = dimension == Dimension::Height ? YGUndefined : itemConstraints.height;
871875

872876
calculateLayoutInternal(
873877
item.node,
874-
availableWidth,
875-
availableHeight,
878+
itemAvailableWidth,
879+
itemAvailableHeight,
876880
node->getLayout().direction(),
877-
widthSizingMode,
878-
heightSizingMode,
881+
itemWidthSizingMode,
882+
itemHeightSizingMode,
879883
itemConstraints.containingBlockWidth,
880884
itemConstraints.containingBlockHeight,
881885
false,

0 commit comments

Comments
 (0)