diff --git a/Tests/LibWeb/Text/expected/css/getComputedStyle-print-all.txt b/Tests/LibWeb/Text/expected/css/getComputedStyle-print-all.txt index 653e1b5d91e..91999e359bc 100644 --- a/Tests/LibWeb/Text/expected/css/getComputedStyle-print-all.txt +++ b/Tests/LibWeb/Text/expected/css/getComputedStyle-print-all.txt @@ -104,6 +104,7 @@ counter-set: none cx: 0px cy: 0px display: block +filter: none flex-basis: auto flex-direction: row flex-grow: 0 @@ -120,7 +121,7 @@ grid-row-start: auto grid-template-areas: none grid-template-columns: auto grid-template-rows: auto -height: 2074px +height: 2091px inline-size: auto inset-block-end: auto inset-block-start: auto diff --git a/Userland/Libraries/LibWeb/CSS/ComputedValues.h b/Userland/Libraries/LibWeb/CSS/ComputedValues.h index 44f35f2651c..b48fd60d4e6 100644 --- a/Userland/Libraries/LibWeb/CSS/ComputedValues.h +++ b/Userland/Libraries/LibWeb/CSS/ComputedValues.h @@ -11,12 +11,12 @@ #include #include #include -#include #include #include #include #include #include +#include #include #include #include @@ -55,7 +55,7 @@ struct QuotesData { Vector> strings {}; }; -struct ResolvedBackdropFilter { +struct ResolvedFilter { struct Blur { float radius; }; @@ -64,19 +64,19 @@ struct ResolvedBackdropFilter { double offset_x; double offset_y; double radius; - Color color; + Gfx::Color color; }; struct HueRotate { float angle_degrees; }; - struct ColorOperation { - Filter::Color::Operation operation; + struct Color { + FilterOperation::Color::Type type; float amount; }; - using FilterFunction = Variant; + using FilterFunction = Variant; bool is_none() const { return filters.size() == 0; } @@ -121,7 +121,8 @@ public: static CSS::Display display() { return CSS::Display { CSS::DisplayOutside::Inline, CSS::DisplayInside::Flow }; } static Color color() { return Color::Black; } static Color stop_color() { return Color::Black; } - static CSS::ResolvedBackdropFilter backdrop_filter() { return ResolvedBackdropFilter { .filters = {} }; } + static CSS::ResolvedFilter backdrop_filter() { return ResolvedFilter { .filters = {} }; } + static CSS::ResolvedFilter filter() { return ResolvedFilter { .filters = {} }; } static Color background_color() { return Color::Transparent; } static CSS::ListStyleType list_style_type() { return CSS::ListStyleType::Disc; } static CSS::ListStylePosition list_style_position() { return CSS::ListStylePosition::Outside; } @@ -409,7 +410,8 @@ public: CSS::JustifyContent justify_content() const { return m_noninherited.justify_content; } CSS::JustifySelf justify_self() const { return m_noninherited.justify_self; } CSS::JustifyItems justify_items() const { return m_noninherited.justify_items; } - CSS::ResolvedBackdropFilter const& backdrop_filter() const { return m_noninherited.backdrop_filter; } + CSS::ResolvedFilter const& backdrop_filter() const { return m_noninherited.backdrop_filter; } + CSS::ResolvedFilter const& filter() const { return m_noninherited.filter; } Vector const& box_shadow() const { return m_noninherited.box_shadow; } CSS::BoxSizing box_sizing() const { return m_noninherited.box_sizing; } CSS::Size const& width() const { return m_noninherited.width; } @@ -601,7 +603,8 @@ protected: CSS::LengthBox inset { InitialValues::inset() }; CSS::LengthBox margin { InitialValues::margin() }; CSS::LengthBox padding { InitialValues::padding() }; - CSS::ResolvedBackdropFilter backdrop_filter { InitialValues::backdrop_filter() }; + CSS::ResolvedFilter backdrop_filter { InitialValues::backdrop_filter() }; + CSS::ResolvedFilter filter { InitialValues::filter() }; BorderData border_left; BorderData border_top; BorderData border_right; @@ -746,7 +749,8 @@ public: void set_list_style_type(CSS::ListStyleType value) { m_inherited.list_style_type = value; } void set_list_style_position(CSS::ListStylePosition value) { m_inherited.list_style_position = value; } void set_display(CSS::Display value) { m_noninherited.display = value; } - void set_backdrop_filter(CSS::ResolvedBackdropFilter backdrop_filter) { m_noninherited.backdrop_filter = move(backdrop_filter); } + void set_backdrop_filter(CSS::ResolvedFilter backdrop_filter) { m_noninherited.backdrop_filter = move(backdrop_filter); } + void set_filter(CSS::ResolvedFilter filter) { m_noninherited.filter = move(filter); } void set_border_bottom_left_radius(CSS::BorderRadiusData value) { m_noninherited.border_bottom_left_radius = move(value); } void set_border_bottom_right_radius(CSS::BorderRadiusData value) { m_noninherited.border_bottom_right_radius = move(value); } void set_border_top_left_radius(CSS::BorderRadiusData value) { m_noninherited.border_top_left_radius = move(value); } diff --git a/Userland/Libraries/LibWeb/CSS/BackdropFilter.h b/Userland/Libraries/LibWeb/CSS/Filter.h similarity index 77% rename from Userland/Libraries/LibWeb/CSS/BackdropFilter.h rename to Userland/Libraries/LibWeb/CSS/Filter.h index 695cf01f19d..8fec9c5154f 100644 --- a/Userland/Libraries/LibWeb/CSS/BackdropFilter.h +++ b/Userland/Libraries/LibWeb/CSS/Filter.h @@ -12,15 +12,15 @@ namespace Web::CSS { -class BackdropFilter { +class Filter { public: - BackdropFilter() = default; - BackdropFilter(FilterValueListStyleValue const& filter_value_list) + Filter() = default; + Filter(FilterValueListStyleValue const& filter_value_list) : m_filter_value_list { filter_value_list } {}; - static inline BackdropFilter make_none() + static Filter make_none() { - return BackdropFilter {}; + return Filter {}; } bool has_filters() const { return m_filter_value_list; } diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp index 7af3cfcc7b4..5674fcc0db1 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp @@ -5156,7 +5156,7 @@ RefPtr Parser::parse_filter_value_list_value(TokenStream(filter); + return static_cast(filter); }; auto parse_number_percentage = [&](auto& token) -> Optional { @@ -5205,13 +5205,13 @@ RefPtr Parser::parse_filter_value_list_value(TokenStream? ) if (!tokens.has_next_token()) - return Filter::Blur {}; + return FilterOperation::Blur {}; auto blur_radius = parse_length(tokens); tokens.discard_whitespace(); if (!blur_radius.has_value()) return {}; // FIXME: Support calculated radius - return if_no_more_tokens_return(Filter::Blur { blur_radius->value() }); + return if_no_more_tokens_return(FilterOperation::Blur { blur_radius->value() }); } else if (filter_token == FilterToken::DropShadow) { if (!tokens.has_next_token()) return {}; @@ -5240,17 +5240,17 @@ RefPtr Parser::parse_filter_value_list_value(TokenStreamvalue(), y_offset->value(), maybe_radius.map([](auto& it) { return it.value(); }), maybe_color->to_color({}) }); + return if_no_more_tokens_return(FilterOperation::DropShadow { x_offset->value(), y_offset->value(), maybe_radius.map([](auto& it) { return it.value(); }), maybe_color->to_color({}) }); } else if (filter_token == FilterToken::HueRotate) { // hue-rotate( [ | ]? ) if (!tokens.has_next_token()) - return Filter::HueRotate {}; + return FilterOperation::HueRotate {}; auto& token = tokens.consume_a_token(); if (token.is(Token::Type::Number)) { // hue-rotate(0) auto number = token.token().number(); if (number.is_integer() && number.integer_value() == 0) - return if_no_more_tokens_return(Filter::HueRotate { Filter::HueRotate::Zero {} }); + return if_no_more_tokens_return(FilterOperation::HueRotate { FilterOperation::HueRotate::Zero {} }); return {}; } if (!token.is(Token::Type::Dimension)) @@ -5261,7 +5261,7 @@ RefPtr Parser::parse_filter_value_list_value(TokenStream? ) @@ -5272,11 +5272,11 @@ RefPtr Parser::parse_filter_value_list_value(TokenStream? ) // saturate( ? ) if (!tokens.has_next_token()) - return Filter::Color { filter_token_to_operation(filter_token) }; + return FilterOperation::Color { filter_token_to_operation(filter_token) }; auto amount = parse_number_percentage(tokens.consume_a_token()); if (!amount.has_value()) return {}; - return if_no_more_tokens_return(Filter::Color { filter_token_to_operation(filter_token), *amount }); + return if_no_more_tokens_return(FilterOperation::Color { filter_token_to_operation(filter_token), *amount }); } }; @@ -7860,6 +7860,7 @@ Parser::ParseErrorOr> Parser::parse_css_value(Prope return parsed_value.release_nonnull(); return ParseError::SyntaxError; case PropertyID::BackdropFilter: + case PropertyID::Filter: if (auto parsed_value = parse_filter_value_list_value(tokens); parsed_value && !tokens.has_next_token()) return parsed_value.release_nonnull(); return ParseError::SyntaxError; diff --git a/Userland/Libraries/LibWeb/CSS/Properties.json b/Userland/Libraries/LibWeb/CSS/Properties.json index 5da4f76d11f..443770dcd18 100644 --- a/Userland/Libraries/LibWeb/CSS/Properties.json +++ b/Userland/Libraries/LibWeb/CSS/Properties.json @@ -1065,6 +1065,16 @@ "fill-rule" ] }, + "filter": { + "affects-layout": false, + "animation-type": "custom", + "inherited": false, + "initial": "none", + "__comment": "FIXME: List `filter-value-list` as a valid-type once it's generically supported.", + "valid-identifiers": [ + "none" + ] + }, "flex": { "inherited": false, "initial": "0 1 auto", diff --git a/Userland/Libraries/LibWeb/CSS/StyleProperties.cpp b/Userland/Libraries/LibWeb/CSS/StyleProperties.cpp index d06bc029a81..5dee90a0a44 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleProperties.cpp +++ b/Userland/Libraries/LibWeb/CSS/StyleProperties.cpp @@ -613,12 +613,20 @@ Optional StyleProperties::appearance() const return appearance; } -CSS::BackdropFilter StyleProperties::backdrop_filter() const +CSS::Filter StyleProperties::backdrop_filter() const { auto value = property(CSS::PropertyID::BackdropFilter); if (value->is_filter_value_list()) - return BackdropFilter(value->as_filter_value_list()); - return BackdropFilter::make_none(); + return Filter(value->as_filter_value_list()); + return Filter::make_none(); +} + +CSS::Filter StyleProperties::filter() const +{ + auto value = property(CSS::PropertyID::Filter); + if (value->is_filter_value_list()) + return Filter(value->as_filter_value_list()); + return Filter::make_none(); } Optional StyleProperties::position() const diff --git a/Userland/Libraries/LibWeb/CSS/StyleProperties.h b/Userland/Libraries/LibWeb/CSS/StyleProperties.h index 1e4a31af5bb..38e0b79fb15 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleProperties.h +++ b/Userland/Libraries/LibWeb/CSS/StyleProperties.h @@ -137,7 +137,8 @@ public: Optional align_items() const; Optional align_self() const; Optional appearance() const; - CSS::BackdropFilter backdrop_filter() const; + CSS::Filter backdrop_filter() const; + CSS::Filter filter() const; float opacity() const; Optional visibility() const; Optional image_rendering() const; diff --git a/Userland/Libraries/LibWeb/CSS/StyleValues/FilterValueListStyleValue.cpp b/Userland/Libraries/LibWeb/CSS/StyleValues/FilterValueListStyleValue.cpp index 17c4e105b18..16d430994bc 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleValues/FilterValueListStyleValue.cpp +++ b/Userland/Libraries/LibWeb/CSS/StyleValues/FilterValueListStyleValue.cpp @@ -13,7 +13,7 @@ namespace Web::CSS { -float Filter::Blur::resolved_radius(Layout::Node const& node) const +float FilterOperation::Blur::resolved_radius(Layout::Node const& node) const { // Default value when omitted is 0px. auto sigma = 0; @@ -23,7 +23,7 @@ float Filter::Blur::resolved_radius(Layout::Node const& node) const return sigma * 2; } -float Filter::HueRotate::angle_degrees() const +float FilterOperation::HueRotate::angle_degrees() const { // Default value when omitted is 0deg. if (!angle.has_value()) @@ -31,7 +31,7 @@ float Filter::HueRotate::angle_degrees() const return angle->visit([&](Angle const& a) { return a.to_degrees(); }, [&](auto) { return 0.0; }); } -float Filter::Color::resolved_amount() const +float FilterOperation::Color::resolved_amount() const { if (amount.has_value()) { if (amount->is_percentage()) @@ -50,12 +50,12 @@ String FilterValueListStyleValue::to_string() const if (!first) builder.append(' '); filter_function.visit( - [&](Filter::Blur const& blur) { + [&](FilterOperation::Blur const& blur) { builder.append("blur("sv); if (blur.radius.has_value()) builder.append(blur.radius->to_string()); }, - [&](Filter::DropShadow const& drop_shadow) { + [&](FilterOperation::DropShadow const& drop_shadow) { builder.appendff("drop-shadow({} {}"sv, drop_shadow.offset_x, drop_shadow.offset_y); if (drop_shadow.radius.has_value()) @@ -65,7 +65,7 @@ String FilterValueListStyleValue::to_string() const serialize_a_srgb_value(builder, *drop_shadow.color); } }, - [&](Filter::HueRotate const& hue_rotate) { + [&](FilterOperation::HueRotate const& hue_rotate) { builder.append("hue-rotate("sv); if (hue_rotate.angle.has_value()) { hue_rotate.angle->visit( @@ -77,23 +77,23 @@ String FilterValueListStyleValue::to_string() const }); } }, - [&](Filter::Color const& color) { + [&](FilterOperation::Color const& color) { builder.appendff("{}(", [&] { switch (color.operation) { - case Filter::Color::Operation::Brightness: + case FilterOperation::Color::Type::Brightness: return "brightness"sv; - case Filter::Color::Operation::Contrast: + case FilterOperation::Color::Type::Contrast: return "contrast"sv; - case Filter::Color::Operation::Grayscale: + case FilterOperation::Color::Type::Grayscale: return "grayscale"sv; - case Filter::Color::Operation::Invert: + case FilterOperation::Color::Type::Invert: return "invert"sv; - case Filter::Color::Operation::Opacity: + case FilterOperation::Color::Type::Opacity: return "opacity"sv; - case Filter::Color::Operation::Saturate: + case FilterOperation::Color::Type::Saturate: return "saturate"sv; - case Filter::Color::Operation::Sepia: + case FilterOperation::Color::Type::Sepia: return "sepia"sv; default: VERIFY_NOT_REACHED(); diff --git a/Userland/Libraries/LibWeb/CSS/StyleValues/FilterValueListStyleValue.h b/Userland/Libraries/LibWeb/CSS/StyleValues/FilterValueListStyleValue.h index 3d9214ec454..4fd66a801ea 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleValues/FilterValueListStyleValue.h +++ b/Userland/Libraries/LibWeb/CSS/StyleValues/FilterValueListStyleValue.h @@ -16,7 +16,7 @@ namespace Web::CSS { -namespace Filter { +namespace FilterOperation { struct Blur { Optional radius {}; @@ -43,7 +43,7 @@ struct HueRotate { }; struct Color { - enum class Operation { + enum class Type { Brightness, Contrast, Grayscale, @@ -59,7 +59,7 @@ struct Color { }; -using FilterFunction = Variant; +using FilterFunction = Variant; class FilterValueListStyleValue final : public StyleValueWithDefaultOperators { public: diff --git a/Userland/Libraries/LibWeb/Layout/Node.cpp b/Userland/Libraries/LibWeb/Layout/Node.cpp index fa2046a47c9..173e89c6281 100644 --- a/Userland/Libraries/LibWeb/Layout/Node.cpp +++ b/Userland/Libraries/LibWeb/Layout/Node.cpp @@ -512,34 +512,38 @@ void NodeWithStyle::apply_style(const CSS::StyleProperties& computed_style) computed_values.set_order(computed_style.order()); computed_values.set_clip(computed_style.clip()); - if (computed_style.backdrop_filter().has_filters()) { - CSS::ResolvedBackdropFilter resolved_backdrop_filter; - for (auto& filter : computed_style.backdrop_filter().filters()) { + auto resolve_filter = [this](CSS::Filter const& computed_filter) -> CSS::ResolvedFilter { + CSS::ResolvedFilter resolved_filter; + for (auto const& filter : computed_filter.filters()) { filter.visit( - [&](CSS::Filter::Blur const& blur) { - resolved_backdrop_filter.filters.append(CSS::ResolvedBackdropFilter::Blur { + [&](CSS::FilterOperation::Blur const& blur) { + resolved_filter.filters.append(CSS::ResolvedFilter::Blur { .radius = blur.resolved_radius(*this) }); }, - [&](CSS::Filter::DropShadow const& drop_shadow) { + [&](CSS::FilterOperation::DropShadow const& drop_shadow) { // The default value for omitted values is missing length values set to 0 // and the missing used color is taken from the color property. - resolved_backdrop_filter.filters.append(CSS::ResolvedBackdropFilter::DropShadow { + resolved_filter.filters.append(CSS::ResolvedFilter::DropShadow { .offset_x = drop_shadow.offset_x.to_px(*this).to_double(), .offset_y = drop_shadow.offset_y.to_px(*this).to_double(), .radius = drop_shadow.radius.has_value() ? drop_shadow.radius->to_px(*this).to_double() : 0.0, .color = drop_shadow.color.has_value() ? *drop_shadow.color : this->computed_values().color() }); }, - [&](CSS::Filter::Color const& color_operation) { - resolved_backdrop_filter.filters.append(CSS::ResolvedBackdropFilter::ColorOperation { - .operation = color_operation.operation, + [&](CSS::FilterOperation::Color const& color_operation) { + resolved_filter.filters.append(CSS::ResolvedFilter::Color { + .type = color_operation.operation, .amount = color_operation.resolved_amount() }); }, - [&](CSS::Filter::HueRotate const& hue_rotate) { - resolved_backdrop_filter.filters.append(CSS::ResolvedBackdropFilter::HueRotate { .angle_degrees = hue_rotate.angle_degrees() }); + [&](CSS::FilterOperation::HueRotate const& hue_rotate) { + resolved_filter.filters.append(CSS::ResolvedFilter::HueRotate { .angle_degrees = hue_rotate.angle_degrees() }); }); } - computed_values.set_backdrop_filter(resolved_backdrop_filter); - } + return resolved_filter; + }; + if (computed_style.backdrop_filter().has_filters()) + computed_values.set_backdrop_filter(resolve_filter(computed_style.backdrop_filter())); + if (computed_style.filter().has_filters()) + computed_values.set_filter(resolve_filter(computed_style.filter())); auto justify_content = computed_style.justify_content(); if (justify_content.has_value()) diff --git a/Userland/Libraries/LibWeb/Painting/Command.h b/Userland/Libraries/LibWeb/Painting/Command.h index 8726f0dad6f..08f6233f31f 100644 --- a/Userland/Libraries/LibWeb/Painting/Command.h +++ b/Userland/Libraries/LibWeb/Painting/Command.h @@ -285,7 +285,7 @@ struct DrawLine { struct ApplyBackdropFilter { Gfx::IntRect backdrop_region; BorderRadiiData border_radii_data; - CSS::ResolvedBackdropFilter backdrop_filter; + CSS::ResolvedFilter backdrop_filter; [[nodiscard]] Gfx::IntRect bounding_rect() const { return backdrop_region; } diff --git a/Userland/Libraries/LibWeb/Painting/DisplayListPlayerSkia.cpp b/Userland/Libraries/LibWeb/Painting/DisplayListPlayerSkia.cpp index 6d774b9cb18..d456e5758fe 100644 --- a/Userland/Libraries/LibWeb/Painting/DisplayListPlayerSkia.cpp +++ b/Userland/Libraries/LibWeb/Painting/DisplayListPlayerSkia.cpp @@ -964,18 +964,18 @@ void DisplayListPlayerSkia::apply_backdrop_filter(ApplyBackdropFilter const& com for (auto const& filter_function : command.backdrop_filter.filters) { // See: https://drafts.fxtf.org/filter-effects-1/#supported-filter-functions filter_function.visit( - [&](CSS::ResolvedBackdropFilter::Blur const& blur_filter) { + [&](CSS::ResolvedFilter::Blur const& blur_filter) { auto blur_image_filter = SkImageFilters::Blur(blur_filter.radius, blur_filter.radius, nullptr); canvas.saveLayer(SkCanvas::SaveLayerRec(nullptr, nullptr, blur_image_filter.get(), 0)); canvas.restore(); }, - [&](CSS::ResolvedBackdropFilter::ColorOperation const& color) { + [&](CSS::ResolvedFilter::Color const& color) { auto amount = clamp(color.amount, 0.0f, 1.0f); // Matrices are taken from https://drafts.fxtf.org/filter-effects-1/#FilterPrimitiveRepresentation sk_sp color_filter; - switch (color.operation) { - case CSS::Filter::Color::Operation::Grayscale: { + switch (color.type) { + case CSS::FilterOperation::Color::Type::Grayscale: { float matrix[20] = { 0.2126f + 0.7874f * (1 - amount), 0.7152f - 0.7152f * (1 - amount), 0.0722f - 0.0722f * (1 - amount), 0, 0, 0.2126f - 0.2126f * (1 - amount), 0.7152f + 0.2848f * (1 - amount), 0.0722f - 0.0722f * (1 - amount), 0, 0, @@ -985,7 +985,7 @@ void DisplayListPlayerSkia::apply_backdrop_filter(ApplyBackdropFilter const& com color_filter = SkColorFilters::Matrix(matrix); break; } - case CSS::Filter::Color::Operation::Brightness: { + case CSS::FilterOperation::Color::Type::Brightness: { float matrix[20] = { amount, 0, 0, 0, 0, 0, amount, 0, 0, 0, @@ -995,7 +995,7 @@ void DisplayListPlayerSkia::apply_backdrop_filter(ApplyBackdropFilter const& com color_filter = SkColorFilters::Matrix(matrix); break; } - case CSS::Filter::Color::Operation::Contrast: { + case CSS::FilterOperation::Color::Type::Contrast: { float intercept = -(0.5f * amount) + 0.5f; float matrix[20] = { amount, 0, 0, 0, intercept, @@ -1006,7 +1006,7 @@ void DisplayListPlayerSkia::apply_backdrop_filter(ApplyBackdropFilter const& com color_filter = SkColorFilters::Matrix(matrix); break; } - case CSS::Filter::Color::Operation::Invert: { + case CSS::FilterOperation::Color::Type::Invert: { float matrix[20] = { 1 - 2 * amount, 0, 0, 0, amount, 0, 1 - 2 * amount, 0, 0, amount, @@ -1016,7 +1016,7 @@ void DisplayListPlayerSkia::apply_backdrop_filter(ApplyBackdropFilter const& com color_filter = SkColorFilters::Matrix(matrix); break; } - case CSS::Filter::Color::Operation::Opacity: { + case CSS::FilterOperation::Color::Type::Opacity: { float matrix[20] = { 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, @@ -1026,7 +1026,7 @@ void DisplayListPlayerSkia::apply_backdrop_filter(ApplyBackdropFilter const& com color_filter = SkColorFilters::Matrix(matrix); break; } - case CSS::Filter::Color::Operation::Sepia: { + case CSS::FilterOperation::Color::Type::Sepia: { float matrix[20] = { 0.393f + 0.607f * (1 - amount), 0.769f - 0.769f * (1 - amount), 0.189f - 0.189f * (1 - amount), 0, 0, 0.349f - 0.349f * (1 - amount), 0.686f + 0.314f * (1 - amount), 0.168f - 0.168f * (1 - amount), 0, 0, @@ -1036,7 +1036,7 @@ void DisplayListPlayerSkia::apply_backdrop_filter(ApplyBackdropFilter const& com color_filter = SkColorFilters::Matrix(matrix); break; } - case CSS::Filter::Color::Operation::Saturate: { + case CSS::FilterOperation::Color::Type::Saturate: { float matrix[20] = { 0.213f + 0.787f * amount, 0.715f - 0.715f * amount, 0.072f - 0.072f * amount, 0, 0, 0.213f - 0.213f * amount, 0.715f + 0.285f * amount, 0.072f - 0.072f * amount, 0, 0, @@ -1054,7 +1054,7 @@ void DisplayListPlayerSkia::apply_backdrop_filter(ApplyBackdropFilter const& com canvas.saveLayer(SkCanvas::SaveLayerRec(nullptr, nullptr, image_filter.get(), 0)); canvas.restore(); }, - [&](CSS::ResolvedBackdropFilter::HueRotate const& hue_rotate) { + [&](CSS::ResolvedFilter::HueRotate const& hue_rotate) { float radians = AK::to_radians(hue_rotate.angle_degrees); auto cosA = cos(radians); @@ -1082,7 +1082,7 @@ void DisplayListPlayerSkia::apply_backdrop_filter(ApplyBackdropFilter const& com canvas.saveLayer(SkCanvas::SaveLayerRec(nullptr, nullptr, image_filter.get(), 0)); canvas.restore(); }, - [&](CSS::ResolvedBackdropFilter::DropShadow const&) { + [&](CSS::ResolvedFilter::DropShadow const&) { dbgln("TODO: Implement drop-shadow() filter function!"); }); } diff --git a/Userland/Libraries/LibWeb/Painting/DisplayListRecorder.cpp b/Userland/Libraries/LibWeb/Painting/DisplayListRecorder.cpp index 38fe974714b..5958dd6f8c1 100644 --- a/Userland/Libraries/LibWeb/Painting/DisplayListRecorder.cpp +++ b/Userland/Libraries/LibWeb/Painting/DisplayListRecorder.cpp @@ -299,7 +299,7 @@ void DisplayListRecorder::pop_stacking_context() append(PopStackingContext {}); } -void DisplayListRecorder::apply_backdrop_filter(Gfx::IntRect const& backdrop_region, BorderRadiiData const& border_radii_data, CSS::ResolvedBackdropFilter const& backdrop_filter) +void DisplayListRecorder::apply_backdrop_filter(Gfx::IntRect const& backdrop_region, BorderRadiiData const& border_radii_data, CSS::ResolvedFilter const& backdrop_filter) { if (backdrop_region.is_empty()) return; diff --git a/Userland/Libraries/LibWeb/Painting/DisplayListRecorder.h b/Userland/Libraries/LibWeb/Painting/DisplayListRecorder.h index db151c2a959..6cddbf4a6e0 100644 --- a/Userland/Libraries/LibWeb/Painting/DisplayListRecorder.h +++ b/Userland/Libraries/LibWeb/Painting/DisplayListRecorder.h @@ -124,7 +124,7 @@ public: void add_rounded_rect_clip(CornerRadii corner_radii, Gfx::IntRect border_rect, CornerClip corner_clip); void add_mask(RefPtr display_list, Gfx::IntRect rect); - void apply_backdrop_filter(Gfx::IntRect const& backdrop_region, BorderRadiiData const& border_radii_data, CSS::ResolvedBackdropFilter const& backdrop_filter); + void apply_backdrop_filter(Gfx::IntRect const& backdrop_region, BorderRadiiData const& border_radii_data, CSS::ResolvedFilter const& backdrop_filter); void paint_outer_box_shadow_params(PaintBoxShadowParams params); void paint_inner_box_shadow_params(PaintBoxShadowParams params);