Browse Source

LibWeb: Add Layout::Box::is_scroll_container()

The computed `overflow` property values determine whether a box is a
scroll container or not, so let's have a simple helper for asking this.
Andreas Kling 2 years ago
parent
commit
8038824211
2 changed files with 23 additions and 0 deletions
  1. 21 0
      Userland/Libraries/LibWeb/Layout/Box.cpp
  2. 2 0
      Userland/Libraries/LibWeb/Layout/Box.h

+ 21 - 0
Userland/Libraries/LibWeb/Layout/Box.cpp

@@ -29,6 +29,27 @@ Box::~Box()
 {
 {
 }
 }
 
 
+// https://www.w3.org/TR/css-overflow-3/#overflow-control
+bool overflow_value_makes_box_a_scroll_container(CSS::Overflow overflow)
+{
+    switch (overflow) {
+    case CSS::Overflow::Clip:
+    case CSS::Overflow::Visible:
+        return false;
+    case CSS::Overflow::Auto:
+    case CSS::Overflow::Hidden:
+    case CSS::Overflow::Scroll:
+        return true;
+    }
+}
+
+// https://www.w3.org/TR/css-overflow-3/#scroll-container
+bool Box::is_scroll_container() const
+{
+    return overflow_value_makes_box_a_scroll_container(computed_values().overflow_x())
+        || overflow_value_makes_box_a_scroll_container(computed_values().overflow_y());
+}
+
 bool Box::is_scrollable() const
 bool Box::is_scrollable() const
 {
 {
     // FIXME: Support horizontal scroll as well (overflow-x)
     // FIXME: Support horizontal scroll as well (overflow-x)

+ 2 - 0
Userland/Libraries/LibWeb/Layout/Box.h

@@ -42,6 +42,8 @@ public:
 
 
     virtual JS::GCPtr<Painting::Paintable> create_paintable() const override;
     virtual JS::GCPtr<Painting::Paintable> create_paintable() const override;
 
 
+    bool is_scroll_container() const;
+
     bool is_scrollable() const;
     bool is_scrollable() const;
     CSSPixelPoint scroll_offset() const { return m_scroll_offset; }
     CSSPixelPoint scroll_offset() const { return m_scroll_offset; }
     void set_scroll_offset(CSSPixelPoint);
     void set_scroll_offset(CSSPixelPoint);