diff --git a/Libraries/LibWeb/CSS/CalculatedOr.h b/Libraries/LibWeb/CSS/CalculatedOr.h index ee6d564fe4a..1d2f340e8d4 100644 --- a/Libraries/LibWeb/CSS/CalculatedOr.h +++ b/Libraries/LibWeb/CSS/CalculatedOr.h @@ -18,7 +18,7 @@ namespace Web::CSS { -template +template class CalculatedOr { public: CalculatedOr(T t) @@ -31,8 +31,6 @@ public: { } - virtual ~CalculatedOr() = default; - bool is_calculated() const { return m_value.template has>(); } T const& value() const @@ -80,7 +78,7 @@ public: }); } - bool operator==(CalculatedOr const& other) const + bool operator==(CalculatedOr const& other) const { if (is_calculated() || other.is_calculated()) return false; @@ -88,92 +86,89 @@ public: } protected: - virtual Optional resolve_calculated(NonnullRefPtr const&, CalculationResolutionContext const&) const = 0; - virtual NonnullRefPtr create_style_value() const = 0; + Optional resolve_calculated(NonnullRefPtr const& calculated, CalculationResolutionContext const& context) const + { + return static_cast(this)->resolve_calculated(calculated, context); + } + NonnullRefPtr create_style_value() const + { + return static_cast(this)->create_style_value(); + } private: Variant> m_value; }; -class AngleOrCalculated : public CalculatedOr { +class AngleOrCalculated : public CalculatedOr { public: - using CalculatedOr::CalculatedOr; + using CalculatedOr::CalculatedOr; -private: - virtual Optional resolve_calculated(NonnullRefPtr const&, CalculationResolutionContext const&) const override; - virtual NonnullRefPtr create_style_value() const override; + Optional resolve_calculated(NonnullRefPtr const&, CalculationResolutionContext const&) const; + NonnullRefPtr create_style_value() const; }; -class FlexOrCalculated : public CalculatedOr { +class FlexOrCalculated : public CalculatedOr { public: - using CalculatedOr::CalculatedOr; + using CalculatedOr::CalculatedOr; -private: - virtual Optional resolve_calculated(NonnullRefPtr const&, CalculationResolutionContext const&) const override; - virtual NonnullRefPtr create_style_value() const override; + Optional resolve_calculated(NonnullRefPtr const&, CalculationResolutionContext const&) const; + NonnullRefPtr create_style_value() const; }; -class FrequencyOrCalculated : public CalculatedOr { +class FrequencyOrCalculated : public CalculatedOr { public: - using CalculatedOr::CalculatedOr; + using CalculatedOr::CalculatedOr; -private: - virtual Optional resolve_calculated(NonnullRefPtr const&, CalculationResolutionContext const&) const override; - virtual NonnullRefPtr create_style_value() const override; + Optional resolve_calculated(NonnullRefPtr const&, CalculationResolutionContext const&) const; + NonnullRefPtr create_style_value() const; }; -class IntegerOrCalculated : public CalculatedOr { +class IntegerOrCalculated : public CalculatedOr { public: - using CalculatedOr::CalculatedOr; + using CalculatedOr::CalculatedOr; -private: - virtual Optional resolve_calculated(NonnullRefPtr const&, CalculationResolutionContext const&) const override; - virtual NonnullRefPtr create_style_value() const override; + Optional resolve_calculated(NonnullRefPtr const&, CalculationResolutionContext const&) const; + NonnullRefPtr create_style_value() const; }; -class LengthOrCalculated : public CalculatedOr { +class LengthOrCalculated : public CalculatedOr { public: - using CalculatedOr::CalculatedOr; + using CalculatedOr::CalculatedOr; -private: - virtual Optional resolve_calculated(NonnullRefPtr const&, CalculationResolutionContext const&) const override; - virtual NonnullRefPtr create_style_value() const override; + Optional resolve_calculated(NonnullRefPtr const&, CalculationResolutionContext const&) const; + NonnullRefPtr create_style_value() const; }; -class NumberOrCalculated : public CalculatedOr { +class NumberOrCalculated : public CalculatedOr { public: - using CalculatedOr::CalculatedOr; + using CalculatedOr::CalculatedOr; -private: - virtual Optional resolve_calculated(NonnullRefPtr const&, CalculationResolutionContext const&) const override; - virtual NonnullRefPtr create_style_value() const override; + Optional resolve_calculated(NonnullRefPtr const&, CalculationResolutionContext const&) const; + NonnullRefPtr create_style_value() const; }; -class PercentageOrCalculated : public CalculatedOr { +class PercentageOrCalculated : public CalculatedOr { public: - using CalculatedOr::CalculatedOr; + using CalculatedOr::CalculatedOr; -private: - virtual Optional resolve_calculated(NonnullRefPtr const&, CalculationResolutionContext const&) const override; - virtual NonnullRefPtr create_style_value() const override; + Optional resolve_calculated(NonnullRefPtr const&, CalculationResolutionContext const&) const; + NonnullRefPtr create_style_value() const; }; -class ResolutionOrCalculated : public CalculatedOr { +class ResolutionOrCalculated : public CalculatedOr { public: - using CalculatedOr::CalculatedOr; + using CalculatedOr::CalculatedOr; -private: - virtual Optional resolve_calculated(NonnullRefPtr const&, CalculationResolutionContext const&) const override; - virtual NonnullRefPtr create_style_value() const override; + Optional resolve_calculated(NonnullRefPtr const&, CalculationResolutionContext const&) const; + NonnullRefPtr create_style_value() const; }; -class TimeOrCalculated : public CalculatedOr