mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-07-24 18:02:20 +00:00
LibWeb: Handle calc() in CSS z-index
We also make getComputedStyle() reflect the actually used z-index value, since otherwise this change is hard to observe. +26 new WPT subtest passes.
This commit is contained in:
parent
821d54de7f
commit
c1e79d0b13
Notes:
github-actions[bot]
2025-05-20 11:29:48 +00:00
Author: https://github.com/awesomekling
Commit: c1e79d0b13
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/4823
3 changed files with 48 additions and 34 deletions
|
@ -1005,6 +1005,10 @@ RefPtr<CSSStyleValue const> CSSStyleProperties::style_value_for_computed_propert
|
||||||
return used_values_for_grid_template_rows;
|
return used_values_for_grid_template_rows;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (property_id == PropertyID::ZIndex) {
|
||||||
|
if (auto z_index = layout_node.computed_values().z_index(); z_index.has_value()) {
|
||||||
|
return NumberStyleValue::create(z_index.value());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!property_is_shorthand(property_id))
|
if (!property_is_shorthand(property_id))
|
||||||
|
|
|
@ -332,14 +332,24 @@ Optional<int> ComputedProperties::z_index() const
|
||||||
auto const& value = property(PropertyID::ZIndex);
|
auto const& value = property(PropertyID::ZIndex);
|
||||||
if (value.has_auto())
|
if (value.has_auto())
|
||||||
return {};
|
return {};
|
||||||
if (value.is_integer()) {
|
|
||||||
// Clamp z-index to the range of a signed 32-bit integer for consistency with other engines.
|
// Clamp z-index to the range of a signed 32-bit integer for consistency with other engines.
|
||||||
auto integer = value.as_integer().integer();
|
auto clamp = [](auto number) -> int {
|
||||||
if (integer >= NumericLimits<int>::max())
|
if (number >= NumericLimits<int>::max())
|
||||||
return NumericLimits<int>::max();
|
return NumericLimits<int>::max();
|
||||||
if (integer <= NumericLimits<int>::min())
|
if (number <= NumericLimits<int>::min())
|
||||||
return NumericLimits<int>::min();
|
return NumericLimits<int>::min();
|
||||||
return static_cast<int>(integer);
|
return static_cast<int>(number);
|
||||||
|
};
|
||||||
|
|
||||||
|
if (value.is_integer()) {
|
||||||
|
return clamp(value.as_integer().integer());
|
||||||
|
}
|
||||||
|
if (value.is_calculated()) {
|
||||||
|
auto maybe_double = value.as_calculated().resolve_number({});
|
||||||
|
if (maybe_double.has_value()) {
|
||||||
|
return clamp(maybe_double.value());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,8 +2,8 @@ Harness status: OK
|
||||||
|
|
||||||
Found 233 tests
|
Found 233 tests
|
||||||
|
|
||||||
148 Pass
|
174 Pass
|
||||||
85 Fail
|
59 Fail
|
||||||
Pass abs(1) should be used-value-equivalent to 1
|
Pass abs(1) should be used-value-equivalent to 1
|
||||||
Pass sign(1) should be used-value-equivalent to 1
|
Pass sign(1) should be used-value-equivalent to 1
|
||||||
Pass abs(-1) should be used-value-equivalent to 1
|
Pass abs(-1) should be used-value-equivalent to 1
|
||||||
|
@ -95,22 +95,22 @@ Pass calc(sign(0pc)) should be used-value-equivalent to 0
|
||||||
Pass clamp(-1, calc( 1 / sign(sign(0pc))), 1) should be used-value-equivalent to 1
|
Pass clamp(-1, calc( 1 / sign(sign(0pc))), 1) should be used-value-equivalent to 1
|
||||||
Pass calc(sign(0pt)) should be used-value-equivalent to 0
|
Pass calc(sign(0pt)) should be used-value-equivalent to 0
|
||||||
Pass clamp(-1, calc( 1 / sign(sign(0pt))), 1) should be used-value-equivalent to 1
|
Pass clamp(-1, calc( 1 / sign(sign(0pt))), 1) should be used-value-equivalent to 1
|
||||||
Fail calc(sign(0em)) should be used-value-equivalent to 0
|
Pass calc(sign(0em)) should be used-value-equivalent to 0
|
||||||
Fail clamp(-1, calc( 1 / sign(sign(0em))), 1) should be used-value-equivalent to 1
|
Pass clamp(-1, calc( 1 / sign(sign(0em))), 1) should be used-value-equivalent to 1
|
||||||
Fail calc(sign(0ex)) should be used-value-equivalent to 0
|
Pass calc(sign(0ex)) should be used-value-equivalent to 0
|
||||||
Fail clamp(-1, calc( 1 / sign(sign(0ex))), 1) should be used-value-equivalent to 1
|
Pass clamp(-1, calc( 1 / sign(sign(0ex))), 1) should be used-value-equivalent to 1
|
||||||
Fail calc(sign(0ch)) should be used-value-equivalent to 0
|
Pass calc(sign(0ch)) should be used-value-equivalent to 0
|
||||||
Fail clamp(-1, calc( 1 / sign(sign(0ch))), 1) should be used-value-equivalent to 1
|
Pass clamp(-1, calc( 1 / sign(sign(0ch))), 1) should be used-value-equivalent to 1
|
||||||
Fail calc(sign(0rem)) should be used-value-equivalent to 0
|
Pass calc(sign(0rem)) should be used-value-equivalent to 0
|
||||||
Fail clamp(-1, calc( 1 / sign(sign(0rem))), 1) should be used-value-equivalent to 1
|
Pass clamp(-1, calc( 1 / sign(sign(0rem))), 1) should be used-value-equivalent to 1
|
||||||
Fail calc(sign(0vh)) should be used-value-equivalent to 0
|
Pass calc(sign(0vh)) should be used-value-equivalent to 0
|
||||||
Fail clamp(-1, calc( 1 / sign(sign(0vh))), 1) should be used-value-equivalent to 1
|
Pass clamp(-1, calc( 1 / sign(sign(0vh))), 1) should be used-value-equivalent to 1
|
||||||
Fail calc(sign(0vw)) should be used-value-equivalent to 0
|
Pass calc(sign(0vw)) should be used-value-equivalent to 0
|
||||||
Fail clamp(-1, calc( 1 / sign(sign(0vw))), 1) should be used-value-equivalent to 1
|
Pass clamp(-1, calc( 1 / sign(sign(0vw))), 1) should be used-value-equivalent to 1
|
||||||
Fail calc(sign(0vmin)) should be used-value-equivalent to 0
|
Pass calc(sign(0vmin)) should be used-value-equivalent to 0
|
||||||
Fail clamp(-1, calc( 1 / sign(sign(0vmin))), 1) should be used-value-equivalent to 1
|
Pass clamp(-1, calc( 1 / sign(sign(0vmin))), 1) should be used-value-equivalent to 1
|
||||||
Fail calc(sign(0vmax)) should be used-value-equivalent to 0
|
Pass calc(sign(0vmax)) should be used-value-equivalent to 0
|
||||||
Fail clamp(-1, calc( 1 / sign(sign(0vmax))), 1) should be used-value-equivalent to 1
|
Pass clamp(-1, calc( 1 / sign(sign(0vmax))), 1) should be used-value-equivalent to 1
|
||||||
Pass calc(sign(-0px)) should be used-value-equivalent to 0
|
Pass calc(sign(-0px)) should be used-value-equivalent to 0
|
||||||
Fail clamp(-1, calc( 1 / sign(sign(-0px))), 1) should be used-value-equivalent to -1
|
Fail clamp(-1, calc( 1 / sign(sign(-0px))), 1) should be used-value-equivalent to -1
|
||||||
Pass calc(sign(-0cm)) should be used-value-equivalent to 0
|
Pass calc(sign(-0cm)) should be used-value-equivalent to 0
|
||||||
|
@ -125,21 +125,21 @@ Pass calc(sign(-0pc)) should be used-value-equivalent to 0
|
||||||
Fail clamp(-1, calc( 1 / sign(sign(-0pc))), 1) should be used-value-equivalent to -1
|
Fail clamp(-1, calc( 1 / sign(sign(-0pc))), 1) should be used-value-equivalent to -1
|
||||||
Pass calc(sign(-0pt)) should be used-value-equivalent to 0
|
Pass calc(sign(-0pt)) should be used-value-equivalent to 0
|
||||||
Fail clamp(-1, calc( 1 / sign(sign(-0pt))), 1) should be used-value-equivalent to -1
|
Fail clamp(-1, calc( 1 / sign(sign(-0pt))), 1) should be used-value-equivalent to -1
|
||||||
Fail calc(sign(-0em)) should be used-value-equivalent to 0
|
Pass calc(sign(-0em)) should be used-value-equivalent to 0
|
||||||
Fail clamp(-1, calc( 1 / sign(sign(-0em))), 1) should be used-value-equivalent to -1
|
Fail clamp(-1, calc( 1 / sign(sign(-0em))), 1) should be used-value-equivalent to -1
|
||||||
Fail calc(sign(-0ex)) should be used-value-equivalent to 0
|
Pass calc(sign(-0ex)) should be used-value-equivalent to 0
|
||||||
Fail clamp(-1, calc( 1 / sign(sign(-0ex))), 1) should be used-value-equivalent to -1
|
Fail clamp(-1, calc( 1 / sign(sign(-0ex))), 1) should be used-value-equivalent to -1
|
||||||
Fail calc(sign(-0ch)) should be used-value-equivalent to 0
|
Pass calc(sign(-0ch)) should be used-value-equivalent to 0
|
||||||
Fail clamp(-1, calc( 1 / sign(sign(-0ch))), 1) should be used-value-equivalent to -1
|
Fail clamp(-1, calc( 1 / sign(sign(-0ch))), 1) should be used-value-equivalent to -1
|
||||||
Fail calc(sign(-0rem)) should be used-value-equivalent to 0
|
Pass calc(sign(-0rem)) should be used-value-equivalent to 0
|
||||||
Fail clamp(-1, calc( 1 / sign(sign(-0rem))), 1) should be used-value-equivalent to -1
|
Fail clamp(-1, calc( 1 / sign(sign(-0rem))), 1) should be used-value-equivalent to -1
|
||||||
Fail calc(sign(-0vh)) should be used-value-equivalent to 0
|
Pass calc(sign(-0vh)) should be used-value-equivalent to 0
|
||||||
Fail clamp(-1, calc( 1 / sign(sign(-0vh))), 1) should be used-value-equivalent to -1
|
Fail clamp(-1, calc( 1 / sign(sign(-0vh))), 1) should be used-value-equivalent to -1
|
||||||
Fail calc(sign(-0vw)) should be used-value-equivalent to 0
|
Pass calc(sign(-0vw)) should be used-value-equivalent to 0
|
||||||
Fail clamp(-1, calc( 1 / sign(sign(-0vw))), 1) should be used-value-equivalent to -1
|
Fail clamp(-1, calc( 1 / sign(sign(-0vw))), 1) should be used-value-equivalent to -1
|
||||||
Fail calc(sign(-0vmin)) should be used-value-equivalent to 0
|
Pass calc(sign(-0vmin)) should be used-value-equivalent to 0
|
||||||
Fail clamp(-1, calc( 1 / sign(sign(-0vmin))), 1) should be used-value-equivalent to -1
|
Fail clamp(-1, calc( 1 / sign(sign(-0vmin))), 1) should be used-value-equivalent to -1
|
||||||
Fail calc(sign(-0vmax)) should be used-value-equivalent to 0
|
Pass calc(sign(-0vmax)) should be used-value-equivalent to 0
|
||||||
Fail clamp(-1, calc( 1 / sign(sign(-0vmax))), 1) should be used-value-equivalent to -1
|
Fail clamp(-1, calc( 1 / sign(sign(-0vmax))), 1) should be used-value-equivalent to -1
|
||||||
Pass calc(sign(0s)) should be used-value-equivalent to 0
|
Pass calc(sign(0s)) should be used-value-equivalent to 0
|
||||||
Pass clamp(-1, calc( 1 / sign(sign(0s))), 1) should be used-value-equivalent to 1
|
Pass clamp(-1, calc( 1 / sign(sign(0s))), 1) should be used-value-equivalent to 1
|
||||||
|
@ -207,14 +207,14 @@ Pass abs(-1deg) should be used-value-equivalent to 1deg
|
||||||
Pass abs(-1grad) should be used-value-equivalent to 1grad
|
Pass abs(-1grad) should be used-value-equivalent to 1grad
|
||||||
Pass abs(-1rad) should be used-value-equivalent to 1rad
|
Pass abs(-1rad) should be used-value-equivalent to 1rad
|
||||||
Pass abs(-1turn) should be used-value-equivalent to 1turn
|
Pass abs(-1turn) should be used-value-equivalent to 1turn
|
||||||
Fail sign(10px - 1em) should be used-value-equivalent to 0; fontSize=10px
|
Pass sign(10px - 1em) should be used-value-equivalent to 0; fontSize=10px
|
||||||
Fail sign(10px - 2em) should be used-value-equivalent to -1; fontSize=10px
|
Fail sign(10px - 2em) should be used-value-equivalent to -1; fontSize=10px
|
||||||
Pass calc(sign(10%) * 100px) should be used-value-equivalent to 100px
|
Pass calc(sign(10%) * 100px) should be used-value-equivalent to 100px
|
||||||
Fail calc(2.5 - sign(41px - 2em) / 2) should be used-value-equivalent to 2
|
Fail calc(2.5 - sign(41px - 2em) / 2) should be used-value-equivalent to 2
|
||||||
Fail calc(2.5 - sign(40px - 2em) / 2) should be used-value-equivalent to 2.5
|
Fail calc(2.5 - sign(40px - 2em) / 2) should be used-value-equivalent to 2.5
|
||||||
Fail calc(2.5 - sign(39px - 2em) / 2) should be used-value-equivalent to 3
|
Fail calc(2.5 - sign(39px - 2em) / 2) should be used-value-equivalent to 3
|
||||||
Fail calc(3 + sign(42px - 2em)) should be used-value-equivalent to 4
|
Fail calc(3 + sign(42px - 2em)) should be used-value-equivalent to 4
|
||||||
Fail calc(3 + sign(40px - 2em)) should be used-value-equivalent to 3
|
Pass calc(3 + sign(40px - 2em)) should be used-value-equivalent to 3
|
||||||
Fail calc(3 + sign(38px - 2em)) should be used-value-equivalent to 2
|
Fail calc(3 + sign(38px - 2em)) should be used-value-equivalent to 2
|
||||||
Pass calc(50px + 100px * sign(42px - 2em)) should be used-value-equivalent to 150px
|
Pass calc(50px + 100px * sign(42px - 2em)) should be used-value-equivalent to 150px
|
||||||
Pass calc(50px + 100px * sign(40px - 2em)) should be used-value-equivalent to 50px
|
Pass calc(50px + 100px * sign(40px - 2em)) should be used-value-equivalent to 50px
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue