Sfoglia il codice sorgente

LibWeb: Don't hit test a stacked child if it is behind its parent

When hit testing a stacked context, skip hit testing children if the
child's z-index is less than the parent's. The children are already
sorted by z-index, but also need to consider the parent.
Timothy Flynn 4 anni fa
parent
commit
53ccfc1f4c
1 ha cambiato i file con 6 aggiunte e 0 eliminazioni
  1. 6 0
      Userland/Libraries/LibWeb/Painting/StackingContext.cpp

+ 6 - 0
Userland/Libraries/LibWeb/Painting/StackingContext.cpp

@@ -73,7 +73,13 @@ HitTestResult StackingContext::hit_test(const Gfx::IntPoint& position, HitTestTy
         result = downcast<InitialContainingBlockBox>(m_box).BlockBox::hit_test(position, type);
         result = downcast<InitialContainingBlockBox>(m_box).BlockBox::hit_test(position, type);
     }
     }
 
 
+    int z_index = m_box.computed_values().z_index().value_or(0);
+
     for (auto* child : m_children) {
     for (auto* child : m_children) {
+        int child_z_index = child->m_box.computed_values().z_index().value_or(0);
+        if (result.layout_node && (child_z_index < z_index))
+            continue;
+
         auto result_here = child->hit_test(position, type);
         auto result_here = child->hit_test(position, type);
         if (result_here.layout_node)
         if (result_here.layout_node)
             result = result_here;
             result = result_here;