diff --git a/Userland/Libraries/LibWeb/CSS/Angle.cpp b/Userland/Libraries/LibWeb/CSS/Angle.cpp index 0a0b8a2ecac..b7b47d7ed21 100644 --- a/Userland/Libraries/LibWeb/CSS/Angle.cpp +++ b/Userland/Libraries/LibWeb/CSS/Angle.cpp @@ -7,6 +7,7 @@ #include "Angle.h" #include #include +#include namespace Web::CSS { @@ -83,4 +84,9 @@ Optional Angle::unit_from_name(StringView name) return {}; } +Angle Angle::resolve_calculated(NonnullRefPtr const& calculated, Layout::Node const&, Angle const& reference_value) +{ + return calculated->resolve_angle_percentage(reference_value).value(); +} + } diff --git a/Userland/Libraries/LibWeb/CSS/Angle.h b/Userland/Libraries/LibWeb/CSS/Angle.h index 7602662ca82..ac83fef4117 100644 --- a/Userland/Libraries/LibWeb/CSS/Angle.h +++ b/Userland/Libraries/LibWeb/CSS/Angle.h @@ -51,6 +51,8 @@ public: return 0; } + static Angle resolve_calculated(NonnullRefPtr const&, Layout::Node const&, Angle const& reference_value); + private: StringView unit_name() const; diff --git a/Userland/Libraries/LibWeb/CSS/Frequency.cpp b/Userland/Libraries/LibWeb/CSS/Frequency.cpp index bcbe4fe07b0..1cecd756cc8 100644 --- a/Userland/Libraries/LibWeb/CSS/Frequency.cpp +++ b/Userland/Libraries/LibWeb/CSS/Frequency.cpp @@ -6,6 +6,7 @@ #include "Frequency.h" #include +#include namespace Web::CSS { @@ -62,4 +63,9 @@ Optional Frequency::unit_from_name(StringView name) return {}; } +Frequency Frequency::resolve_calculated(NonnullRefPtr const& calculated, Layout::Node const&, Frequency const& reference_value) +{ + return calculated->resolve_frequency_percentage(reference_value).value(); +} + } diff --git a/Userland/Libraries/LibWeb/CSS/Frequency.h b/Userland/Libraries/LibWeb/CSS/Frequency.h index 38587935bd7..d3cc46b572e 100644 --- a/Userland/Libraries/LibWeb/CSS/Frequency.h +++ b/Userland/Libraries/LibWeb/CSS/Frequency.h @@ -46,6 +46,8 @@ public: return 0; } + static Frequency resolve_calculated(NonnullRefPtr const&, Layout::Node const&, Frequency const& reference_value); + private: StringView unit_name() const; diff --git a/Userland/Libraries/LibWeb/CSS/Length.cpp b/Userland/Libraries/LibWeb/CSS/Length.cpp index 968bac6267a..39bc9dd2506 100644 --- a/Userland/Libraries/LibWeb/CSS/Length.cpp +++ b/Userland/Libraries/LibWeb/CSS/Length.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, Andreas Kling + * Copyright (c) 2020-2024, Andreas Kling * Copyright (c) 2021, Tobias Christiansen * Copyright (c) 2022-2023, Sam Atkins * @@ -391,4 +391,14 @@ Length Length::absolutized(CSSPixelRect const& viewport_rect, FontMetrics const& return absolutize(viewport_rect, font_metrics, root_font_metrics).value_or(*this); } +Length Length::resolve_calculated(NonnullRefPtr const& calculated, Layout::Node const& layout_node, Length const& reference_value) +{ + return calculated->resolve_length_percentage(layout_node, reference_value).value(); +} + +Length Length::resolve_calculated(NonnullRefPtr const& calculated, Layout::Node const& layout_node, CSSPixels reference_value) +{ + return calculated->resolve_length_percentage(layout_node, reference_value).value(); +} + } diff --git a/Userland/Libraries/LibWeb/CSS/Length.h b/Userland/Libraries/LibWeb/CSS/Length.h index d3eeddd3024..a90a333ed2b 100644 --- a/Userland/Libraries/LibWeb/CSS/Length.h +++ b/Userland/Libraries/LibWeb/CSS/Length.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018-2020, Andreas Kling + * Copyright (c) 2018-2024, Andreas Kling * Copyright (c) 2021-2023, Sam Atkins * * SPDX-License-Identifier: BSD-2-Clause @@ -222,6 +222,9 @@ public: Optional absolutize(CSSPixelRect const& viewport_rect, FontMetrics const& font_metrics, FontMetrics const& root_font_metrics) const; Length absolutized(CSSPixelRect const& viewport_rect, FontMetrics const& font_metrics, FontMetrics const& root_font_metrics) const; + static Length resolve_calculated(NonnullRefPtr const&, Layout::Node const&, Length const& reference_value); + static Length resolve_calculated(NonnullRefPtr const&, Layout::Node const&, CSSPixels reference_value); + private: char const* unit_name() const; diff --git a/Userland/Libraries/LibWeb/CSS/PercentageOr.cpp b/Userland/Libraries/LibWeb/CSS/PercentageOr.cpp index f55454af9d4..86fae591866 100644 --- a/Userland/Libraries/LibWeb/CSS/PercentageOr.cpp +++ b/Userland/Libraries/LibWeb/CSS/PercentageOr.cpp @@ -8,29 +8,4 @@ namespace Web::CSS { -Angle AnglePercentage::resolve_calculated(NonnullRefPtr const& calculated, Layout::Node const&, Angle const& reference_value) const -{ - return calculated->resolve_angle_percentage(reference_value).value(); -} - -Frequency FrequencyPercentage::resolve_calculated(NonnullRefPtr const& calculated, Layout::Node const&, Frequency const& reference_value) const -{ - return calculated->resolve_frequency_percentage(reference_value).value(); -} - -Length LengthPercentage::resolve_calculated(NonnullRefPtr const& calculated, Layout::Node const& layout_node, Length const& reference_value) const -{ - return calculated->resolve_length_percentage(layout_node, reference_value).value(); -} - -Length LengthPercentage::resolve_calculated(NonnullRefPtr const& calculated, Layout::Node const& layout_node, CSSPixels reference_value) const -{ - return calculated->resolve_length_percentage(layout_node, reference_value).value(); -} - -Time TimePercentage::resolve_calculated(NonnullRefPtr const& calculated, Layout::Node const&, Time const& reference_value) const -{ - return calculated->resolve_time_percentage(reference_value).value(); -} - } diff --git a/Userland/Libraries/LibWeb/CSS/PercentageOr.h b/Userland/Libraries/LibWeb/CSS/PercentageOr.h index a6cf565e560..1eb74c427dd 100644 --- a/Userland/Libraries/LibWeb/CSS/PercentageOr.h +++ b/Userland/Libraries/LibWeb/CSS/PercentageOr.h @@ -36,7 +36,7 @@ public: { } - virtual ~PercentageOr() = default; + ~PercentageOr() = default; PercentageOr& operator=(T t) { @@ -83,18 +83,6 @@ public: return m_value.template get>(); } - virtual T resolve_calculated(NonnullRefPtr const&, Layout::Node const&, T const& reference_value) const - { - (void)reference_value; - VERIFY_NOT_REACHED(); - } - - virtual T resolve_calculated(NonnullRefPtr const&, Layout::Node const&, CSSPixels reference_value) const - { - (void)reference_value; - VERIFY_NOT_REACHED(); - } - CSSPixels to_px(Layout::Node const& layout_node, CSSPixels reference_value) const { if constexpr (IsSame) { @@ -113,7 +101,7 @@ public: [&](T const& t) { if constexpr (requires { t.is_calculated(); }) { if (t.is_calculated()) - return resolve_calculated(t.calculated_style_value(), layout_node, reference_value); + return T::resolve_calculated(t.calculated_style_value(), layout_node, reference_value); } return t; @@ -122,7 +110,7 @@ public: return reference_value.percentage_of(percentage); }, [&](NonnullRefPtr const& calculated) { - return resolve_calculated(calculated, layout_node, reference_value); + return T::resolve_calculated(calculated, layout_node, reference_value); }); } @@ -132,7 +120,7 @@ public: [&](T const& t) { if constexpr (requires { t.is_calculated(); }) { if (t.is_calculated()) - return resolve_calculated(t.calculated_style_value(), layout_node, reference_value); + return T::resolve_calculated(t.calculated_style_value(), layout_node, reference_value); } return t; @@ -141,7 +129,7 @@ public: return Length::make_px(CSSPixels(percentage.value() * reference_value) / 100); }, [&](NonnullRefPtr const& calculated) { - return resolve_calculated(calculated, layout_node, reference_value); + return T::resolve_calculated(calculated, layout_node, reference_value); }); } @@ -205,7 +193,6 @@ public: bool is_angle() const { return is_t(); } Angle const& angle() const { return get_t(); } - virtual Angle resolve_calculated(NonnullRefPtr const&, Layout::Node const&, Angle const& reference_value) const override; }; class FrequencyPercentage : public PercentageOr { @@ -214,7 +201,6 @@ public: bool is_frequency() const { return is_t(); } Frequency const& frequency() const { return get_t(); } - virtual Frequency resolve_calculated(NonnullRefPtr const&, Layout::Node const&, Frequency const& reference_value) const override; }; class LengthPercentage : public PercentageOr { @@ -225,8 +211,6 @@ public: bool is_length() const { return is_t(); } Length const& length() const { return get_t(); } - virtual Length resolve_calculated(NonnullRefPtr const&, Layout::Node const&, Length const& reference_value) const override; - virtual Length resolve_calculated(NonnullRefPtr const&, Layout::Node const&, CSSPixels reference_value) const override; }; class TimePercentage : public PercentageOr