Selaa lähdekoodia

LibWeb: Always inline absolute Length to_px() conversion

Only do the relative Length units out of line.
Andreas Kling 5 vuotta sitten
vanhempi
commit
ae181e1573
2 muutettua tiedostoa jossa 16 lisäystä ja 6 poistoa
  1. 1 5
      Libraries/LibWeb/CSS/Length.cpp
  2. 15 1
      Libraries/LibWeb/CSS/Length.h

+ 1 - 5
Libraries/LibWeb/CSS/Length.cpp

@@ -30,13 +30,9 @@
 
 namespace Web {
 
-float Length::to_px(const LayoutNode& layout_node) const
+float Length::relative_length_to_px(const LayoutNode& layout_node) const
 {
     switch (m_type) {
-    case Type::Auto:
-        return 0;
-    case Type::Px:
-        return m_value;
     case Type::Em:
         return m_value * layout_node.font_size();
     case Type::Rem:

+ 15 - 1
Libraries/LibWeb/CSS/Length.h

@@ -57,7 +57,19 @@ public:
     bool is_relative() const { return m_type == Type::Em || m_type == Type::Rem; }
 
     float raw_value() const { return m_value; }
-    float to_px(const LayoutNode&) const;
+    ALWAYS_INLINE float to_px(const LayoutNode& layout_node) const
+    {
+        if (is_relative())
+            return relative_length_to_px(layout_node);
+        switch (m_type) {
+        case Type::Auto:
+            return 0;
+        case Type::Px:
+            return m_value;
+        default:
+            ASSERT_NOT_REACHED();
+        }
+    }
 
     String to_string() const
     {
@@ -67,6 +79,8 @@ public:
     }
 
 private:
+    float relative_length_to_px(const LayoutNode&) const;
+
     const char* unit_name() const;
 
     Type m_type { Type::Auto };