Bug 1893127 - Back out bug 1881220 for causing worse regressions than the problem it was fixing. r=layout-reviewers,firefox-style-system-reviewers,boris

As a short term fix this seems acceptable. Mark the test for the
regressing bug as failing.

Differential Revision: https://phabricator.services.mozilla.com/D208834
This commit is contained in:
Emilio Cobos Álvarez 2024-04-27 19:18:34 +00:00
parent 11db3cd3ee
commit 22153710b5
5 changed files with 58 additions and 18 deletions

View File

@ -700,9 +700,12 @@ CSSCoord StyleCalcLengthPercentage::ResolveToCSSPixels(CSSCoord aBasis) const {
return Servo_ResolveCalcLengthPercentage(this, aBasis);
}
nscoord StyleCalcLengthPercentage::Resolve(nscoord aBasis) const {
return detail::DefaultLengthToAppUnits(
ResolveToCSSPixels(CSSPixel::FromAppUnits(aBasis)));
template <typename Rounder>
nscoord StyleCalcLengthPercentage::Resolve(nscoord aBasis,
Rounder aRounder) const {
static_assert(std::is_same_v<decltype(aRounder(1.0f)), nscoord>);
CSSCoord result = ResolveToCSSPixels(CSSPixel::FromAppUnits(aBasis));
return aRounder(result * AppUnitsPerCSSPixel());
}
template <>
@ -727,11 +730,10 @@ CSSCoord LengthPercentage::ResolveToCSSPixelsWith(T aPercentageGetter) const {
return ResolveToCSSPixels(aPercentageGetter());
}
template <typename T, typename PercentRounder>
nscoord LengthPercentage::Resolve(T aPercentageGetter,
PercentRounder aPercentRounder) const {
template <typename T, typename Rounder>
nscoord LengthPercentage::Resolve(T aPercentageGetter, Rounder aRounder) const {
static_assert(std::is_same_v<decltype(aPercentageGetter()), nscoord>);
static_assert(std::is_same_v<decltype(aPercentRounder(1.0f)), nscoord>);
static_assert(std::is_same_v<decltype(aRounder(1.0f)), nscoord>);
if (ConvertsToLength()) {
return ToLength();
}
@ -740,9 +742,9 @@ nscoord LengthPercentage::Resolve(T aPercentageGetter,
}
nscoord basis = aPercentageGetter();
if (IsPercentage()) {
return aPercentRounder(basis * AsPercentage()._0);
return aRounder(basis * AsPercentage()._0);
}
return AsCalc().Resolve(basis);
return AsCalc().Resolve(basis, aRounder);
}
nscoord LengthPercentage::Resolve(nscoord aPercentageBasis) const {
@ -755,11 +757,10 @@ nscoord LengthPercentage::Resolve(T aPercentageGetter) const {
return Resolve(aPercentageGetter, detail::DefaultPercentLengthToAppUnits);
}
template <typename PercentRounder>
template <typename Rounder>
nscoord LengthPercentage::Resolve(nscoord aPercentageBasis,
PercentRounder aPercentRounder) const {
return Resolve([aPercentageBasis] { return aPercentageBasis; },
aPercentRounder);
Rounder aRounder) const {
return Resolve([aPercentageBasis] { return aPercentageBasis; }, aRounder);
}
void LengthPercentage::ScaleLengthsBy(float aScale) {

View File

@ -368,7 +368,8 @@ renaming_overrides_prefixing = true
"CalcLengthPercentage" = """
inline CSSCoord ResolveToCSSPixels(CSSCoord aBasis) const;
inline nscoord Resolve(nscoord aBasis) const;
template<typename Rounder>
inline nscoord Resolve(nscoord aBasis, Rounder) const;
"""
"GenericCalcNode" = """
@ -429,10 +430,10 @@ renaming_overrides_prefixing = true
inline bool IsDefinitelyZero() const;
inline CSSCoord ResolveToCSSPixels(CSSCoord aPercentageBasisInCSSPixels) const;
template<typename T> inline CSSCoord ResolveToCSSPixelsWith(T aPercentageGetter) const;
template<typename T, typename PercentRounder>
inline nscoord Resolve(T aPercentageGetter, PercentRounder) const;
template<typename PercentRounder>
inline nscoord Resolve(nscoord aPercentageBasis, PercentRounder) const;
template<typename T, typename Rounder>
inline nscoord Resolve(T aPercentageGetter, Rounder) const;
template<typename Rounder>
inline nscoord Resolve(nscoord aPercentageBasis, Rounder) const;
template<typename T> inline nscoord Resolve(T aPercentageGetter) const;
inline nscoord Resolve(nscoord aPercentageBasis) const;
"""

View File

@ -0,0 +1,3 @@
[calc-rounding-002.html]
expected: FAIL
bug: 1881220

View File

@ -0,0 +1,10 @@
<!doctype html>
<meta charset="utf-8">
<style>
.outer {
width: 100px;
height: 40px;
border: 1px solid;
}
</style>
<div class="outer"></div>

View File

@ -0,0 +1,25 @@
<!doctype html>
<meta charset="utf-8">
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1893127">
<link rel="help" href="https://drafts.csswg.org/css-values/#funcdef-calc">
<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez">
<link rel="author" href="https://mozilla.org" title="Mozilla">
<link rel="match" href="calc-rounding-003-ref.html">
<style>
.outer {
width: 100px;
border: 1px solid;
}
.inner {
height: 40px;
vertical-align: top;
display: inline-block;
--margin: 4.009px;
width: calc(50% - 2 * var(--margin));
margin-inline: var(--margin);
}
</style>
<div class="outer"
><div class="inner"></div
><div class="inner"></div
></div>