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 c5d1f4f647..769ab719eb 100644 --- a/Meta/gn/secondary/Userland/Libraries/LibWeb/CSS/StyleValues/BUILD.gn +++ b/Meta/gn/secondary/Userland/Libraries/LibWeb/CSS/StyleValues/BUILD.gn @@ -16,7 +16,6 @@ source_set("StyleValues") { "FilterValueListStyleValue.cpp", "GridAutoFlowStyleValue.cpp", "GridTemplateAreaStyleValue.cpp", - "GridTrackPlacementShorthandStyleValue.cpp", "GridTrackPlacementStyleValue.cpp", "GridTrackSizeListStyleValue.cpp", "IdentifierStyleValue.cpp", diff --git a/Userland/Libraries/LibWeb/CMakeLists.txt b/Userland/Libraries/LibWeb/CMakeLists.txt index a2d37589fa..2d56fffcd2 100644 --- a/Userland/Libraries/LibWeb/CMakeLists.txt +++ b/Userland/Libraries/LibWeb/CMakeLists.txt @@ -94,7 +94,6 @@ set(SOURCES CSS/StyleValues/GridAutoFlowStyleValue.cpp CSS/StyleValues/GridTemplateAreaStyleValue.cpp CSS/StyleValues/GridTrackPlacementStyleValue.cpp - CSS/StyleValues/GridTrackPlacementShorthandStyleValue.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 622b9bd801..6044e4d441 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp @@ -48,7 +48,6 @@ #include #include #include -#include #include #include #include @@ -5525,8 +5524,11 @@ RefPtr Parser::parse_grid_track_placement(Vector con return GridTrackPlacementStyleValue::create(GridTrackPlacement::make_span(span_or_position_value)); } -RefPtr Parser::parse_grid_track_placement_shorthand_value(Vector const& component_values) +RefPtr Parser::parse_grid_track_placement_shorthand_value(PropertyID property_id, Vector const& component_values) { + auto start_property = (property_id == PropertyID::GridColumn) ? PropertyID::GridColumnStart : PropertyID::GridRowStart; + auto end_property = (property_id == PropertyID::GridColumn) ? PropertyID::GridColumnEnd : PropertyID::GridRowEnd; + auto tokens = TokenStream { component_values }; auto current_token = tokens.next_token().token(); @@ -5552,12 +5554,18 @@ RefPtr Parser::parse_grid_track_placement_shorthand_value(Vectoras_grid_track_placement().grid_track_placement()); + if (parsed_start_value && track_end_placement_tokens.is_empty()) { + return ShorthandStyleValue::create(property_id, + { start_property, end_property }, + { parsed_start_value.release_nonnull(), GridTrackPlacementStyleValue::create(GridTrackPlacement::make_auto()) }); + } auto parsed_end_value = parse_grid_track_placement(track_end_placement_tokens); - if (parsed_start_value && parsed_end_value) - return GridTrackPlacementShorthandStyleValue::create(parsed_start_value.release_nonnull()->as_grid_track_placement(), parsed_end_value.release_nonnull()->as_grid_track_placement()); + if (parsed_start_value && parsed_end_value) { + return ShorthandStyleValue::create(property_id, + { start_property, end_property }, + { parsed_start_value.release_nonnull(), parsed_end_value.release_nonnull() }); + } return nullptr; } @@ -5868,7 +5876,7 @@ Parser::ParseErrorOr> Parser::parse_css_value(Property return ParseError::SyntaxError; } case PropertyID::GridColumn: - if (auto parsed_value = parse_grid_track_placement_shorthand_value(component_values)) + if (auto parsed_value = parse_grid_track_placement_shorthand_value(property_id, component_values)) return parsed_value.release_nonnull(); return ParseError::SyntaxError; case PropertyID::GridArea: @@ -5892,7 +5900,7 @@ Parser::ParseErrorOr> Parser::parse_css_value(Property return parsed_value.release_nonnull(); return ParseError::SyntaxError; case PropertyID::GridRow: - if (auto parsed_value = parse_grid_track_placement_shorthand_value(component_values)) + if (auto parsed_value = parse_grid_track_placement_shorthand_value(property_id, component_values)) return parsed_value.release_nonnull(); return ParseError::SyntaxError; case PropertyID::GridRowEnd: diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.h b/Userland/Libraries/LibWeb/CSS/Parser/Parser.h index 3a52b02efb..5886ad8cd4 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.h +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.h @@ -260,7 +260,7 @@ private: [[nodiscard]] RefPtr parse_grid_auto_flow_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_track_placement_shorthand_value(PropertyID, Vector const&); RefPtr parse_grid_template_areas_value(Vector const&); RefPtr parse_grid_area_shorthand_value(Vector const&); RefPtr parse_grid_shorthand_value(Vector const&); diff --git a/Userland/Libraries/LibWeb/CSS/ResolvedCSSStyleDeclaration.cpp b/Userland/Libraries/LibWeb/CSS/ResolvedCSSStyleDeclaration.cpp index 79c01d7250..9a1f6a30b4 100644 --- a/Userland/Libraries/LibWeb/CSS/ResolvedCSSStyleDeclaration.cpp +++ b/Userland/Libraries/LibWeb/CSS/ResolvedCSSStyleDeclaration.cpp @@ -18,7 +18,6 @@ #include #include #include -#include #include #include #include @@ -327,7 +326,9 @@ RefPtr ResolvedCSSStyleDeclaration::style_value_for_property(L VERIFY(maybe_grid_column_start.value().value->is_grid_track_placement()); grid_column_start = maybe_grid_column_start.value().value->as_grid_track_placement(); } - return GridTrackPlacementShorthandStyleValue::create(grid_column_end.release_nonnull(), grid_column_start.release_nonnull()); + return ShorthandStyleValue::create(property_id, + { PropertyID::GridColumnStart, PropertyID::GridColumnEnd }, + { grid_column_end.release_nonnull(), grid_column_start.release_nonnull() }); } case PropertyID::GridRow: { auto maybe_grid_row_end = property(PropertyID::GridRowEnd); @@ -341,7 +342,9 @@ RefPtr ResolvedCSSStyleDeclaration::style_value_for_property(L VERIFY(maybe_grid_row_start.value().value->is_grid_track_placement()); grid_row_start = maybe_grid_row_start.value().value->as_grid_track_placement(); } - return GridTrackPlacementShorthandStyleValue::create(grid_row_end.release_nonnull(), grid_row_start.release_nonnull()); + return ShorthandStyleValue::create(property_id, + { PropertyID::GridRowStart, PropertyID::GridRowEnd }, + { grid_row_end.release_nonnull(), grid_row_start.release_nonnull() }); } case PropertyID::GridTemplate: { auto maybe_grid_template_areas = property(PropertyID::GridTemplateAreas); diff --git a/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp b/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp index 2abda1ca03..4bb630d1fa 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp +++ b/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp @@ -36,7 +36,6 @@ #include #include #include -#include #include #include #include @@ -709,26 +708,12 @@ static void set_property_expanding_shorthands(StyleProperties& style, CSS::Prope } if (property_id == CSS::PropertyID::GridColumn) { - if (value.is_grid_track_placement_shorthand()) { - auto const& shorthand = value.as_grid_track_placement_shorthand(); - set_longhand_property(CSS::PropertyID::GridColumnStart, shorthand.start()); - set_longhand_property(CSS::PropertyID::GridColumnEnd, shorthand.end()); - return; - } - set_longhand_property(CSS::PropertyID::GridColumnStart, value); set_longhand_property(CSS::PropertyID::GridColumnEnd, value); return; } if (property_id == CSS::PropertyID::GridRow) { - if (value.is_grid_track_placement_shorthand()) { - auto const& shorthand = value.as_grid_track_placement_shorthand(); - set_longhand_property(CSS::PropertyID::GridRowStart, shorthand.start()); - set_longhand_property(CSS::PropertyID::GridRowEnd, shorthand.end()); - return; - } - set_longhand_property(CSS::PropertyID::GridRowStart, value); set_longhand_property(CSS::PropertyID::GridRowEnd, value); return; diff --git a/Userland/Libraries/LibWeb/CSS/StyleValue.cpp b/Userland/Libraries/LibWeb/CSS/StyleValue.cpp index 18e8461f97..e0d863a5ab 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleValue.cpp +++ b/Userland/Libraries/LibWeb/CSS/StyleValue.cpp @@ -27,7 +27,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 886c9c1335..8b4e2d2880 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleValue.h +++ b/Userland/Libraries/LibWeb/CSS/StyleValue.h @@ -82,51 +82,50 @@ private: using StyleValueVector = Vector>; -#define ENUMERATE_STYLE_VALUE_TYPES \ - __ENUMERATE_STYLE_VALUE_TYPE(Angle, angle) \ - __ENUMERATE_STYLE_VALUE_TYPE(BackgroundRepeat, background_repeat) \ - __ENUMERATE_STYLE_VALUE_TYPE(BackgroundSize, background_size) \ - __ENUMERATE_STYLE_VALUE_TYPE(BorderRadius, border_radius) \ - __ENUMERATE_STYLE_VALUE_TYPE(Calculated, calculated) \ - __ENUMERATE_STYLE_VALUE_TYPE(Color, color) \ - __ENUMERATE_STYLE_VALUE_TYPE(ConicGradient, conic_gradient) \ - __ENUMERATE_STYLE_VALUE_TYPE(Content, content) \ - __ENUMERATE_STYLE_VALUE_TYPE(CustomIdent, custom_ident) \ - __ENUMERATE_STYLE_VALUE_TYPE(Display, display) \ - __ENUMERATE_STYLE_VALUE_TYPE(Easing, easing) \ - __ENUMERATE_STYLE_VALUE_TYPE(Edge, edge) \ - __ENUMERATE_STYLE_VALUE_TYPE(FilterValueList, filter_value_list) \ - __ENUMERATE_STYLE_VALUE_TYPE(Frequency, frequency) \ - __ENUMERATE_STYLE_VALUE_TYPE(GridAutoFlow, grid_auto_flow) \ - __ENUMERATE_STYLE_VALUE_TYPE(GridTemplateArea, grid_template_area) \ - __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(Identifier, identifier) \ - __ENUMERATE_STYLE_VALUE_TYPE(Image, image) \ - __ENUMERATE_STYLE_VALUE_TYPE(Inherit, inherit) \ - __ENUMERATE_STYLE_VALUE_TYPE(Initial, initial) \ - __ENUMERATE_STYLE_VALUE_TYPE(Integer, integer) \ - __ENUMERATE_STYLE_VALUE_TYPE(Length, length) \ - __ENUMERATE_STYLE_VALUE_TYPE(LinearGradient, linear_gradient) \ - __ENUMERATE_STYLE_VALUE_TYPE(MathDepth, math_depth) \ - __ENUMERATE_STYLE_VALUE_TYPE(Number, number) \ - __ENUMERATE_STYLE_VALUE_TYPE(Overflow, overflow) \ - __ENUMERATE_STYLE_VALUE_TYPE(Percentage, percentage) \ - __ENUMERATE_STYLE_VALUE_TYPE(Position, position) \ - __ENUMERATE_STYLE_VALUE_TYPE(RadialGradient, radial_gradient) \ - __ENUMERATE_STYLE_VALUE_TYPE(Ratio, ratio) \ - __ENUMERATE_STYLE_VALUE_TYPE(Rect, rect) \ - __ENUMERATE_STYLE_VALUE_TYPE(Resolution, resolution) \ - __ENUMERATE_STYLE_VALUE_TYPE(Revert, revert) \ - __ENUMERATE_STYLE_VALUE_TYPE(Shadow, shadow) \ - __ENUMERATE_STYLE_VALUE_TYPE(Shorthand, shorthand) \ - __ENUMERATE_STYLE_VALUE_TYPE(String, string) \ - __ENUMERATE_STYLE_VALUE_TYPE(Time, time) \ - __ENUMERATE_STYLE_VALUE_TYPE(Transformation, transformation) \ - __ENUMERATE_STYLE_VALUE_TYPE(Unresolved, unresolved) \ - __ENUMERATE_STYLE_VALUE_TYPE(Unset, unset) \ - __ENUMERATE_STYLE_VALUE_TYPE(URL, url) \ +#define ENUMERATE_STYLE_VALUE_TYPES \ + __ENUMERATE_STYLE_VALUE_TYPE(Angle, angle) \ + __ENUMERATE_STYLE_VALUE_TYPE(BackgroundRepeat, background_repeat) \ + __ENUMERATE_STYLE_VALUE_TYPE(BackgroundSize, background_size) \ + __ENUMERATE_STYLE_VALUE_TYPE(BorderRadius, border_radius) \ + __ENUMERATE_STYLE_VALUE_TYPE(Calculated, calculated) \ + __ENUMERATE_STYLE_VALUE_TYPE(Color, color) \ + __ENUMERATE_STYLE_VALUE_TYPE(ConicGradient, conic_gradient) \ + __ENUMERATE_STYLE_VALUE_TYPE(Content, content) \ + __ENUMERATE_STYLE_VALUE_TYPE(CustomIdent, custom_ident) \ + __ENUMERATE_STYLE_VALUE_TYPE(Display, display) \ + __ENUMERATE_STYLE_VALUE_TYPE(Easing, easing) \ + __ENUMERATE_STYLE_VALUE_TYPE(Edge, edge) \ + __ENUMERATE_STYLE_VALUE_TYPE(FilterValueList, filter_value_list) \ + __ENUMERATE_STYLE_VALUE_TYPE(Frequency, frequency) \ + __ENUMERATE_STYLE_VALUE_TYPE(GridAutoFlow, grid_auto_flow) \ + __ENUMERATE_STYLE_VALUE_TYPE(GridTemplateArea, grid_template_area) \ + __ENUMERATE_STYLE_VALUE_TYPE(GridTrackPlacement, grid_track_placement) \ + __ENUMERATE_STYLE_VALUE_TYPE(GridTrackSizeList, grid_track_size_list) \ + __ENUMERATE_STYLE_VALUE_TYPE(Identifier, identifier) \ + __ENUMERATE_STYLE_VALUE_TYPE(Image, image) \ + __ENUMERATE_STYLE_VALUE_TYPE(Inherit, inherit) \ + __ENUMERATE_STYLE_VALUE_TYPE(Initial, initial) \ + __ENUMERATE_STYLE_VALUE_TYPE(Integer, integer) \ + __ENUMERATE_STYLE_VALUE_TYPE(Length, length) \ + __ENUMERATE_STYLE_VALUE_TYPE(LinearGradient, linear_gradient) \ + __ENUMERATE_STYLE_VALUE_TYPE(MathDepth, math_depth) \ + __ENUMERATE_STYLE_VALUE_TYPE(Number, number) \ + __ENUMERATE_STYLE_VALUE_TYPE(Overflow, overflow) \ + __ENUMERATE_STYLE_VALUE_TYPE(Percentage, percentage) \ + __ENUMERATE_STYLE_VALUE_TYPE(Position, position) \ + __ENUMERATE_STYLE_VALUE_TYPE(RadialGradient, radial_gradient) \ + __ENUMERATE_STYLE_VALUE_TYPE(Ratio, ratio) \ + __ENUMERATE_STYLE_VALUE_TYPE(Rect, rect) \ + __ENUMERATE_STYLE_VALUE_TYPE(Resolution, resolution) \ + __ENUMERATE_STYLE_VALUE_TYPE(Revert, revert) \ + __ENUMERATE_STYLE_VALUE_TYPE(Shadow, shadow) \ + __ENUMERATE_STYLE_VALUE_TYPE(Shorthand, shorthand) \ + __ENUMERATE_STYLE_VALUE_TYPE(String, string) \ + __ENUMERATE_STYLE_VALUE_TYPE(Time, time) \ + __ENUMERATE_STYLE_VALUE_TYPE(Transformation, transformation) \ + __ENUMERATE_STYLE_VALUE_TYPE(Unresolved, unresolved) \ + __ENUMERATE_STYLE_VALUE_TYPE(Unset, unset) \ + __ENUMERATE_STYLE_VALUE_TYPE(URL, url) \ __ENUMERATE_STYLE_VALUE_TYPE(ValueList, value_list) // NOTE: diff --git a/Userland/Libraries/LibWeb/CSS/StyleValues/GridTrackPlacementShorthandStyleValue.cpp b/Userland/Libraries/LibWeb/CSS/StyleValues/GridTrackPlacementShorthandStyleValue.cpp deleted file mode 100644 index b1639a71e5..0000000000 --- a/Userland/Libraries/LibWeb/CSS/StyleValues/GridTrackPlacementShorthandStyleValue.cpp +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2018-2020, Andreas Kling - * Copyright (c) 2021, Tobias Christiansen - * Copyright (c) 2021-2023, Sam Atkins - * Copyright (c) 2022-2023, MacDue - * - * SPDX-License-Identifier: BSD-2-Clause - */ - -#include "GridTrackPlacementShorthandStyleValue.h" -#include - -namespace Web::CSS { - -ValueComparingNonnullRefPtr GridTrackPlacementShorthandStyleValue::create(ValueComparingNonnullRefPtr start, ValueComparingNonnullRefPtr end) -{ - return adopt_ref(*new (nothrow) GridTrackPlacementShorthandStyleValue(move(start), move(end))); -} - -ValueComparingNonnullRefPtr GridTrackPlacementShorthandStyleValue::create(GridTrackPlacement start) -{ - return adopt_ref(*new (nothrow) GridTrackPlacementShorthandStyleValue( - GridTrackPlacementStyleValue::create(start), - GridTrackPlacementStyleValue::create(GridTrackPlacement::make_auto()))); -} - -String GridTrackPlacementShorthandStyleValue::to_string() const -{ - if (m_properties.end->grid_track_placement().is_auto()) - return MUST(String::formatted("{}", m_properties.start->grid_track_placement().to_string())); - return MUST(String::formatted("{} / {}", m_properties.start->grid_track_placement().to_string(), m_properties.end->grid_track_placement().to_string())); -} - -} diff --git a/Userland/Libraries/LibWeb/CSS/StyleValues/GridTrackPlacementShorthandStyleValue.h b/Userland/Libraries/LibWeb/CSS/StyleValues/GridTrackPlacementShorthandStyleValue.h deleted file mode 100644 index 0a744254fc..0000000000 --- a/Userland/Libraries/LibWeb/CSS/StyleValues/GridTrackPlacementShorthandStyleValue.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2018-2020, Andreas Kling - * Copyright (c) 2021, Tobias Christiansen - * Copyright (c) 2021-2023, Sam Atkins - * Copyright (c) 2022-2023, MacDue - * - * SPDX-License-Identifier: BSD-2-Clause - */ - -#pragma once - -#include - -namespace Web::CSS { - -class GridTrackPlacementShorthandStyleValue final : public StyleValueWithDefaultOperators { -public: - static ValueComparingNonnullRefPtr create(ValueComparingNonnullRefPtr start, ValueComparingNonnullRefPtr end); - static ValueComparingNonnullRefPtr create(GridTrackPlacement start); - virtual ~GridTrackPlacementShorthandStyleValue() override = default; - - auto start() const { return m_properties.start; } - auto end() const { return m_properties.end; } - - virtual String to_string() const override; - - bool properties_equal(GridTrackPlacementShorthandStyleValue const& other) const { return m_properties == other.m_properties; } - -private: - GridTrackPlacementShorthandStyleValue(ValueComparingNonnullRefPtr start, ValueComparingNonnullRefPtr end) - : StyleValueWithDefaultOperators(Type::GridTrackPlacementShorthand) - , m_properties { .start = move(start), .end = move(end) } - { - } - - struct Properties { - ValueComparingNonnullRefPtr start; - ValueComparingNonnullRefPtr end; - 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 57d6632770..e8e8b90d0e 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleValues/ShorthandStyleValue.cpp +++ b/Userland/Libraries/LibWeb/CSS/StyleValues/ShorthandStyleValue.cpp @@ -145,6 +145,20 @@ String ShorthandStyleValue::to_string() const return MUST(String::formatted("{}", construct_rows_string())); return MUST(String::formatted("{} / {}", construct_rows_string(), columns.grid_track_size_list().to_string())); } + case PropertyID::GridColumn: { + auto start = longhand(PropertyID::GridColumnStart); + auto end = longhand(PropertyID::GridColumnEnd); + if (end->as_grid_track_placement().grid_track_placement().is_auto()) + return start->to_string(); + return MUST(String::formatted("{} / {}", start->to_string(), end->to_string())); + } + case PropertyID::GridRow: { + auto start = longhand(PropertyID::GridRowStart); + auto end = longhand(PropertyID::GridRowEnd); + if (end->as_grid_track_placement().grid_track_placement().is_auto()) + return start->to_string(); + return MUST(String::formatted("{} / {}", start->to_string(), end->to_string())); + } case PropertyID::ListStyle: return MUST(String::formatted("{} {} {}", longhand(PropertyID::ListStylePosition)->to_string(), longhand(PropertyID::ListStyleImage)->to_string(), longhand(PropertyID::ListStyleType)->to_string())); case PropertyID::PlaceContent: { diff --git a/Userland/Libraries/LibWeb/Forward.h b/Userland/Libraries/LibWeb/Forward.h index b5875c94e7..aa884a564b 100644 --- a/Userland/Libraries/LibWeb/Forward.h +++ b/Userland/Libraries/LibWeb/Forward.h @@ -112,7 +112,6 @@ class GridRepeat; class GridSize; class GridTemplateAreaStyleValue; class GridTrackPlacement; -class GridTrackPlacementShorthandStyleValue; class GridTrackPlacementStyleValue; class GridTrackSizeList; class GridTrackSizeListStyleValue;