diff --git a/Userland/Libraries/LibWeb/CSS/StyleValue.cpp b/Userland/Libraries/LibWeb/CSS/StyleValue.cpp index 7e339fc15e..3f2ac18ec0 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleValue.cpp +++ b/Userland/Libraries/LibWeb/CSS/StyleValue.cpp @@ -150,6 +150,12 @@ LengthStyleValue const& StyleValue::as_length() const return static_cast(*this); } +GridTrackSizeStyleValue const& StyleValue::as_grid_track_size() const +{ + VERIFY(is_grid_track_size()); + return static_cast(*this); +} + LinearGradientStyleValue const& StyleValue::as_linear_gradient() const { VERIFY(is_linear_gradient()); @@ -1198,6 +1204,25 @@ bool FrequencyStyleValue::equals(StyleValue const& other) const return m_frequency == other.as_frequency().m_frequency; } +String GridTrackSizeStyleValue::to_string() const +{ + StringBuilder builder; + for (size_t i = 0; i < m_grid_track.size(); i++) { + builder.append(m_grid_track[i].to_string()); + if (i != m_grid_track.size() - 1) + builder.append(" "sv); + } + return builder.to_string(); +} + +bool GridTrackSizeStyleValue::equals(StyleValue const& other) const +{ + if (type() != other.type()) + return false; + auto const& typed_other = other.as_grid_track_size(); + return m_grid_track == typed_other.grid_track_size(); +} + String IdentifierStyleValue::to_string() const { return CSS::string_from_value_id(m_id); @@ -1906,6 +1931,11 @@ NonnullRefPtr ColorStyleValue::create(Color color) return adopt_ref(*new ColorStyleValue(color)); } +NonnullRefPtr GridTrackSizeStyleValue::create(Vector grid_track_size) +{ + return adopt_ref(*new GridTrackSizeStyleValue(grid_track_size)); +} + NonnullRefPtr RectStyleValue::create(EdgeRect rect) { return adopt_ref(*new RectStyleValue(rect)); diff --git a/Userland/Libraries/LibWeb/CSS/StyleValue.h b/Userland/Libraries/LibWeb/CSS/StyleValue.h index 0024d272ff..4e61321db2 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleValue.h +++ b/Userland/Libraries/LibWeb/CSS/StyleValue.h @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -130,6 +131,7 @@ public: FlexFlow, Font, Frequency, + GridTrackSize, Identifier, Image, Inherit, @@ -171,6 +173,7 @@ public: bool is_flex_flow() const { return type() == Type::FlexFlow; } bool is_font() const { return type() == Type::Font; } bool is_frequency() const { return type() == Type::Frequency; } + bool is_grid_track_size() const { return type() == Type::GridTrackSize; } bool is_identifier() const { return type() == Type::Identifier; } bool is_image() const { return type() == Type::Image; } bool is_inherit() const { return type() == Type::Inherit; } @@ -210,6 +213,7 @@ public: FlexStyleValue const& as_flex() const; FontStyleValue const& as_font() const; FrequencyStyleValue const& as_frequency() const; + GridTrackSizeStyleValue const& as_grid_track_size() const; IdentifierStyleValue const& as_identifier() const; ImageStyleValue const& as_image() const; InheritStyleValue const& as_inherit() const; @@ -247,6 +251,7 @@ public: FlexStyleValue& as_flex() { return const_cast(const_cast(*this).as_flex()); } FontStyleValue& as_font() { return const_cast(const_cast(*this).as_font()); } FrequencyStyleValue& as_frequency() { return const_cast(const_cast(*this).as_frequency()); } + GridTrackSizeStyleValue& as_grid_track_size() { return const_cast(const_cast(*this).as_grid_track_size()); } IdentifierStyleValue& as_identifier() { return const_cast(const_cast(*this).as_identifier()); } ImageStyleValue& as_image() { return const_cast(const_cast(*this).as_image()); } InheritStyleValue& as_inherit() { return const_cast(const_cast(*this).as_inherit()); } @@ -897,6 +902,25 @@ private: Frequency m_frequency; }; +class GridTrackSizeStyleValue final : public StyleValue { +public: + static NonnullRefPtr create(Vector grid_track_size); + virtual ~GridTrackSizeStyleValue() override = default; + + Vector grid_track_size() const { return m_grid_track; } + virtual String to_string() const override; + virtual bool equals(StyleValue const& other) const override; + +private: + explicit GridTrackSizeStyleValue(Vector grid_track_size) + : StyleValue(Type::GridTrackSize) + , m_grid_track(grid_track_size) + { + } + + Vector m_grid_track; +}; + class IdentifierStyleValue final : public StyleValue { public: static NonnullRefPtr create(CSS::ValueID id) diff --git a/Userland/Libraries/LibWeb/Forward.h b/Userland/Libraries/LibWeb/Forward.h index 0904e65f94..28f04dbd79 100644 --- a/Userland/Libraries/LibWeb/Forward.h +++ b/Userland/Libraries/LibWeb/Forward.h @@ -59,6 +59,7 @@ class FrequencyPercentage; class FrequencyStyleValue; class GridTrackPlacement; class GridTrackSize; +class GridTrackSizeStyleValue; class IdentifierStyleValue; class ImageStyleValue; class InheritStyleValue;