diff --git a/Userland/Libraries/LibWeb/CMakeLists.txt b/Userland/Libraries/LibWeb/CMakeLists.txt index f18e44d03f1..be1f08f0966 100644 --- a/Userland/Libraries/LibWeb/CMakeLists.txt +++ b/Userland/Libraries/LibWeb/CMakeLists.txt @@ -94,6 +94,7 @@ set(SOURCES CSS/StyleValues/RadialGradientStyleValue.cpp CSS/StyleValues/RectStyleValue.cpp CSS/StyleValues/ShadowStyleValue.cpp + CSS/StyleValues/StyleValueList.cpp CSS/StyleValues/TextDecorationStyleValue.cpp CSS/StyleValues/TransformationStyleValue.cpp CSS/StyleValues/UnresolvedStyleValue.cpp diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp index a25f381029d..26519083898 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp @@ -65,6 +65,7 @@ #include #include #include +#include #include #include #include diff --git a/Userland/Libraries/LibWeb/CSS/ResolvedCSSStyleDeclaration.cpp b/Userland/Libraries/LibWeb/CSS/ResolvedCSSStyleDeclaration.cpp index e55e139ae8e..b484fd1a697 100644 --- a/Userland/Libraries/LibWeb/CSS/ResolvedCSSStyleDeclaration.cpp +++ b/Userland/Libraries/LibWeb/CSS/ResolvedCSSStyleDeclaration.cpp @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include diff --git a/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp b/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp index 6288d9bf433..dcc9cabff33 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp +++ b/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp @@ -43,6 +43,7 @@ #include #include #include +#include #include #include #include diff --git a/Userland/Libraries/LibWeb/CSS/StyleProperties.cpp b/Userland/Libraries/LibWeb/CSS/StyleProperties.cpp index 33b16a9b3e0..ded4425ebb1 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleProperties.cpp +++ b/Userland/Libraries/LibWeb/CSS/StyleProperties.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include diff --git a/Userland/Libraries/LibWeb/CSS/StyleValue.cpp b/Userland/Libraries/LibWeb/CSS/StyleValue.cpp index eeda36a8bf5..37957c93ac8 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleValue.cpp +++ b/Userland/Libraries/LibWeb/CSS/StyleValue.cpp @@ -48,6 +48,7 @@ #include #include #include +#include #include #include #include @@ -1149,34 +1150,6 @@ ErrorOr PositionValue::serialize(StringBuilder& builder) const return {}; } -bool StyleValueList::Properties::operator==(Properties const& other) const -{ - return separator == other.separator && values.span() == other.values.span(); -} - -ErrorOr StyleValueList::to_string() const -{ - auto separator = ""sv; - switch (m_properties.separator) { - case Separator::Space: - separator = " "sv; - break; - case Separator::Comma: - separator = ", "sv; - break; - default: - VERIFY_NOT_REACHED(); - } - - StringBuilder builder; - for (size_t i = 0; i < m_properties.values.size(); ++i) { - TRY(builder.try_append(TRY(m_properties.values[i]->to_string()))); - if (i != m_properties.values.size() - 1) - TRY(builder.try_append(separator)); - } - return builder.to_string(); -} - Optional absolutized_length(CSS::Length const& length, CSSPixelRect const& viewport_rect, Gfx::FontPixelMetrics const& font_metrics, CSSPixels font_size, CSSPixels root_font_size, CSSPixels line_height, CSSPixels root_line_height) { if (length.is_px()) diff --git a/Userland/Libraries/LibWeb/CSS/StyleValue.h b/Userland/Libraries/LibWeb/CSS/StyleValue.h index 41f181a56d4..c04fcb9a666 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleValue.h +++ b/Userland/Libraries/LibWeb/CSS/StyleValue.h @@ -622,41 +622,6 @@ private: NonnullOwnPtr m_expression; }; -class StyleValueList final : public StyleValueWithDefaultOperators { -public: - enum class Separator { - Space, - Comma, - }; - static ValueComparingNonnullRefPtr create(StyleValueVector&& values, Separator separator) { return adopt_ref(*new StyleValueList(move(values), separator)); } - - size_t size() const { return m_properties.values.size(); } - StyleValueVector const& values() const { return m_properties.values; } - ValueComparingNonnullRefPtr value_at(size_t i, bool allow_loop) const - { - if (allow_loop) - return m_properties.values[i % size()]; - return m_properties.values[i]; - } - - virtual ErrorOr to_string() const override; - - bool properties_equal(StyleValueList const& other) const { return m_properties == other.m_properties; } - -private: - StyleValueList(StyleValueVector&& values, Separator separator) - : StyleValueWithDefaultOperators(Type::ValueList) - , m_properties { .separator = separator, .values = move(values) } - { - } - - struct Properties { - Separator separator; - StyleValueVector values; - bool operator==(Properties const&) const; - } m_properties; -}; - } template<> diff --git a/Userland/Libraries/LibWeb/CSS/StyleValues/BackgroundStyleValue.cpp b/Userland/Libraries/LibWeb/CSS/StyleValues/BackgroundStyleValue.cpp index aa3a29fb3d4..8148bb52122 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleValues/BackgroundStyleValue.cpp +++ b/Userland/Libraries/LibWeb/CSS/StyleValues/BackgroundStyleValue.cpp @@ -8,6 +8,7 @@ */ #include "BackgroundStyleValue.h" +#include namespace Web::CSS { diff --git a/Userland/Libraries/LibWeb/CSS/StyleValues/ContentStyleValue.cpp b/Userland/Libraries/LibWeb/CSS/StyleValues/ContentStyleValue.cpp index e3513fab716..17d6be591a6 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleValues/ContentStyleValue.cpp +++ b/Userland/Libraries/LibWeb/CSS/StyleValues/ContentStyleValue.cpp @@ -8,6 +8,7 @@ */ #include "ContentStyleValue.h" +#include namespace Web::CSS { diff --git a/Userland/Libraries/LibWeb/CSS/StyleValues/StyleValueList.cpp b/Userland/Libraries/LibWeb/CSS/StyleValues/StyleValueList.cpp new file mode 100644 index 00000000000..af03150b6df --- /dev/null +++ b/Userland/Libraries/LibWeb/CSS/StyleValues/StyleValueList.cpp @@ -0,0 +1,42 @@ +/* + * 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 "StyleValueList.h" + +namespace Web::CSS { + +bool StyleValueList::Properties::operator==(Properties const& other) const +{ + return separator == other.separator && values.span() == other.values.span(); +} + +ErrorOr StyleValueList::to_string() const +{ + auto separator = ""sv; + switch (m_properties.separator) { + case Separator::Space: + separator = " "sv; + break; + case Separator::Comma: + separator = ", "sv; + break; + default: + VERIFY_NOT_REACHED(); + } + + StringBuilder builder; + for (size_t i = 0; i < m_properties.values.size(); ++i) { + TRY(builder.try_append(TRY(m_properties.values[i]->to_string()))); + if (i != m_properties.values.size() - 1) + TRY(builder.try_append(separator)); + } + return builder.to_string(); +} + +} diff --git a/Userland/Libraries/LibWeb/CSS/StyleValues/StyleValueList.h b/Userland/Libraries/LibWeb/CSS/StyleValues/StyleValueList.h new file mode 100644 index 00000000000..2006ef1820d --- /dev/null +++ b/Userland/Libraries/LibWeb/CSS/StyleValues/StyleValueList.h @@ -0,0 +1,51 @@ +/* + * 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 StyleValueList final : public StyleValueWithDefaultOperators { +public: + enum class Separator { + Space, + Comma, + }; + static ValueComparingNonnullRefPtr create(StyleValueVector&& values, Separator separator) { return adopt_ref(*new StyleValueList(move(values), separator)); } + + size_t size() const { return m_properties.values.size(); } + StyleValueVector const& values() const { return m_properties.values; } + ValueComparingNonnullRefPtr value_at(size_t i, bool allow_loop) const + { + if (allow_loop) + return m_properties.values[i % size()]; + return m_properties.values[i]; + } + + virtual ErrorOr to_string() const override; + + bool properties_equal(StyleValueList const& other) const { return m_properties == other.m_properties; } + +private: + StyleValueList(StyleValueVector&& values, Separator separator) + : StyleValueWithDefaultOperators(Type::ValueList) + , m_properties { .separator = separator, .values = move(values) } + { + } + + struct Properties { + Separator separator; + StyleValueVector values; + bool operator==(Properties const&) const; + } m_properties; +}; + +} diff --git a/Userland/Libraries/LibWeb/Layout/Node.cpp b/Userland/Libraries/LibWeb/Layout/Node.cpp index f0634c8d4a8..a9cc87abdec 100644 --- a/Userland/Libraries/LibWeb/Layout/Node.cpp +++ b/Userland/Libraries/LibWeb/Layout/Node.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include