diff options
Diffstat (limited to 'Userland')
9 files changed, 87 insertions, 49 deletions
diff --git a/Userland/Libraries/LibWeb/CMakeLists.txt b/Userland/Libraries/LibWeb/CMakeLists.txt index 983a307414..377a8ddbbf 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/ShadowStyleValue.cpp CSS/StyleValues/TextDecorationStyleValue.cpp + CSS/StyleValues/TransformationStyleValue.cpp CSS/Supports.cpp CSS/SyntaxHighlighter/SyntaxHighlighter.cpp CSS/Time.cpp diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp index 466178e169..ffb64202cb 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp @@ -65,6 +65,7 @@ #include <LibWeb/CSS/StyleValues/ShadowStyleValue.h> #include <LibWeb/CSS/StyleValues/StringStyleValue.h> #include <LibWeb/CSS/StyleValues/TextDecorationStyleValue.h> +#include <LibWeb/CSS/StyleValues/TransformationStyleValue.h> #include <LibWeb/DOM/Document.h> #include <LibWeb/Dump.h> #include <LibWeb/Infra/Strings.h> diff --git a/Userland/Libraries/LibWeb/CSS/ResolvedCSSStyleDeclaration.cpp b/Userland/Libraries/LibWeb/CSS/ResolvedCSSStyleDeclaration.cpp index 086cb711b4..d58cd832ce 100644 --- a/Userland/Libraries/LibWeb/CSS/ResolvedCSSStyleDeclaration.cpp +++ b/Userland/Libraries/LibWeb/CSS/ResolvedCSSStyleDeclaration.cpp @@ -29,6 +29,7 @@ #include <LibWeb/CSS/StyleValues/PercentageStyleValue.h> #include <LibWeb/CSS/StyleValues/PositionStyleValue.h> #include <LibWeb/CSS/StyleValues/ShadowStyleValue.h> +#include <LibWeb/CSS/StyleValues/TransformationStyleValue.h> #include <LibWeb/DOM/Document.h> #include <LibWeb/DOM/Element.h> #include <LibWeb/Layout/Viewport.h> diff --git a/Userland/Libraries/LibWeb/CSS/StyleProperties.cpp b/Userland/Libraries/LibWeb/CSS/StyleProperties.cpp index 6245117c8f..6cece5f3f6 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleProperties.cpp +++ b/Userland/Libraries/LibWeb/CSS/StyleProperties.cpp @@ -17,6 +17,7 @@ #include <LibWeb/CSS/StyleValues/PercentageStyleValue.h> #include <LibWeb/CSS/StyleValues/ShadowStyleValue.h> #include <LibWeb/CSS/StyleValues/StringStyleValue.h> +#include <LibWeb/CSS/StyleValues/TransformationStyleValue.h> #include <LibWeb/FontCache.h> #include <LibWeb/Layout/BlockContainer.h> #include <LibWeb/Layout/Node.h> diff --git a/Userland/Libraries/LibWeb/CSS/StyleValue.cpp b/Userland/Libraries/LibWeb/CSS/StyleValue.cpp index 82017b1ce4..bc42278698 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleValue.cpp +++ b/Userland/Libraries/LibWeb/CSS/StyleValue.cpp @@ -48,6 +48,7 @@ #include <LibWeb/CSS/StyleValues/ShadowStyleValue.h> #include <LibWeb/CSS/StyleValues/StringStyleValue.h> #include <LibWeb/CSS/StyleValues/TextDecorationStyleValue.h> +#include <LibWeb/CSS/StyleValues/TransformationStyleValue.h> #include <LibWeb/DOM/Document.h> #include <LibWeb/HTML/BrowsingContext.h> #include <LibWeb/Loader/LoadRequest.h> @@ -1149,26 +1150,6 @@ ErrorOr<String> RectStyleValue::to_string() const return String::formatted("rect({} {} {} {})", m_rect.top_edge, m_rect.right_edge, m_rect.bottom_edge, m_rect.left_edge); } -ErrorOr<String> TransformationStyleValue::to_string() const -{ - StringBuilder builder; - TRY(builder.try_append(CSS::to_string(m_properties.transform_function))); - TRY(builder.try_append('(')); - 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(", "sv)); - } - TRY(builder.try_append(')')); - - return builder.to_string(); -} - -bool TransformationStyleValue::Properties::operator==(Properties const& other) const -{ - return transform_function == other.transform_function && values.span() == other.values.span(); -} - ErrorOr<String> UnresolvedStyleValue::to_string() const { StringBuilder builder; diff --git a/Userland/Libraries/LibWeb/CSS/StyleValue.h b/Userland/Libraries/LibWeb/CSS/StyleValue.h index eab2ce6fe0..14221a67b0 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleValue.h +++ b/Userland/Libraries/LibWeb/CSS/StyleValue.h @@ -646,35 +646,6 @@ private: Time m_time; }; -class TransformationStyleValue final : public StyleValueWithDefaultOperators<TransformationStyleValue> { -public: - static ValueComparingNonnullRefPtr<TransformationStyleValue> create(CSS::TransformFunction transform_function, StyleValueVector&& values) - { - return adopt_ref(*new TransformationStyleValue(transform_function, move(values))); - } - virtual ~TransformationStyleValue() override = default; - - CSS::TransformFunction transform_function() const { return m_properties.transform_function; } - StyleValueVector values() const { return m_properties.values; } - - virtual ErrorOr<String> to_string() const override; - - bool properties_equal(TransformationStyleValue const& other) const { return m_properties == other.m_properties; } - -private: - TransformationStyleValue(CSS::TransformFunction transform_function, StyleValueVector&& values) - : StyleValueWithDefaultOperators(Type::Transformation) - , m_properties { .transform_function = transform_function, .values = move(values) } - { - } - - struct Properties { - CSS::TransformFunction transform_function; - StyleValueVector values; - bool operator==(Properties const& other) const; - } m_properties; -}; - class UnresolvedStyleValue final : public StyleValue { public: static ValueComparingNonnullRefPtr<UnresolvedStyleValue> create(Vector<Parser::ComponentValue>&& values, bool contains_var_or_attr) diff --git a/Userland/Libraries/LibWeb/CSS/StyleValues/TransformationStyleValue.cpp b/Userland/Libraries/LibWeb/CSS/StyleValues/TransformationStyleValue.cpp new file mode 100644 index 0000000000..dfa33429bb --- /dev/null +++ b/Userland/Libraries/LibWeb/CSS/StyleValues/TransformationStyleValue.cpp @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org> + * Copyright (c) 2021, Tobias Christiansen <tobyase@serenityos.org> + * Copyright (c) 2021-2023, Sam Atkins <atkinssj@serenityos.org> + * Copyright (c) 2022-2023, MacDue <macdue@dueutil.tech> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include "TransformationStyleValue.h" +#include <AK/StringBuilder.h> + +namespace Web::CSS { + +ErrorOr<String> TransformationStyleValue::to_string() const +{ + StringBuilder builder; + TRY(builder.try_append(CSS::to_string(m_properties.transform_function))); + TRY(builder.try_append('(')); + 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(", "sv)); + } + TRY(builder.try_append(')')); + + return builder.to_string(); +} + +bool TransformationStyleValue::Properties::operator==(Properties const& other) const +{ + return transform_function == other.transform_function && values.span() == other.values.span(); +} + +} diff --git a/Userland/Libraries/LibWeb/CSS/StyleValues/TransformationStyleValue.h b/Userland/Libraries/LibWeb/CSS/StyleValues/TransformationStyleValue.h new file mode 100644 index 0000000000..c7986a7df9 --- /dev/null +++ b/Userland/Libraries/LibWeb/CSS/StyleValues/TransformationStyleValue.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org> + * Copyright (c) 2021, Tobias Christiansen <tobyase@serenityos.org> + * Copyright (c) 2021-2023, Sam Atkins <atkinssj@serenityos.org> + * Copyright (c) 2022-2023, MacDue <macdue@dueutil.tech> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include <LibWeb/CSS/StyleValue.h> +#include <LibWeb/CSS/TransformFunctions.h> + +namespace Web::CSS { + +class TransformationStyleValue final : public StyleValueWithDefaultOperators<TransformationStyleValue> { +public: + static ValueComparingNonnullRefPtr<TransformationStyleValue> create(CSS::TransformFunction transform_function, StyleValueVector&& values) + { + return adopt_ref(*new TransformationStyleValue(transform_function, move(values))); + } + virtual ~TransformationStyleValue() override = default; + + CSS::TransformFunction transform_function() const { return m_properties.transform_function; } + StyleValueVector values() const { return m_properties.values; } + + virtual ErrorOr<String> to_string() const override; + + bool properties_equal(TransformationStyleValue const& other) const { return m_properties == other.m_properties; } + +private: + TransformationStyleValue(CSS::TransformFunction transform_function, StyleValueVector&& values) + : StyleValueWithDefaultOperators(Type::Transformation) + , m_properties { .transform_function = transform_function, .values = move(values) } + { + } + + struct Properties { + CSS::TransformFunction transform_function; + StyleValueVector values; + bool operator==(Properties const& other) const; + } m_properties; +}; + +} diff --git a/Userland/Libraries/LibWeb/Painting/StackingContext.cpp b/Userland/Libraries/LibWeb/Painting/StackingContext.cpp index c192698ddb..6de5fcfa01 100644 --- a/Userland/Libraries/LibWeb/Painting/StackingContext.cpp +++ b/Userland/Libraries/LibWeb/Painting/StackingContext.cpp @@ -13,6 +13,7 @@ #include <LibGfx/Matrix4x4.h> #include <LibGfx/Painter.h> #include <LibGfx/Rect.h> +#include <LibWeb/CSS/StyleValues/TransformationStyleValue.h> #include <LibWeb/Layout/Box.h> #include <LibWeb/Layout/ReplacedBox.h> #include <LibWeb/Layout/Viewport.h> |