1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 14:27:35 +00:00

LibWeb: Allow calc() in opacity

This is mostly a test to make sure that resolving calc() to a number or
percentage works correctly. I don't love how this ended up.
This commit is contained in:
Sam Atkins 2022-01-27 17:44:22 +00:00 committed by Andreas Kling
parent 8bd1854406
commit e4251f3327

View file

@ -164,13 +164,30 @@ float StyleProperties::opacity() const
return 1.0f;
auto& value = maybe_value.value();
if (value->has_number())
return clamp(value->to_number(), 0.0f, 1.0f);
float unclamped_opacity = 1.0f;
if (value->is_percentage())
return clamp(value->as_percentage().percentage().as_fraction(), 0.0f, 1.0f);
if (value->has_number()) {
unclamped_opacity = value->to_number();
} else if (value->is_calculated()) {
auto& calculated = value->as_calculated();
if (calculated.resolved_type() == CalculatedStyleValue::ResolvedType::Percentage) {
auto maybe_percentage = value->as_calculated().resolve_percentage();
if (maybe_percentage.has_value())
unclamped_opacity = maybe_percentage->as_fraction();
else
dbgln("Unable to resolve calc() as opacity (percentage): {}", value->to_string());
} else {
auto maybe_number = value->as_calculated().resolve_number();
if (maybe_number.has_value())
unclamped_opacity = maybe_number.value();
else
dbgln("Unable to resolve calc() as opacity (number): {}", value->to_string());
}
} else if (value->is_percentage()) {
unclamped_opacity = value->as_percentage().percentage().as_fraction();
}
return 1.0f;
return clamp(unclamped_opacity, 0.0f, 1.0f);
}
Optional<CSS::FlexDirection> StyleProperties::flex_direction() const