mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-05-18 17:12:54 +00:00
LibWeb: Implement SVG opacity properties
This implements the stop-opacity, fill-opacity, and stroke-opacity properties (in CSS). This replaces the existing more ad-hoc fill-opacity attribute handling.
This commit is contained in:
parent
120e5b6b6f
commit
00cda96e2d
Notes:
sideshowbarker
2024-07-16 21:51:02 +09:00
Author: https://github.com/MacDue
Commit: 00cda96e2d
Pull-request: https://github.com/SerenityOS/serenity/pull/18927
13 changed files with 141 additions and 29 deletions
|
@ -33,9 +33,7 @@ JS::ThrowCompletionOr<void> SVGGraphicsElement::initialize(JS::Realm& realm)
|
|||
void SVGGraphicsElement::parse_attribute(DeprecatedFlyString const& name, DeprecatedString const& value)
|
||||
{
|
||||
SVGElement::parse_attribute(name, value);
|
||||
if (name == "fill-opacity"sv) {
|
||||
m_fill_opacity = AttributeParser::parse_length(value);
|
||||
} else if (name == "transform"sv) {
|
||||
if (name == "transform"sv) {
|
||||
auto transform_list = AttributeParser::parse_transform(value);
|
||||
if (transform_list.has_value())
|
||||
m_transform = transform_from_transform_list(*transform_list);
|
||||
|
@ -120,6 +118,12 @@ void SVGGraphicsElement::apply_presentational_hints(CSS::StyleProperties& style)
|
|||
} else if (name.equals_ignoring_ascii_case("stroke-width"sv)) {
|
||||
if (auto stroke_width_value = parse_css_value(parsing_context, value, CSS::PropertyID::StrokeWidth).release_value_but_fixme_should_propagate_errors())
|
||||
style.set_property(CSS::PropertyID::StrokeWidth, stroke_width_value.release_nonnull());
|
||||
} else if (name.equals_ignoring_ascii_case("fill-opacity"sv)) {
|
||||
if (auto fill_opacity_value = parse_css_value(parsing_context, value, CSS::PropertyID::FillOpacity).release_value_but_fixme_should_propagate_errors())
|
||||
style.set_property(CSS::PropertyID::FillOpacity, fill_opacity_value.release_nonnull());
|
||||
} else if (name.equals_ignoring_ascii_case("stroke-opacity"sv)) {
|
||||
if (auto stroke_opacity_value = parse_css_value(parsing_context, value, CSS::PropertyID::FillOpacity).release_value_but_fixme_should_propagate_errors())
|
||||
style.set_property(CSS::PropertyID::StrokeOpacity, stroke_opacity_value.release_nonnull());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -133,7 +137,7 @@ Optional<Gfx::Color> SVGGraphicsElement::fill_color() const
|
|||
return layout_node()->computed_values().fill().map([&](auto& paint) -> Gfx::Color {
|
||||
if (!paint.is_color())
|
||||
return Color::Black;
|
||||
return paint.as_color().with_alpha(m_fill_opacity.value_or(1) * 255);
|
||||
return paint.as_color();
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -150,6 +154,20 @@ Optional<Gfx::Color> SVGGraphicsElement::stroke_color() const
|
|||
});
|
||||
}
|
||||
|
||||
Optional<float> SVGGraphicsElement::fill_opacity() const
|
||||
{
|
||||
if (!layout_node())
|
||||
return {};
|
||||
return layout_node()->computed_values().fill_opacity();
|
||||
}
|
||||
|
||||
Optional<float> SVGGraphicsElement::stroke_opacity() const
|
||||
{
|
||||
if (!layout_node())
|
||||
return {};
|
||||
return layout_node()->computed_values().stroke_opacity();
|
||||
}
|
||||
|
||||
Optional<float> SVGGraphicsElement::stroke_width() const
|
||||
{
|
||||
if (!layout_node())
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue