Bug 1434478 part 2 - Stop back-computing percentage padding/margin when the percentage basis is indefinite. Treat them as zero sized instead. r=dholbert
This commit is contained in:
@@ -5051,8 +5051,6 @@ GetDefiniteSize(const nsStyleCoord& aStyle,
|
||||
nscoord pb = aIsInlineAxis ? aPercentageBasis.value().ISize(wm)
|
||||
: aPercentageBasis.value().BSize(wm);
|
||||
if (pb == NS_UNCONSTRAINEDSIZE) {
|
||||
// XXXmats given that we're calculating an intrinsic size here,
|
||||
// maybe we should back-compute the calc-size using AddPercents?
|
||||
return false;
|
||||
}
|
||||
*aResult = std::max(0, calc->mLength +
|
||||
@@ -5296,12 +5294,9 @@ AddIntrinsicSizeOffset(gfxContext* aRenderingContext,
|
||||
nscoord result = aContentSize;
|
||||
nscoord min = aContentMinSize;
|
||||
nscoord coordOutsideSize = 0;
|
||||
float pctOutsideSize = 0;
|
||||
float pctTotal = 0.0f;
|
||||
|
||||
if (!(aFlags & nsLayoutUtils::IGNORE_PADDING)) {
|
||||
coordOutsideSize += aOffsets.hPadding;
|
||||
pctOutsideSize += aOffsets.hPctPadding;
|
||||
}
|
||||
|
||||
coordOutsideSize += aOffsets.hBorder;
|
||||
@@ -5309,21 +5304,15 @@ AddIntrinsicSizeOffset(gfxContext* aRenderingContext,
|
||||
if (aBoxSizing == StyleBoxSizing::Border) {
|
||||
min += coordOutsideSize;
|
||||
result = NSCoordSaturatingAdd(result, coordOutsideSize);
|
||||
pctTotal += pctOutsideSize;
|
||||
|
||||
coordOutsideSize = 0;
|
||||
pctOutsideSize = 0.0f;
|
||||
}
|
||||
|
||||
coordOutsideSize += aOffsets.hMargin;
|
||||
pctOutsideSize += aOffsets.hPctMargin;
|
||||
|
||||
min += coordOutsideSize;
|
||||
result = NSCoordSaturatingAdd(result, coordOutsideSize);
|
||||
pctTotal += pctOutsideSize;
|
||||
|
||||
const bool shouldAddPercent = aType == nsLayoutUtils::PREF_ISIZE ||
|
||||
(aFlags & nsLayoutUtils::ADD_PERCENTS);
|
||||
nscoord size;
|
||||
if (aType == nsLayoutUtils::MIN_ISIZE &&
|
||||
(((aStyleSize.HasPercent() || aStyleMaxSize.HasPercent()) &&
|
||||
@@ -5341,18 +5330,6 @@ AddIntrinsicSizeOffset(gfxContext* aRenderingContext,
|
||||
GetIntrinsicCoord(aStyleSize, aRenderingContext, aFrame,
|
||||
PROP_WIDTH, size)) {
|
||||
result = size + coordOutsideSize;
|
||||
if (shouldAddPercent) {
|
||||
result = nsLayoutUtils::AddPercents(result, pctOutsideSize);
|
||||
}
|
||||
} else {
|
||||
// NOTE: We could really do a lot better for percents and for some
|
||||
// cases of calc() containing percent (certainly including any where
|
||||
// the coefficient on the percent is positive and there are no max()
|
||||
// expressions). However, doing better for percents wouldn't be
|
||||
// backwards compatible.
|
||||
if (shouldAddPercent) {
|
||||
result = nsLayoutUtils::AddPercents(result, pctTotal);
|
||||
}
|
||||
}
|
||||
|
||||
nscoord maxSize = aFixedMaxSize ? *aFixedMaxSize : 0;
|
||||
@@ -5360,9 +5337,6 @@ AddIntrinsicSizeOffset(gfxContext* aRenderingContext,
|
||||
GetIntrinsicCoord(aStyleMaxSize, aRenderingContext, aFrame,
|
||||
PROP_MAX_WIDTH, maxSize)) {
|
||||
maxSize += coordOutsideSize;
|
||||
if (shouldAddPercent) {
|
||||
maxSize = nsLayoutUtils::AddPercents(maxSize, pctOutsideSize);
|
||||
}
|
||||
if (result > maxSize) {
|
||||
result = maxSize;
|
||||
}
|
||||
@@ -5373,17 +5347,11 @@ AddIntrinsicSizeOffset(gfxContext* aRenderingContext,
|
||||
GetIntrinsicCoord(aStyleMinSize, aRenderingContext, aFrame,
|
||||
PROP_MIN_WIDTH, minSize)) {
|
||||
minSize += coordOutsideSize;
|
||||
if (shouldAddPercent) {
|
||||
minSize = nsLayoutUtils::AddPercents(minSize, pctOutsideSize);
|
||||
}
|
||||
if (result < minSize) {
|
||||
result = minSize;
|
||||
}
|
||||
}
|
||||
|
||||
if (shouldAddPercent) {
|
||||
min = nsLayoutUtils::AddPercents(min, pctTotal);
|
||||
}
|
||||
if (result < min) {
|
||||
result = min;
|
||||
}
|
||||
@@ -5400,9 +5368,6 @@ AddIntrinsicSizeOffset(gfxContext* aRenderingContext,
|
||||
: devSize.width);
|
||||
// GetMinimumWidgetSize() returns a border-box width.
|
||||
themeSize += aOffsets.hMargin;
|
||||
if (shouldAddPercent) {
|
||||
themeSize = nsLayoutUtils::AddPercents(themeSize, aOffsets.hPctMargin);
|
||||
}
|
||||
if (themeSize > result || !canOverride) {
|
||||
result = themeSize;
|
||||
}
|
||||
@@ -5697,9 +5662,7 @@ nsLayoutUtils::MinSizeContributionForAxis(PhysicalAxis aAxis,
|
||||
aWM.IsVertical() ? "vertical" : "horizontal");
|
||||
#endif
|
||||
|
||||
// Note: this method is only meant for grid/flex items which always
|
||||
// include percentages in their intrinsic size.
|
||||
aFlags |= nsLayoutUtils::ADD_PERCENTS;
|
||||
// Note: this method is only meant for grid/flex items.
|
||||
const nsStylePosition* const stylePos = aFrame->StylePosition();
|
||||
const nsStyleCoord* style = aAxis == eAxisHorizontal ? &stylePos->mMinWidth
|
||||
: &stylePos->mMinHeight;
|
||||
|
||||
Reference in New Issue
Block a user