瀏覽代碼

LibHTML: Replace StyleProperties::create(StyleProperties) with clone()

Matrix89 5 年之前
父節點
當前提交
c2e1dd67c9

+ 19 - 0
Libraries/LibHTML/CSS/StyleProperties.cpp

@@ -3,6 +3,25 @@
 #include <LibHTML/FontCache.h>
 #include <ctype.h>
 
+StyleProperties::StyleProperties()
+{
+}
+
+StyleProperties::StyleProperties(const StyleProperties& other)
+    : m_property_values(*new HashMap(other.m_property_values))
+{
+    if (other.m_font) {
+        m_font = other.m_font->clone();
+    } else {
+        m_font = nullptr;
+    }
+}
+
+NonnullRefPtr<StyleProperties> StyleProperties::clone() const
+{
+    return adopt(*new StyleProperties(*this));
+}
+
 void StyleProperties::set_property(CSS::PropertyID id, NonnullRefPtr<StyleValue> value)
 {
     m_property_values.set((unsigned)id, move(value));

+ 6 - 7
Libraries/LibHTML/CSS/StyleProperties.h

@@ -9,14 +9,13 @@ class Color;
 
 class StyleProperties : public RefCounted<StyleProperties> {
 public:
+    StyleProperties();
+
+    explicit StyleProperties(const StyleProperties&);
+
     static NonnullRefPtr<StyleProperties> create() { return adopt(*new StyleProperties); }
-    static NonnullRefPtr<StyleProperties> create(const StyleProperties& properties) {
-        auto style_properties = new StyleProperties();
-        properties.for_each_property([&](auto property_id, auto& property_value) {
-            style_properties->set_property(property_id, property_value);
-        });
-        return adopt(*style_properties);
-    }
+
+    NonnullRefPtr<StyleProperties> clone() const;
 
     template<typename Callback>
     inline void for_each_property(Callback callback) const

+ 1 - 1
Libraries/LibHTML/DOM/Element.cpp

@@ -165,7 +165,7 @@ void Element::recompute_style()
 
 RefPtr<StyleProperties> Element::computed_style()
 {
-    auto properties = StyleProperties::create(*m_resolved_style);
+    auto properties = m_resolved_style->clone();
     if (layout_node() && layout_node()->has_style()) {
         CSS::PropertyID box_model_metrics[] = {
             CSS::PropertyID::MarginTop,