浏览代码

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 年之前
父节点
当前提交
53ccfc1f4c
共有 1 个文件被更改,包括 6 次插入0 次删除
  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);
     }
 
+    int z_index = m_box.computed_values().z_index().value_or(0);
+
     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);
         if (result_here.layout_node)
             result = result_here;