From c40dd9ee78371bfcf2dd321fcc8730c7aef5c4e3 Mon Sep 17 00:00:00 2001 From: martinfalisse Date: Wed, 24 Aug 2022 12:25:56 +0200 Subject: [PATCH] LibWeb: Add GridTrackPlacementShorthandStyleValue Add GridTrackPlacementShorthandStyleValue for the use of grid-column and grid-row. --- Userland/Libraries/LibWeb/CSS/StyleValue.cpp | 22 +++++++++++++ Userland/Libraries/LibWeb/CSS/StyleValue.h | 34 ++++++++++++++++++++ Userland/Libraries/LibWeb/Forward.h | 1 + 3 files changed, 57 insertions(+) diff --git a/Userland/Libraries/LibWeb/CSS/StyleValue.cpp b/Userland/Libraries/LibWeb/CSS/StyleValue.cpp index c21f2ca580..e2142e1957 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleValue.cpp +++ b/Userland/Libraries/LibWeb/CSS/StyleValue.cpp @@ -120,6 +120,12 @@ FrequencyStyleValue const& StyleValue::as_frequency() const return static_cast(*this); } +GridTrackPlacementShorthandStyleValue const& StyleValue::as_grid_track_placement_shorthand() const +{ + VERIFY(is_grid_track_placement_shorthand()); + return static_cast(*this); +} + GridTrackPlacementStyleValue const& StyleValue::as_grid_track_placement() const { VERIFY(is_grid_track_placement()); @@ -1210,6 +1216,22 @@ bool FrequencyStyleValue::equals(StyleValue const& other) const return m_frequency == other.as_frequency().m_frequency; } +String GridTrackPlacementShorthandStyleValue::to_string() const +{ + if (m_end->grid_track_placement().position() == 0) + return String::formatted("{}", m_start->grid_track_placement().to_string()); + return String::formatted("{} / {}", m_start->grid_track_placement().to_string(), m_end->grid_track_placement().to_string()); +} + +bool GridTrackPlacementShorthandStyleValue::equals(StyleValue const& other) const +{ + if (type() != other.type()) + return false; + auto const& typed_other = other.as_grid_track_placement_shorthand(); + return m_start->equals(typed_other.m_start) + && m_end->equals(typed_other.m_end); +} + String GridTrackPlacementStyleValue::to_string() const { return m_grid_track_placement.to_string(); diff --git a/Userland/Libraries/LibWeb/CSS/StyleValue.h b/Userland/Libraries/LibWeb/CSS/StyleValue.h index ec7936355b..5118c7a26a 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleValue.h +++ b/Userland/Libraries/LibWeb/CSS/StyleValue.h @@ -133,6 +133,7 @@ public: Font, Frequency, GridTrackPlacement, + GridTrackPlacementShorthand, GridTrackSize, Identifier, Image, @@ -176,6 +177,7 @@ public: bool is_font() const { return type() == Type::Font; } bool is_frequency() const { return type() == Type::Frequency; } bool is_grid_track_placement() const { return type() == Type::GridTrackPlacement; } + bool is_grid_track_placement_shorthand() const { return type() == Type::GridTrackPlacementShorthand; } 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; } @@ -216,6 +218,7 @@ public: FlexStyleValue const& as_flex() const; FontStyleValue const& as_font() const; FrequencyStyleValue const& as_frequency() const; + GridTrackPlacementShorthandStyleValue const& as_grid_track_placement_shorthand() const; GridTrackPlacementStyleValue const& as_grid_track_placement() const; GridTrackSizeStyleValue const& as_grid_track_size() const; IdentifierStyleValue const& as_identifier() const; @@ -255,6 +258,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()); } + GridTrackPlacementShorthandStyleValue& as_grid_track_placement_shorthand() { return const_cast(const_cast(*this).as_grid_track_placement_shorthand()); } GridTrackPlacementStyleValue& as_grid_track_placement() { return const_cast(const_cast(*this).as_grid_track_placement()); } 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()); } @@ -926,6 +930,36 @@ private: CSS::GridTrackPlacement m_grid_track_placement; }; +class GridTrackPlacementShorthandStyleValue final : public StyleValue { +public: + static NonnullRefPtr create(NonnullRefPtr start, NonnullRefPtr end) + { + return adopt_ref(*new GridTrackPlacementShorthandStyleValue(start, end)); + } + static NonnullRefPtr create(GridTrackPlacement start) + { + return adopt_ref(*new GridTrackPlacementShorthandStyleValue(GridTrackPlacementStyleValue::create(start), GridTrackPlacementStyleValue::create(GridTrackPlacement::make_auto()))); + } + virtual ~GridTrackPlacementShorthandStyleValue() override = default; + + NonnullRefPtr start() const { return m_start; } + NonnullRefPtr end() const { return m_end; } + + virtual String to_string() const override; + virtual bool equals(StyleValue const& other) const override; + +private: + GridTrackPlacementShorthandStyleValue(NonnullRefPtr start, NonnullRefPtr end) + : StyleValue(Type::GridTrackPlacementShorthand) + , m_start(start) + , m_end(end) + { + } + + NonnullRefPtr m_start; + NonnullRefPtr m_end; +}; + class GridTrackSizeStyleValue final : public StyleValue { public: static NonnullRefPtr create(Vector grid_track_size); diff --git a/Userland/Libraries/LibWeb/Forward.h b/Userland/Libraries/LibWeb/Forward.h index 37ea31b478..b852bc722c 100644 --- a/Userland/Libraries/LibWeb/Forward.h +++ b/Userland/Libraries/LibWeb/Forward.h @@ -58,6 +58,7 @@ class Frequency; class FrequencyPercentage; class FrequencyStyleValue; class GridTrackPlacement; +class GridTrackPlacementShorthandStyleValue; class GridTrackPlacementStyleValue; class GridTrackSize; class GridTrackSizeStyleValue;