Don't translate point for independent stacking contexts

I took the test for hit_test from:
https://github.com/servo/servo/pull/15047/commits/602b45a3724747e1be767605c523c510846cfbf6
Thank you emilio
This commit is contained in:
Florian Merz 2017-01-16 18:52:27 +01:00 committed by Emilio Cobos Álvarez
parent 602b45a372
commit 65f3ac7d19

View file

@ -55,11 +55,10 @@ impl DisplayList {
scroll_offsets: &ScrollOffsetMap) scroll_offsets: &ScrollOffsetMap)
-> Option<usize> { -> Option<usize> {
let mut result = Vec::new(); let mut result = Vec::new();
let mut translated_point = client_point.clone();
let mut traversal = DisplayListTraversal::new(self); let mut traversal = DisplayListTraversal::new(self);
self.text_index_contents(node, self.text_index_contents(node,
&mut traversal, &mut traversal,
&mut translated_point, client_point,
client_point, client_point,
scroll_offsets, scroll_offsets,
&mut result); &mut result);
@ -69,30 +68,32 @@ impl DisplayList {
pub fn text_index_contents<'a>(&self, pub fn text_index_contents<'a>(&self,
node: OpaqueNode, node: OpaqueNode,
traversal: &mut DisplayListTraversal<'a>, traversal: &mut DisplayListTraversal<'a>,
translated_point: &mut Point2D<Au>, translated_point: &Point2D<Au>,
client_point: &Point2D<Au>, client_point: &Point2D<Au>,
scroll_offsets: &ScrollOffsetMap, scroll_offsets: &ScrollOffsetMap,
result: &mut Vec<usize>) { result: &mut Vec<usize>) {
while let Some(item) = traversal.next() { while let Some(item) = traversal.next() {
match item { match item {
&DisplayItem::PushStackingContext(ref stacking_context_item) => { &DisplayItem::PushStackingContext(ref stacking_context_item) => {
let mut point = *translated_point;
DisplayList::translate_point(&stacking_context_item.stacking_context, DisplayList::translate_point(&stacking_context_item.stacking_context,
translated_point, &mut point,
client_point); client_point);
self.text_index_contents(node, self.text_index_contents(node,
traversal, traversal,
translated_point, &point,
client_point, client_point,
scroll_offsets, scroll_offsets,
result); result);
} }
&DisplayItem::PushScrollRoot(ref item) => { &DisplayItem::PushScrollRoot(ref item) => {
let mut point = *translated_point;
DisplayList::scroll_root(&item.scroll_root, DisplayList::scroll_root(&item.scroll_root,
translated_point, &mut point,
scroll_offsets); scroll_offsets);
self.text_index_contents(node, self.text_index_contents(node,
traversal, traversal,
translated_point, &point,
client_point, client_point,
scroll_offsets, scroll_offsets,
result); result);