Prechádzať zdrojové kódy

LibWeb: Account for `Calculated` in Length methods

We were ignoring this in a couple of places.
Sam Atkins 3 rokov pred
rodič
commit
a07fed4e53

+ 11 - 0
Userland/Libraries/LibWeb/CSS/Length.cpp

@@ -48,6 +48,8 @@ Length Length::make_calculated(NonnullRefPtr<CalculatedStyleValue> calculated_st
 
 Length Length::percentage_of(Percentage const& percentage) const
 {
+    VERIFY(!is_calculated());
+
     if (is_auto()) {
         dbgln("Attempting to get percentage of an auto length, this seems wrong? But for now we just return the original length.");
         return *this;
@@ -104,6 +106,15 @@ float Length::to_px(Layout::Node const& layout_node) const
     return to_px(viewport_rect, layout_node.font().metrics('M'), layout_node.computed_values().font_size(), root_element->layout_node()->computed_values().font_size());
 }
 
+String Length::to_string() const
+{
+    if (is_calculated())
+        return m_calculated_style->to_string();
+    if (is_auto())
+        return "auto";
+    return String::formatted("{}{}", m_value, unit_name());
+}
+
 const char* Length::unit_name() const
 {
     switch (m_type) {

+ 3 - 6
Userland/Libraries/LibWeb/CSS/Length.h

@@ -112,15 +112,12 @@ public:
         }
     }
 
-    String to_string() const
-    {
-        if (is_auto())
-            return "auto";
-        return String::formatted("{}{}", m_value, unit_name());
-    }
+    String to_string() const;
 
     bool operator==(const Length& other) const
     {
+        if (is_calculated())
+            return m_calculated_style == other.m_calculated_style;
         return m_type == other.m_type && m_value == other.m_value;
     }