diff --git a/Libraries/LibWeb/CSS/CalculatedOr.cpp b/Libraries/LibWeb/CSS/CalculatedOr.cpp index f22d56f8940..5eb4485ae39 100644 --- a/Libraries/LibWeb/CSS/CalculatedOr.cpp +++ b/Libraries/LibWeb/CSS/CalculatedOr.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -67,6 +68,30 @@ NonnullRefPtr LengthOrCalculated::create_style_value() const return LengthStyleValue::create(value()); } +Optional LengthOrAutoOrCalculated::resolve_calculated(NonnullRefPtr const& calculated, CalculationResolutionContext const& context) const +{ + return calculated->resolve_length(context).map([](auto& length) { return LengthOrAuto { length }; }); +} + +NonnullRefPtr LengthOrAutoOrCalculated::create_style_value() const +{ + auto const& length_or_auto = value(); + if (length_or_auto.is_auto()) + return KeywordStyleValue::create(Keyword::Auto); + return LengthStyleValue::create(length_or_auto.length()); +} + +bool LengthOrAutoOrCalculated::is_auto() const +{ + return !is_calculated() && value().is_auto(); +} + +LengthOrCalculated LengthOrAutoOrCalculated::without_auto() const +{ + VERIFY(!is_auto()); + return value().length(); +} + Optional NumberOrCalculated::resolve_calculated(NonnullRefPtr const& calculated, CalculationResolutionContext const& context) const { return calculated->resolve_number_deprecated(context); diff --git a/Libraries/LibWeb/CSS/CalculatedOr.h b/Libraries/LibWeb/CSS/CalculatedOr.h index 67b17d4bd0e..1323ddb6698 100644 --- a/Libraries/LibWeb/CSS/CalculatedOr.h +++ b/Libraries/LibWeb/CSS/CalculatedOr.h @@ -154,6 +154,16 @@ public: NonnullRefPtr create_style_value() const; }; +class LengthOrAutoOrCalculated : public CalculatedOr { +public: + using CalculatedOr::CalculatedOr; + + Optional resolve_calculated(NonnullRefPtr const&, CalculationResolutionContext const&) const; + NonnullRefPtr create_style_value() const; + bool is_auto() const; + LengthOrCalculated without_auto() const; +}; + class NumberOrCalculated : public CalculatedOr { public: using CalculatedOr::CalculatedOr; diff --git a/Libraries/LibWeb/Forward.h b/Libraries/LibWeb/Forward.h index 3a7531a6ae8..d500b4c516d 100644 --- a/Libraries/LibWeb/Forward.h +++ b/Libraries/LibWeb/Forward.h @@ -311,6 +311,7 @@ class KeywordStyleValue; class Length; class LengthBox; class LengthOrAuto; +class LengthOrAutoOrCalculated; class LengthOrCalculated; class LengthPercentage; class LengthStyleValue;