소스 검색

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;