forked from mirrors/gecko-dev
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:
parent
a904cc5aeb
commit
7e288d7f98
6 changed files with 61 additions and 18 deletions
|
|
@ -700,9 +700,12 @@ CSSCoord StyleCalcLengthPercentage::ResolveToCSSPixels(CSSCoord aBasis) const {
|
||||||
return Servo_ResolveCalcLengthPercentage(this, aBasis);
|
return Servo_ResolveCalcLengthPercentage(this, aBasis);
|
||||||
}
|
}
|
||||||
|
|
||||||
nscoord StyleCalcLengthPercentage::Resolve(nscoord aBasis) const {
|
template <typename Rounder>
|
||||||
return detail::DefaultLengthToAppUnits(
|
nscoord StyleCalcLengthPercentage::Resolve(nscoord aBasis,
|
||||||
ResolveToCSSPixels(CSSPixel::FromAppUnits(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 <>
|
template <>
|
||||||
|
|
@ -727,11 +730,10 @@ CSSCoord LengthPercentage::ResolveToCSSPixelsWith(T aPercentageGetter) const {
|
||||||
return ResolveToCSSPixels(aPercentageGetter());
|
return ResolveToCSSPixels(aPercentageGetter());
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T, typename PercentRounder>
|
template <typename T, typename Rounder>
|
||||||
nscoord LengthPercentage::Resolve(T aPercentageGetter,
|
nscoord LengthPercentage::Resolve(T aPercentageGetter, Rounder aRounder) const {
|
||||||
PercentRounder aPercentRounder) const {
|
|
||||||
static_assert(std::is_same_v<decltype(aPercentageGetter()), nscoord>);
|
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()) {
|
if (ConvertsToLength()) {
|
||||||
return ToLength();
|
return ToLength();
|
||||||
}
|
}
|
||||||
|
|
@ -740,9 +742,9 @@ nscoord LengthPercentage::Resolve(T aPercentageGetter,
|
||||||
}
|
}
|
||||||
nscoord basis = aPercentageGetter();
|
nscoord basis = aPercentageGetter();
|
||||||
if (IsPercentage()) {
|
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 {
|
nscoord LengthPercentage::Resolve(nscoord aPercentageBasis) const {
|
||||||
|
|
@ -755,11 +757,10 @@ nscoord LengthPercentage::Resolve(T aPercentageGetter) const {
|
||||||
return Resolve(aPercentageGetter, detail::DefaultPercentLengthToAppUnits);
|
return Resolve(aPercentageGetter, detail::DefaultPercentLengthToAppUnits);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename PercentRounder>
|
template <typename Rounder>
|
||||||
nscoord LengthPercentage::Resolve(nscoord aPercentageBasis,
|
nscoord LengthPercentage::Resolve(nscoord aPercentageBasis,
|
||||||
PercentRounder aPercentRounder) const {
|
Rounder aRounder) const {
|
||||||
return Resolve([aPercentageBasis] { return aPercentageBasis; },
|
return Resolve([aPercentageBasis] { return aPercentageBasis; }, aRounder);
|
||||||
aPercentRounder);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void LengthPercentage::ScaleLengthsBy(float aScale) {
|
void LengthPercentage::ScaleLengthsBy(float aScale) {
|
||||||
|
|
|
||||||
|
|
@ -368,7 +368,8 @@ renaming_overrides_prefixing = true
|
||||||
|
|
||||||
"CalcLengthPercentage" = """
|
"CalcLengthPercentage" = """
|
||||||
inline CSSCoord ResolveToCSSPixels(CSSCoord aBasis) const;
|
inline CSSCoord ResolveToCSSPixels(CSSCoord aBasis) const;
|
||||||
inline nscoord Resolve(nscoord aBasis) const;
|
template<typename Rounder>
|
||||||
|
inline nscoord Resolve(nscoord aBasis, Rounder) const;
|
||||||
"""
|
"""
|
||||||
|
|
||||||
"GenericCalcNode" = """
|
"GenericCalcNode" = """
|
||||||
|
|
@ -429,10 +430,10 @@ renaming_overrides_prefixing = true
|
||||||
inline bool IsDefinitelyZero() const;
|
inline bool IsDefinitelyZero() const;
|
||||||
inline CSSCoord ResolveToCSSPixels(CSSCoord aPercentageBasisInCSSPixels) const;
|
inline CSSCoord ResolveToCSSPixels(CSSCoord aPercentageBasisInCSSPixels) const;
|
||||||
template<typename T> inline CSSCoord ResolveToCSSPixelsWith(T aPercentageGetter) const;
|
template<typename T> inline CSSCoord ResolveToCSSPixelsWith(T aPercentageGetter) const;
|
||||||
template<typename T, typename PercentRounder>
|
template<typename T, typename Rounder>
|
||||||
inline nscoord Resolve(T aPercentageGetter, PercentRounder) const;
|
inline nscoord Resolve(T aPercentageGetter, Rounder) const;
|
||||||
template<typename PercentRounder>
|
template<typename Rounder>
|
||||||
inline nscoord Resolve(nscoord aPercentageBasis, PercentRounder) const;
|
inline nscoord Resolve(nscoord aPercentageBasis, Rounder) const;
|
||||||
template<typename T> inline nscoord Resolve(T aPercentageGetter) const;
|
template<typename T> inline nscoord Resolve(T aPercentageGetter) const;
|
||||||
inline nscoord Resolve(nscoord aPercentageBasis) const;
|
inline nscoord Resolve(nscoord aPercentageBasis) const;
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
[calc-rounding-001.html]
|
||||||
|
expected: FAIL
|
||||||
|
bug: 1881220
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
[calc-rounding-002.html]
|
||||||
|
expected: FAIL
|
||||||
|
bug: 1881220
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
<!doctype html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<style>
|
||||||
|
.outer {
|
||||||
|
width: 100px;
|
||||||
|
height: 40px;
|
||||||
|
border: 1px solid;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<div class="outer"></div>
|
||||||
|
|
@ -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>
|
||||||
Loading…
Reference in a new issue