Bladeren bron

LibWeb: Recurse into block-level children when hit testing a box

Otherwise, we always say you hit the parent, even when you're really
clicking on a child that's visually above the parent.
Andreas Kling 2 jaren geleden
bovenliggende
commit
4de3449ad6
1 gewijzigde bestanden met toevoegingen van 12 en 3 verwijderingen
  1. 12 3
      Userland/Libraries/LibWeb/Painting/PaintableBox.cpp

+ 12 - 3
Userland/Libraries/LibWeb/Painting/PaintableBox.cpp

@@ -649,9 +649,18 @@ Optional<HitTestResult> PaintableBox::hit_test(Gfx::FloatPoint const& position,
         return stacking_context()->hit_test(position, type);
     }
 
-    if (absolute_border_box_rect().contains(position.x(), position.y()))
-        return HitTestResult { *this };
-    return {};
+    if (!absolute_border_box_rect().contains(position.x(), position.y()))
+        return {};
+
+    for (auto* child = first_child(); child; child = child->next_sibling()) {
+        auto result = child->hit_test(position, type);
+        if (!result.has_value())
+            continue;
+        if (!result->paintable->visible_for_hit_testing())
+            continue;
+        return result;
+    }
+    return HitTestResult { *this };
 }
 
 Optional<HitTestResult> PaintableWithLines::hit_test(Gfx::FloatPoint const& position, HitTestType type) const