diff --git a/components/gfx/display_list/mod.rs b/components/gfx/display_list/mod.rs index fb6aa952440f..26c6bb2c4e41 100644 --- a/components/gfx/display_list/mod.rs +++ b/components/gfx/display_list/mod.rs @@ -115,7 +115,7 @@ impl DisplayList { // Return all nodes containing the point of interest, bottommost first, and // respecting the `pointer-events` CSS property. pub fn hit_test(&self, - translated_point: &mut Point2D, + translated_point: &Point2D, client_point: &Point2D, scroll_offsets: &ScrollOffsetMap) -> Vec { @@ -131,28 +131,30 @@ impl DisplayList { pub fn hit_test_contents<'a>(&self, traversal: &mut DisplayListTraversal<'a>, - translated_point: &mut Point2D, + translated_point: &Point2D, client_point: &Point2D, scroll_offsets: &ScrollOffsetMap, result: &mut Vec) { while let Some(item) = traversal.next() { match item { &DisplayItem::PushStackingContext(ref stacking_context_item) => { + let mut point = *translated_point; DisplayList::translate_point(&stacking_context_item.stacking_context, - translated_point, + &mut point, client_point); self.hit_test_contents(traversal, - translated_point, + &point, client_point, scroll_offsets, result); } &DisplayItem::PushScrollRoot(ref item) => { + let mut point = *translated_point; DisplayList::scroll_root(&item.scroll_root, - translated_point, + &mut point, scroll_offsets); self.hit_test_contents(traversal, - translated_point, + &point, client_point, scroll_offsets, result); diff --git a/components/layout/query.rs b/components/layout/query.rs index 4068c3230bfb..4fe98c059690 100644 --- a/components/layout/query.rs +++ b/components/layout/query.rs @@ -141,7 +141,7 @@ impl LayoutRPC for LayoutRPCImpl { fn nodes_from_point(&self, page_point: Point2D, client_point: Point2D) -> Vec { - let mut page_point = Point2D::new(Au::from_f32_px(page_point.x), + let page_point = Point2D::new(Au::from_f32_px(page_point.x), Au::from_f32_px(page_point.y)); let client_point = Point2D::new(Au::from_f32_px(client_point.x), Au::from_f32_px(client_point.y)); @@ -152,7 +152,7 @@ impl LayoutRPC for LayoutRPCImpl { let result = match rw_data.display_list { None => panic!("Tried to hit test without a DisplayList"), Some(ref display_list) => { - display_list.hit_test(&mut page_point, + display_list.hit_test(&page_point, &client_point, &rw_data.stacking_context_scroll_offsets) } diff --git a/tests/wpt/mozilla/meta/MANIFEST.json b/tests/wpt/mozilla/meta/MANIFEST.json index 794a743fe629..fdedc3d38d1d 100644 --- a/tests/wpt/mozilla/meta/MANIFEST.json +++ b/tests/wpt/mozilla/meta/MANIFEST.json @@ -8432,6 +8432,12 @@ "url": "/_mozilla/mozilla/globals/entry.worker.html" } ], + "mozilla/hit_test_multiple_sc.html": [ + { + "path": "mozilla/hit_test_multiple_sc.html", + "url": "/_mozilla/mozilla/hit_test_multiple_sc.html" + } + ], "mozilla/hit_test_nested_sc.html": [ { "path": "mozilla/hit_test_nested_sc.html", diff --git a/tests/wpt/mozilla/tests/mozilla/hit_test_multiple_sc.html b/tests/wpt/mozilla/tests/mozilla/hit_test_multiple_sc.html new file mode 100644 index 000000000000..1c79d25ea06f --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/hit_test_multiple_sc.html @@ -0,0 +1,27 @@ + + +Hit testing works for following stacking contexts + + + +
+
+