diff --git a/Meta/gn/secondary/Userland/Libraries/LibWeb/CSS/StyleValues/BUILD.gn b/Meta/gn/secondary/Userland/Libraries/LibWeb/CSS/StyleValues/BUILD.gn index bbb1b829cb..b879158fa9 100644 --- a/Meta/gn/secondary/Userland/Libraries/LibWeb/CSS/StyleValues/BUILD.gn +++ b/Meta/gn/secondary/Userland/Libraries/LibWeb/CSS/StyleValues/BUILD.gn @@ -18,7 +18,6 @@ source_set("StyleValues") { "GridTemplateAreaStyleValue.cpp", "GridTrackPlacementShorthandStyleValue.cpp", "GridTrackPlacementStyleValue.cpp", - "GridTrackSizeListShorthandStyleValue.cpp", "GridTrackSizeListStyleValue.cpp", "IdentifierStyleValue.cpp", "ImageStyleValue.cpp", diff --git a/Userland/Libraries/LibWeb/CMakeLists.txt b/Userland/Libraries/LibWeb/CMakeLists.txt index fa3669af8d..3fe8653144 100644 --- a/Userland/Libraries/LibWeb/CMakeLists.txt +++ b/Userland/Libraries/LibWeb/CMakeLists.txt @@ -95,7 +95,6 @@ set(SOURCES CSS/StyleValues/GridTemplateAreaStyleValue.cpp CSS/StyleValues/GridTrackPlacementStyleValue.cpp CSS/StyleValues/GridTrackPlacementShorthandStyleValue.cpp - CSS/StyleValues/GridTrackSizeListShorthandStyleValue.cpp CSS/StyleValues/GridTrackSizeListStyleValue.cpp CSS/StyleValues/IdentifierStyleValue.cpp CSS/StyleValues/ImageStyleValue.cpp diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp index 5bddd5fda2..6f6c9f6f59 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp @@ -50,7 +50,6 @@ #include #include #include -#include #include #include #include @@ -5554,7 +5553,7 @@ RefPtr Parser::parse_grid_track_placement_shorthand_value(Vector Parser::parse_grid_track_size_list_shorthand_value(Vector const& component_values) +RefPtr Parser::parse_grid_track_size_list_shorthand_value(PropertyID property_id, Vector const& component_values) { // The grid-template property is a shorthand for setting grid-template-columns, grid-template-rows, // and grid-template-areas in a single declaration. It has several distinct syntax forms: @@ -5593,10 +5592,9 @@ RefPtr Parser::parse_grid_track_size_list_shorthand_value(Vectoras_grid_template_area(), - parsed_template_rows_values.release_nonnull()->as_grid_track_size_list(), - parsed_template_columns_values.release_nonnull()->as_grid_track_size_list()); + return ShorthandStyleValue::create(property_id, + { PropertyID::GridTemplateAreas, PropertyID::GridTemplateRows, PropertyID::GridTemplateColumns }, + { parsed_template_areas_values.release_nonnull(), parsed_template_rows_values.release_nonnull(), parsed_template_columns_values.release_nonnull() }); } RefPtr Parser::parse_grid_area_shorthand_value(Vector const& component_values) @@ -5682,7 +5680,7 @@ RefPtr Parser::parse_grid_shorthand_value(Vector con // <'grid-template'> | // FIXME: <'grid-template-rows'> / [ auto-flow && dense? ] <'grid-auto-columns'>? | // FIXME: [ auto-flow && dense? ] <'grid-auto-rows'>? / <'grid-template-columns'> - return parse_grid_track_size_list_shorthand_value(component_value); + return parse_grid_track_size_list_shorthand_value(PropertyID::Grid, component_value); } RefPtr Parser::parse_grid_template_areas_value(Vector const& component_values) @@ -5899,7 +5897,7 @@ Parser::ParseErrorOr> Parser::parse_css_value(Property return parsed_value.release_nonnull(); return ParseError::SyntaxError; case PropertyID::GridTemplate: - if (auto parsed_value = parse_grid_track_size_list_shorthand_value(component_values)) + if (auto parsed_value = parse_grid_track_size_list_shorthand_value(property_id, component_values)) return parsed_value.release_nonnull(); return ParseError::SyntaxError; case PropertyID::GridTemplateColumns: diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.h b/Userland/Libraries/LibWeb/CSS/Parser/Parser.h index 7771abf279..3a52b02efb 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.h +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.h @@ -258,7 +258,7 @@ private: RefPtr parse_grid_track_size_list(Vector const&, bool allow_separate_line_name_blocks = false); RefPtr parse_grid_auto_track_sizes(Vector const&); [[nodiscard]] RefPtr parse_grid_auto_flow_value(Vector const&); - RefPtr parse_grid_track_size_list_shorthand_value(Vector const&); + RefPtr parse_grid_track_size_list_shorthand_value(PropertyID, Vector const&); RefPtr parse_grid_track_placement(Vector const&); RefPtr parse_grid_track_placement_shorthand_value(Vector const&); RefPtr parse_grid_template_areas_value(Vector const&); diff --git a/Userland/Libraries/LibWeb/CSS/ResolvedCSSStyleDeclaration.cpp b/Userland/Libraries/LibWeb/CSS/ResolvedCSSStyleDeclaration.cpp index da806e9aa3..3bd222882b 100644 --- a/Userland/Libraries/LibWeb/CSS/ResolvedCSSStyleDeclaration.cpp +++ b/Userland/Libraries/LibWeb/CSS/ResolvedCSSStyleDeclaration.cpp @@ -20,7 +20,6 @@ #include #include #include -#include #include #include #include @@ -349,21 +348,23 @@ RefPtr ResolvedCSSStyleDeclaration::style_value_for_property(L auto maybe_grid_template_areas = property(PropertyID::GridTemplateAreas); auto maybe_grid_template_rows = property(PropertyID::GridTemplateRows); auto maybe_grid_template_columns = property(PropertyID::GridTemplateColumns); - RefPtr grid_template_areas; - RefPtr grid_template_rows, grid_template_columns; + RefPtr grid_template_areas; + RefPtr grid_template_rows, grid_template_columns; if (maybe_grid_template_areas.has_value()) { VERIFY(maybe_grid_template_areas.value().value->is_grid_template_area()); - grid_template_areas = maybe_grid_template_areas.value().value->as_grid_template_area(); + grid_template_areas = maybe_grid_template_areas.value().value; } if (maybe_grid_template_rows.has_value()) { VERIFY(maybe_grid_template_rows.value().value->is_grid_track_size_list()); - grid_template_rows = maybe_grid_template_rows.value().value->as_grid_track_size_list(); + grid_template_rows = maybe_grid_template_rows.value().value; } if (maybe_grid_template_columns.has_value()) { VERIFY(maybe_grid_template_columns.value().value->is_grid_track_size_list()); - grid_template_columns = maybe_grid_template_columns.value().value->as_grid_track_size_list(); + grid_template_columns = maybe_grid_template_columns.value().value; } - return GridTrackSizeListShorthandStyleValue::create(grid_template_areas.release_nonnull(), grid_template_rows.release_nonnull(), grid_template_columns.release_nonnull()); + return ShorthandStyleValue::create(property_id, + { PropertyID::GridTemplateAreas, PropertyID::GridTemplateRows, PropertyID::GridTemplateColumns }, + { grid_template_areas.release_nonnull(), grid_template_rows.release_nonnull(), grid_template_columns.release_nonnull() }); } case PropertyID::Height: return style_value_for_size(layout_node.computed_values().height()); diff --git a/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp b/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp index ee6e89b8ea..2aa5952bdf 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp +++ b/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp @@ -38,7 +38,6 @@ #include #include #include -#include #include #include #include @@ -779,13 +778,6 @@ static void set_property_expanding_shorthands(StyleProperties& style, CSS::Prope } if (property_id == CSS::PropertyID::GridTemplate || property_id == CSS::PropertyID::Grid) { - if (value.is_grid_track_size_list_shorthand()) { - auto const& shorthand = value.as_grid_track_size_list_shorthand(); - set_longhand_property(CSS::PropertyID::GridTemplateAreas, shorthand.areas()); - set_longhand_property(CSS::PropertyID::GridTemplateRows, shorthand.rows()); - set_longhand_property(CSS::PropertyID::GridTemplateColumns, shorthand.columns()); - return; - } set_longhand_property(CSS::PropertyID::GridTemplateAreas, value); set_longhand_property(CSS::PropertyID::GridTemplateRows, value); set_longhand_property(CSS::PropertyID::GridTemplateColumns, value); diff --git a/Userland/Libraries/LibWeb/CSS/StyleValue.cpp b/Userland/Libraries/LibWeb/CSS/StyleValue.cpp index c727ab7100..f7ac708b92 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleValue.cpp +++ b/Userland/Libraries/LibWeb/CSS/StyleValue.cpp @@ -29,7 +29,6 @@ #include #include #include -#include #include #include #include diff --git a/Userland/Libraries/LibWeb/CSS/StyleValue.h b/Userland/Libraries/LibWeb/CSS/StyleValue.h index 06014c053e..2759f98ad1 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleValue.h +++ b/Userland/Libraries/LibWeb/CSS/StyleValue.h @@ -102,7 +102,6 @@ using StyleValueVector = Vector>; __ENUMERATE_STYLE_VALUE_TYPE(GridTrackPlacement, grid_track_placement) \ __ENUMERATE_STYLE_VALUE_TYPE(GridTrackPlacementShorthand, grid_track_placement_shorthand) \ __ENUMERATE_STYLE_VALUE_TYPE(GridTrackSizeList, grid_track_size_list) \ - __ENUMERATE_STYLE_VALUE_TYPE(GridTrackSizeListShorthand, grid_track_size_list_shorthand) \ __ENUMERATE_STYLE_VALUE_TYPE(Identifier, identifier) \ __ENUMERATE_STYLE_VALUE_TYPE(Image, image) \ __ENUMERATE_STYLE_VALUE_TYPE(Inherit, inherit) \ diff --git a/Userland/Libraries/LibWeb/CSS/StyleValues/GridTrackSizeListShorthandStyleValue.cpp b/Userland/Libraries/LibWeb/CSS/StyleValues/GridTrackSizeListShorthandStyleValue.cpp deleted file mode 100644 index ac9a655f0c..0000000000 --- a/Userland/Libraries/LibWeb/CSS/StyleValues/GridTrackSizeListShorthandStyleValue.cpp +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2023, Martin Falisse - * - * SPDX-License-Identifier: BSD-2-Clause - */ - -#include "GridTrackSizeListShorthandStyleValue.h" -#include - -namespace Web::CSS { - -ValueComparingNonnullRefPtr GridTrackSizeListShorthandStyleValue::create( - ValueComparingNonnullRefPtr areas, - ValueComparingNonnullRefPtr rows, - ValueComparingNonnullRefPtr columns) -{ - return adopt_ref(*new (nothrow) GridTrackSizeListShorthandStyleValue(move(areas), move(rows), move(columns))); -} - -String GridTrackSizeListShorthandStyleValue::to_string() const -{ - auto construct_rows_string = [&]() { - StringBuilder builder; - size_t idx = 0; - for (auto const& row : m_properties.rows->grid_track_size_list().track_list()) { - if (m_properties.areas->grid_template_area().size() > idx) { - builder.append("\""sv); - for (size_t y = 0; y < m_properties.areas->grid_template_area()[idx].size(); ++y) { - builder.append(m_properties.areas->grid_template_area()[idx][y]); - if (y != m_properties.areas->grid_template_area()[idx].size() - 1) - builder.append(" "sv); - } - builder.append("\" "sv); - } - builder.append(row.to_string()); - if (idx < m_properties.rows->grid_track_size_list().track_list().size() - 1) - builder.append(' '); - idx++; - } - return MUST(builder.to_string()); - }; - - if (m_properties.columns->grid_track_size_list().track_list().size() == 0) - return MUST(String::formatted("{}", construct_rows_string())); - return MUST(String::formatted("{} / {}", construct_rows_string(), m_properties.columns->grid_track_size_list().to_string())); -} - -} diff --git a/Userland/Libraries/LibWeb/CSS/StyleValues/GridTrackSizeListShorthandStyleValue.h b/Userland/Libraries/LibWeb/CSS/StyleValues/GridTrackSizeListShorthandStyleValue.h deleted file mode 100644 index 0bce10cf74..0000000000 --- a/Userland/Libraries/LibWeb/CSS/StyleValues/GridTrackSizeListShorthandStyleValue.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2023, Martin Falisse - * - * SPDX-License-Identifier: BSD-2-Clause - */ - -#pragma once - -#include -#include - -namespace Web::CSS { - -class GridTrackSizeListShorthandStyleValue final : public StyleValueWithDefaultOperators { -public: - static ValueComparingNonnullRefPtr create( - ValueComparingNonnullRefPtr areas, - ValueComparingNonnullRefPtr rows, - ValueComparingNonnullRefPtr columns); - virtual ~GridTrackSizeListShorthandStyleValue() override = default; - - auto rows() const { return m_properties.rows; } - auto columns() const { return m_properties.columns; } - auto areas() const { return m_properties.areas; } - - virtual String to_string() const override; - - bool properties_equal(GridTrackSizeListShorthandStyleValue const& other) const { return m_properties == other.m_properties; } - -private: - GridTrackSizeListShorthandStyleValue( - ValueComparingNonnullRefPtr areas, - ValueComparingNonnullRefPtr rows, - ValueComparingNonnullRefPtr columns) - : StyleValueWithDefaultOperators(Type::GridTrackSizeListShorthand) - , m_properties { .areas = move(areas), .rows = move(rows), .columns = move(columns) } - { - } - - struct Properties { - ValueComparingNonnullRefPtr areas; - ValueComparingNonnullRefPtr rows; - ValueComparingNonnullRefPtr columns; - bool operator==(Properties const&) const = default; - } m_properties; -}; - -} diff --git a/Userland/Libraries/LibWeb/CSS/StyleValues/ShorthandStyleValue.cpp b/Userland/Libraries/LibWeb/CSS/StyleValues/ShorthandStyleValue.cpp index 8e7010e336..dafe585064 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleValues/ShorthandStyleValue.cpp +++ b/Userland/Libraries/LibWeb/CSS/StyleValues/ShorthandStyleValue.cpp @@ -8,7 +8,9 @@ #include "ShorthandStyleValue.h" #include #include +#include #include +#include #include namespace Web::CSS { @@ -110,6 +112,38 @@ String ShorthandStyleValue::to_string() const if (!column_end.grid_track_placement().is_auto()) builder.appendff(" / {}", column_end.grid_track_placement().to_string()); return MUST(builder.to_string()); + } + // FIXME: Serialize Grid differently once we support it better! + case PropertyID::Grid: + case PropertyID::GridTemplate: { + auto& areas = longhand(PropertyID::GridTemplateAreas)->as_grid_template_area(); + auto& rows = longhand(PropertyID::GridTemplateRows)->as_grid_track_size_list(); + auto& columns = longhand(PropertyID::GridTemplateColumns)->as_grid_track_size_list(); + + auto construct_rows_string = [&]() { + StringBuilder builder; + size_t idx = 0; + for (auto const& row : rows.grid_track_size_list().track_list()) { + if (areas.grid_template_area().size() > idx) { + builder.append("\""sv); + for (size_t y = 0; y < areas.grid_template_area()[idx].size(); ++y) { + builder.append(areas.grid_template_area()[idx][y]); + if (y != areas.grid_template_area()[idx].size() - 1) + builder.append(" "sv); + } + builder.append("\" "sv); + } + builder.append(row.to_string()); + if (idx < rows.grid_track_size_list().track_list().size() - 1) + builder.append(' '); + idx++; + } + return MUST(builder.to_string()); + }; + + if (columns.grid_track_size_list().track_list().size() == 0) + return MUST(String::formatted("{}", construct_rows_string())); + return MUST(String::formatted("{} / {}", construct_rows_string(), columns.grid_track_size_list().to_string())); } default: StringBuilder builder; diff --git a/Userland/Libraries/LibWeb/Forward.h b/Userland/Libraries/LibWeb/Forward.h index 11ec88ad74..e3ee01eb50 100644 --- a/Userland/Libraries/LibWeb/Forward.h +++ b/Userland/Libraries/LibWeb/Forward.h @@ -115,7 +115,6 @@ class GridTrackPlacement; class GridTrackPlacementShorthandStyleValue; class GridTrackPlacementStyleValue; class GridTrackSizeList; -class GridTrackSizeListShorthandStyleValue; class GridTrackSizeListStyleValue; class IdentifierStyleValue; class ImageStyleValue;