mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-09-20 16:28:54 +00:00
LibWeb: Support relative lengths in math-depth
calcs
As this is computed before font-size we use the parent's length resolution context.
This commit is contained in:
parent
944b985929
commit
4efbd0dc4d
Notes:
github-actions[bot]
2025-08-22 07:50:04 +00:00
Author: https://github.com/Calme1709
Commit: 4efbd0dc4d
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/5951
Reviewed-by: https://github.com/gmta ✅
4 changed files with 37 additions and 8 deletions
|
@ -2394,7 +2394,7 @@ GC::Ref<ComputedProperties> StyleComputer::create_document_style() const
|
||||||
style->set_property(property_id, property_initial_value(property_id));
|
style->set_property(property_id, property_initial_value(property_id));
|
||||||
}
|
}
|
||||||
|
|
||||||
compute_math_depth(style, nullptr, {});
|
compute_math_depth(style, {});
|
||||||
compute_font(style, nullptr, {});
|
compute_font(style, nullptr, {});
|
||||||
absolutize_values(style, nullptr);
|
absolutize_values(style, nullptr);
|
||||||
style->set_property(CSS::PropertyID::Width, CSS::LengthStyleValue::create(CSS::Length::make_px(viewport_rect().width())));
|
style->set_property(CSS::PropertyID::Width, CSS::LengthStyleValue::create(CSS::Length::make_px(viewport_rect().width())));
|
||||||
|
@ -2702,7 +2702,7 @@ GC::Ref<ComputedProperties> StyleComputer::compute_properties(DOM::Element& elem
|
||||||
compute_custom_properties(computed_style, abstract_element);
|
compute_custom_properties(computed_style, abstract_element);
|
||||||
|
|
||||||
// 2. Compute the math-depth property, since that might affect the font-size
|
// 2. Compute the math-depth property, since that might affect the font-size
|
||||||
compute_math_depth(computed_style, &element, pseudo_element);
|
compute_math_depth(computed_style, abstract_element);
|
||||||
|
|
||||||
// 3. Compute the font, since that may be needed for font-relative CSS units
|
// 3. Compute the font, since that may be needed for font-relative CSS units
|
||||||
compute_font(computed_style, &element, pseudo_element);
|
compute_font(computed_style, &element, pseudo_element);
|
||||||
|
@ -3162,14 +3162,16 @@ void StyleComputer::compute_custom_properties(ComputedProperties&, DOM::Abstract
|
||||||
abstract_element.set_custom_properties(move(resolved_custom_properties));
|
abstract_element.set_custom_properties(move(resolved_custom_properties));
|
||||||
}
|
}
|
||||||
|
|
||||||
void StyleComputer::compute_math_depth(ComputedProperties& style, DOM::Element const* element, Optional<CSS::PseudoElement> pseudo_element) const
|
void StyleComputer::compute_math_depth(ComputedProperties& style, Optional<DOM::AbstractElement> element) const
|
||||||
{
|
{
|
||||||
// https://w3c.github.io/mathml-core/#propdef-math-depth
|
// https://w3c.github.io/mathml-core/#propdef-math-depth
|
||||||
|
|
||||||
|
auto element_to_inherit_style_from = element.has_value() ? element->element_to_inherit_style_from() : OptionalNone {};
|
||||||
|
|
||||||
auto inherited_math_depth = [&]() {
|
auto inherited_math_depth = [&]() {
|
||||||
if (!element || !element->element_to_inherit_style_from(pseudo_element))
|
if (!element_to_inherit_style_from.has_value())
|
||||||
return InitialValues::math_depth();
|
return InitialValues::math_depth();
|
||||||
return element->element_to_inherit_style_from(pseudo_element)->computed_properties()->math_depth();
|
return element_to_inherit_style_from->computed_properties()->math_depth();
|
||||||
};
|
};
|
||||||
|
|
||||||
auto const& math_depth = style.property(CSS::PropertyID::MathDepth).as_math_depth();
|
auto const& math_depth = style.property(CSS::PropertyID::MathDepth).as_math_depth();
|
||||||
|
@ -3177,8 +3179,10 @@ void StyleComputer::compute_math_depth(ComputedProperties& style, DOM::Element c
|
||||||
auto resolve_integer = [&](StyleValue const& integer_value) {
|
auto resolve_integer = [&](StyleValue const& integer_value) {
|
||||||
if (integer_value.is_integer())
|
if (integer_value.is_integer())
|
||||||
return integer_value.as_integer().integer();
|
return integer_value.as_integer().integer();
|
||||||
if (integer_value.is_calculated())
|
if (integer_value.is_calculated()) {
|
||||||
return integer_value.as_calculated().resolve_integer_deprecated({}).value();
|
auto parent_length_resolution_context = element_to_inherit_style_from.has_value() ? Length::ResolutionContext::for_element(element_to_inherit_style_from.value()) : Length::ResolutionContext::for_window(*m_document->window());
|
||||||
|
return integer_value.as_calculated().resolve_integer({ .length_resolution_context = parent_length_resolution_context }).value();
|
||||||
|
}
|
||||||
VERIFY_NOT_REACHED();
|
VERIFY_NOT_REACHED();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -229,7 +229,7 @@ private:
|
||||||
static RefPtr<Gfx::FontCascadeList const> find_matching_font_weight_descending(Vector<MatchingFontCandidate> const& candidates, int target_weight, float font_size_in_pt, bool inclusive);
|
static RefPtr<Gfx::FontCascadeList const> find_matching_font_weight_descending(Vector<MatchingFontCandidate> const& candidates, int target_weight, float font_size_in_pt, bool inclusive);
|
||||||
RefPtr<Gfx::FontCascadeList const> font_matching_algorithm(FlyString const& family_name, int weight, int slope, float font_size_in_pt) const;
|
RefPtr<Gfx::FontCascadeList const> font_matching_algorithm(FlyString const& family_name, int weight, int slope, float font_size_in_pt) const;
|
||||||
void compute_custom_properties(ComputedProperties&, DOM::AbstractElement) const;
|
void compute_custom_properties(ComputedProperties&, DOM::AbstractElement) const;
|
||||||
void compute_math_depth(ComputedProperties&, DOM::Element const*, Optional<CSS::PseudoElement>) const;
|
void compute_math_depth(ComputedProperties&, Optional<DOM::AbstractElement>) const;
|
||||||
void start_needed_transitions(ComputedProperties const& old_style, ComputedProperties& new_style, DOM::Element&, Optional<PseudoElement>) const;
|
void start_needed_transitions(ComputedProperties const& old_style, ComputedProperties& new_style, DOM::Element&, Optional<PseudoElement>) const;
|
||||||
void resolve_effective_overflow_values(ComputedProperties&) const;
|
void resolve_effective_overflow_values(ComputedProperties&) const;
|
||||||
void transform_box_type_if_needed(ComputedProperties&, DOM::Element const&, Optional<CSS::PseudoElement>) const;
|
void transform_box_type_if_needed(ComputedProperties&, DOM::Element const&, Optional<CSS::PseudoElement>) const;
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
-1
|
|
@ -0,0 +1,24 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
<style>
|
||||||
|
#foo {
|
||||||
|
font-size: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bar {
|
||||||
|
font-size: 2px;
|
||||||
|
math-depth: calc(sign(1em - 1px));
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<div id="foo">
|
||||||
|
<div id="bar"></div>
|
||||||
|
</div>
|
||||||
|
<script src="../include.js"></script>
|
||||||
|
<script>
|
||||||
|
test(() => {
|
||||||
|
println(getComputedStyle(bar).mathDepth);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
Add table
Add a link
Reference in a new issue