Explorar el Código

LibWeb: Split BackgroundStyleValue out of StyleValue.{h,cpp}

Sam Atkins hace 2 años
padre
commit
92a0d4c0af

+ 1 - 0
Userland/Libraries/LibWeb/CMakeLists.txt

@@ -65,6 +65,7 @@ set(SOURCES
     CSS/StyleSheetList.cpp
     CSS/StyleValue.cpp
     CSS/StyleValues/AngleStyleValue.cpp
+    CSS/StyleValues/BackgroundStyleValue.cpp
     CSS/Supports.cpp
     CSS/SyntaxHighlighter/SyntaxHighlighter.cpp
     CSS/Time.cpp

+ 1 - 0
Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp

@@ -30,6 +30,7 @@
 #include <LibWeb/CSS/Selector.h>
 #include <LibWeb/CSS/StyleValue.h>
 #include <LibWeb/CSS/StyleValues/AngleStyleValue.h>
+#include <LibWeb/CSS/StyleValues/BackgroundStyleValue.h>
 #include <LibWeb/DOM/Document.h>
 #include <LibWeb/Dump.h>
 #include <LibWeb/Infra/Strings.h>

+ 1 - 0
Userland/Libraries/LibWeb/CSS/ResolvedCSSStyleDeclaration.cpp

@@ -12,6 +12,7 @@
 #include <LibWeb/CSS/Enums.h>
 #include <LibWeb/CSS/ResolvedCSSStyleDeclaration.h>
 #include <LibWeb/CSS/StyleComputer.h>
+#include <LibWeb/CSS/StyleValues/BackgroundStyleValue.h>
 #include <LibWeb/DOM/Document.h>
 #include <LibWeb/DOM/Element.h>
 #include <LibWeb/Layout/Viewport.h>

+ 1 - 0
Userland/Libraries/LibWeb/CSS/StyleComputer.cpp

@@ -25,6 +25,7 @@
 #include <LibWeb/CSS/SelectorEngine.h>
 #include <LibWeb/CSS/StyleComputer.h>
 #include <LibWeb/CSS/StyleSheet.h>
+#include <LibWeb/CSS/StyleValues/BackgroundStyleValue.h>
 #include <LibWeb/DOM/Document.h>
 #include <LibWeb/DOM/Element.h>
 #include <LibWeb/FontCache.h>

+ 1 - 63
Userland/Libraries/LibWeb/CSS/StyleValue.cpp

@@ -12,6 +12,7 @@
 #include <LibWeb/CSS/Serialize.h>
 #include <LibWeb/CSS/StyleValue.h>
 #include <LibWeb/CSS/StyleValues/AngleStyleValue.h>
+#include <LibWeb/CSS/StyleValues/BackgroundStyleValue.h>
 #include <LibWeb/DOM/Document.h>
 #include <LibWeb/HTML/BrowsingContext.h>
 #include <LibWeb/Loader/LoadRequest.h>
@@ -291,69 +292,6 @@ StyleValueList const& StyleValue::as_value_list() const
     return static_cast<StyleValueList const&>(*this);
 }
 
-BackgroundStyleValue::BackgroundStyleValue(
-    ValueComparingNonnullRefPtr<StyleValue const> color,
-    ValueComparingNonnullRefPtr<StyleValue const> image,
-    ValueComparingNonnullRefPtr<StyleValue const> position,
-    ValueComparingNonnullRefPtr<StyleValue const> size,
-    ValueComparingNonnullRefPtr<StyleValue const> repeat,
-    ValueComparingNonnullRefPtr<StyleValue const> attachment,
-    ValueComparingNonnullRefPtr<StyleValue const> origin,
-    ValueComparingNonnullRefPtr<StyleValue const> clip)
-    : StyleValueWithDefaultOperators(Type::Background)
-    , m_properties {
-        .color = move(color),
-        .image = move(image),
-        .position = move(position),
-        .size = move(size),
-        .repeat = move(repeat),
-        .attachment = move(attachment),
-        .origin = move(origin),
-        .clip = move(clip),
-        .layer_count = 0
-    }
-{
-    auto layer_count = [](auto style_value) -> size_t {
-        if (style_value->is_value_list())
-            return style_value->as_value_list().size();
-        else
-            return 1;
-    };
-
-    m_properties.layer_count = max(layer_count(m_properties.image), layer_count(m_properties.position));
-    m_properties.layer_count = max(m_properties.layer_count, layer_count(m_properties.size));
-    m_properties.layer_count = max(m_properties.layer_count, layer_count(m_properties.repeat));
-    m_properties.layer_count = max(m_properties.layer_count, layer_count(m_properties.attachment));
-    m_properties.layer_count = max(m_properties.layer_count, layer_count(m_properties.origin));
-    m_properties.layer_count = max(m_properties.layer_count, layer_count(m_properties.clip));
-
-    VERIFY(!m_properties.color->is_value_list());
-}
-
-ErrorOr<String> BackgroundStyleValue::to_string() const
-{
-    if (m_properties.layer_count == 1) {
-        return String::formatted("{} {} {} {} {} {} {} {}", TRY(m_properties.color->to_string()), TRY(m_properties.image->to_string()), TRY(m_properties.position->to_string()), TRY(m_properties.size->to_string()), TRY(m_properties.repeat->to_string()), TRY(m_properties.attachment->to_string()), TRY(m_properties.origin->to_string()), TRY(m_properties.clip->to_string()));
-    }
-
-    auto get_layer_value_string = [](ValueComparingNonnullRefPtr<StyleValue const> const& style_value, size_t index) {
-        if (style_value->is_value_list())
-            return style_value->as_value_list().value_at(index, true)->to_string();
-        return style_value->to_string();
-    };
-
-    StringBuilder builder;
-    for (size_t i = 0; i < m_properties.layer_count; i++) {
-        if (i)
-            TRY(builder.try_append(", "sv));
-        if (i == m_properties.layer_count - 1)
-            TRY(builder.try_appendff("{} ", TRY(m_properties.color->to_string())));
-        TRY(builder.try_appendff("{} {} {} {} {} {} {}", TRY(get_layer_value_string(m_properties.image, i)), TRY(get_layer_value_string(m_properties.position, i)), TRY(get_layer_value_string(m_properties.size, i)), TRY(get_layer_value_string(m_properties.repeat, i)), TRY(get_layer_value_string(m_properties.attachment, i)), TRY(get_layer_value_string(m_properties.origin, i)), TRY(get_layer_value_string(m_properties.clip, i))));
-    }
-
-    return builder.to_string();
-}
-
 ErrorOr<String> BackgroundRepeatStyleValue::to_string() const
 {
     return String::formatted("{} {}", CSS::to_string(m_properties.repeat_x), CSS::to_string(m_properties.repeat_y));

+ 0 - 56
Userland/Libraries/LibWeb/CSS/StyleValue.h

@@ -502,62 +502,6 @@ struct StyleValueWithDefaultOperators : public StyleValue {
     }
 };
 
-class BackgroundStyleValue final : public StyleValueWithDefaultOperators<BackgroundStyleValue> {
-public:
-    static ValueComparingNonnullRefPtr<BackgroundStyleValue> create(
-        ValueComparingNonnullRefPtr<StyleValue const> color,
-        ValueComparingNonnullRefPtr<StyleValue const> image,
-        ValueComparingNonnullRefPtr<StyleValue const> position,
-        ValueComparingNonnullRefPtr<StyleValue const> size,
-        ValueComparingNonnullRefPtr<StyleValue const> repeat,
-        ValueComparingNonnullRefPtr<StyleValue const> attachment,
-        ValueComparingNonnullRefPtr<StyleValue const> origin,
-        ValueComparingNonnullRefPtr<StyleValue const> clip)
-    {
-        return adopt_ref(*new BackgroundStyleValue(move(color), move(image), move(position), move(size), move(repeat), move(attachment), move(origin), move(clip)));
-    }
-    virtual ~BackgroundStyleValue() override = default;
-
-    size_t layer_count() const { return m_properties.layer_count; }
-
-    auto attachment() const { return m_properties.attachment; }
-    auto clip() const { return m_properties.clip; }
-    auto color() const { return m_properties.color; }
-    auto image() const { return m_properties.image; }
-    auto origin() const { return m_properties.origin; }
-    auto position() const { return m_properties.position; }
-    auto repeat() const { return m_properties.repeat; }
-    auto size() const { return m_properties.size; }
-
-    virtual ErrorOr<String> to_string() const override;
-
-    bool properties_equal(BackgroundStyleValue const& other) const { return m_properties == other.m_properties; }
-
-private:
-    BackgroundStyleValue(
-        ValueComparingNonnullRefPtr<StyleValue const> color,
-        ValueComparingNonnullRefPtr<StyleValue const> image,
-        ValueComparingNonnullRefPtr<StyleValue const> position,
-        ValueComparingNonnullRefPtr<StyleValue const> size,
-        ValueComparingNonnullRefPtr<StyleValue const> repeat,
-        ValueComparingNonnullRefPtr<StyleValue const> attachment,
-        ValueComparingNonnullRefPtr<StyleValue const> origin,
-        ValueComparingNonnullRefPtr<StyleValue const> clip);
-
-    struct Properties {
-        ValueComparingNonnullRefPtr<StyleValue const> color;
-        ValueComparingNonnullRefPtr<StyleValue const> image;
-        ValueComparingNonnullRefPtr<StyleValue const> position;
-        ValueComparingNonnullRefPtr<StyleValue const> size;
-        ValueComparingNonnullRefPtr<StyleValue const> repeat;
-        ValueComparingNonnullRefPtr<StyleValue const> attachment;
-        ValueComparingNonnullRefPtr<StyleValue const> origin;
-        ValueComparingNonnullRefPtr<StyleValue const> clip;
-        size_t layer_count;
-        bool operator==(Properties const&) const = default;
-    } m_properties;
-};
-
 class BackgroundRepeatStyleValue final : public StyleValueWithDefaultOperators<BackgroundRepeatStyleValue> {
 public:
     static ValueComparingNonnullRefPtr<BackgroundRepeatStyleValue> create(Repeat repeat_x, Repeat repeat_y)

+ 79 - 0
Userland/Libraries/LibWeb/CSS/StyleValues/BackgroundStyleValue.cpp

@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
+ * Copyright (c) 2021-2023, Sam Atkins <atkinssj@serenityos.org>
+ * Copyright (c) 2021, Tobias Christiansen <tobyase@serenityos.org>
+ * Copyright (c) 2022-2023, MacDue <macdue@dueutil.tech>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#include "BackgroundStyleValue.h"
+
+namespace Web::CSS {
+
+BackgroundStyleValue::BackgroundStyleValue(
+    ValueComparingNonnullRefPtr<StyleValue const> color,
+    ValueComparingNonnullRefPtr<StyleValue const> image,
+    ValueComparingNonnullRefPtr<StyleValue const> position,
+    ValueComparingNonnullRefPtr<StyleValue const> size,
+    ValueComparingNonnullRefPtr<StyleValue const> repeat,
+    ValueComparingNonnullRefPtr<StyleValue const> attachment,
+    ValueComparingNonnullRefPtr<StyleValue const> origin,
+    ValueComparingNonnullRefPtr<StyleValue const> clip)
+    : StyleValueWithDefaultOperators(Type::Background)
+    , m_properties {
+        .color = move(color),
+        .image = move(image),
+        .position = move(position),
+        .size = move(size),
+        .repeat = move(repeat),
+        .attachment = move(attachment),
+        .origin = move(origin),
+        .clip = move(clip),
+        .layer_count = 0
+    }
+{
+    auto layer_count = [](auto style_value) -> size_t {
+        if (style_value->is_value_list())
+            return style_value->as_value_list().size();
+        else
+            return 1;
+    };
+
+    m_properties.layer_count = max(layer_count(m_properties.image), layer_count(m_properties.position));
+    m_properties.layer_count = max(m_properties.layer_count, layer_count(m_properties.size));
+    m_properties.layer_count = max(m_properties.layer_count, layer_count(m_properties.repeat));
+    m_properties.layer_count = max(m_properties.layer_count, layer_count(m_properties.attachment));
+    m_properties.layer_count = max(m_properties.layer_count, layer_count(m_properties.origin));
+    m_properties.layer_count = max(m_properties.layer_count, layer_count(m_properties.clip));
+
+    VERIFY(!m_properties.color->is_value_list());
+}
+
+BackgroundStyleValue::~BackgroundStyleValue() = default;
+
+ErrorOr<String> BackgroundStyleValue::to_string() const
+{
+    if (m_properties.layer_count == 1) {
+        return String::formatted("{} {} {} {} {} {} {} {}", TRY(m_properties.color->to_string()), TRY(m_properties.image->to_string()), TRY(m_properties.position->to_string()), TRY(m_properties.size->to_string()), TRY(m_properties.repeat->to_string()), TRY(m_properties.attachment->to_string()), TRY(m_properties.origin->to_string()), TRY(m_properties.clip->to_string()));
+    }
+
+    auto get_layer_value_string = [](ValueComparingNonnullRefPtr<StyleValue const> const& style_value, size_t index) {
+        if (style_value->is_value_list())
+            return style_value->as_value_list().value_at(index, true)->to_string();
+        return style_value->to_string();
+    };
+
+    StringBuilder builder;
+    for (size_t i = 0; i < m_properties.layer_count; i++) {
+        if (i)
+            TRY(builder.try_append(", "sv));
+        if (i == m_properties.layer_count - 1)
+            TRY(builder.try_appendff("{} ", TRY(m_properties.color->to_string())));
+        TRY(builder.try_appendff("{} {} {} {} {} {} {}", TRY(get_layer_value_string(m_properties.image, i)), TRY(get_layer_value_string(m_properties.position, i)), TRY(get_layer_value_string(m_properties.size, i)), TRY(get_layer_value_string(m_properties.repeat, i)), TRY(get_layer_value_string(m_properties.attachment, i)), TRY(get_layer_value_string(m_properties.origin, i)), TRY(get_layer_value_string(m_properties.clip, i))));
+    }
+
+    return builder.to_string();
+}
+
+}

+ 72 - 0
Userland/Libraries/LibWeb/CSS/StyleValues/BackgroundStyleValue.h

@@ -0,0 +1,72 @@
+/*
+ * 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>
+
+namespace Web::CSS {
+
+class BackgroundStyleValue final : public StyleValueWithDefaultOperators<BackgroundStyleValue> {
+public:
+    static ValueComparingNonnullRefPtr<BackgroundStyleValue> create(
+        ValueComparingNonnullRefPtr<StyleValue const> color,
+        ValueComparingNonnullRefPtr<StyleValue const> image,
+        ValueComparingNonnullRefPtr<StyleValue const> position,
+        ValueComparingNonnullRefPtr<StyleValue const> size,
+        ValueComparingNonnullRefPtr<StyleValue const> repeat,
+        ValueComparingNonnullRefPtr<StyleValue const> attachment,
+        ValueComparingNonnullRefPtr<StyleValue const> origin,
+        ValueComparingNonnullRefPtr<StyleValue const> clip)
+    {
+        return adopt_ref(*new BackgroundStyleValue(move(color), move(image), move(position), move(size), move(repeat), move(attachment), move(origin), move(clip)));
+    }
+    virtual ~BackgroundStyleValue() override;
+
+    size_t layer_count() const { return m_properties.layer_count; }
+
+    auto attachment() const { return m_properties.attachment; }
+    auto clip() const { return m_properties.clip; }
+    auto color() const { return m_properties.color; }
+    auto image() const { return m_properties.image; }
+    auto origin() const { return m_properties.origin; }
+    auto position() const { return m_properties.position; }
+    auto repeat() const { return m_properties.repeat; }
+    auto size() const { return m_properties.size; }
+
+    virtual ErrorOr<String> to_string() const override;
+
+    bool properties_equal(BackgroundStyleValue const& other) const { return m_properties == other.m_properties; }
+
+private:
+    BackgroundStyleValue(
+        ValueComparingNonnullRefPtr<StyleValue const> color,
+        ValueComparingNonnullRefPtr<StyleValue const> image,
+        ValueComparingNonnullRefPtr<StyleValue const> position,
+        ValueComparingNonnullRefPtr<StyleValue const> size,
+        ValueComparingNonnullRefPtr<StyleValue const> repeat,
+        ValueComparingNonnullRefPtr<StyleValue const> attachment,
+        ValueComparingNonnullRefPtr<StyleValue const> origin,
+        ValueComparingNonnullRefPtr<StyleValue const> clip);
+
+    struct Properties {
+        ValueComparingNonnullRefPtr<StyleValue const> color;
+        ValueComparingNonnullRefPtr<StyleValue const> image;
+        ValueComparingNonnullRefPtr<StyleValue const> position;
+        ValueComparingNonnullRefPtr<StyleValue const> size;
+        ValueComparingNonnullRefPtr<StyleValue const> repeat;
+        ValueComparingNonnullRefPtr<StyleValue const> attachment;
+        ValueComparingNonnullRefPtr<StyleValue const> origin;
+        ValueComparingNonnullRefPtr<StyleValue const> clip;
+        size_t layer_count;
+        bool operator==(Properties const&) const = default;
+    } m_properties;
+};
+
+}