use blitz_dom::util::ToColorColor as _;
use style::color::AbsoluteColor;
pub(crate) use style::computed_values::filter::single_value::T as StyloFilter;
use anyrender::filters::{Filter, FilterEffect};
pub(crate) fn convert_filters(filters: &[StyloFilter]) -> Option<Filter> {
if filters.is_empty() {
return None;
}
Some(Filter::linear_list(
filters.iter().filter_map(convert_single_filter),
))
}
pub(crate) fn convert_single_filter(filter: &StyloFilter) -> Option<FilterEffect> {
Some(match filter {
StyloFilter::Blur(radius) => FilterEffect::blur(radius.px()),
StyloFilter::Brightness(amount) => FilterEffect::brightness(amount.0),
StyloFilter::Contrast(amount) => FilterEffect::contrast(amount.0),
StyloFilter::Grayscale(amount) => FilterEffect::grayscale(amount.0),
StyloFilter::HueRotate(angle) => FilterEffect::hue_rotate(angle.radians()),
StyloFilter::Invert(amount) => FilterEffect::invert(amount.0),
StyloFilter::Opacity(amount) => FilterEffect::opacity(amount.0),
StyloFilter::Saturate(amount) => FilterEffect::saturate(amount.0),
StyloFilter::Sepia(amount) => FilterEffect::sepia(amount.0),
StyloFilter::DropShadow(shadow) => FilterEffect::drop_shadow(
shadow.horizontal.px(),
shadow.vertical.px(),
shadow.blur.px(),
shadow
.color
.resolve_to_absolute(&AbsoluteColor::BLACK)
.as_color_color(),
),
StyloFilter::Url(_) => return None,
})
}