From 11edf22e1baecca9f58f92dce593eee5bda4ec4f Mon Sep 17 00:00:00 2001 From: Gregory Date: Sun, 6 Nov 2016 23:38:35 +0800 Subject: [PATCH] keeping the currently scrolling layer align match elements --- webrender/src/frame.rs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/webrender/src/frame.rs b/webrender/src/frame.rs index d605f87a29..524a8fa91d 100644 --- a/webrender/src/frame.rs +++ b/webrender/src/frame.rs @@ -53,6 +53,7 @@ pub struct Frame { BuildHasherDefault>, pub root_scroll_layer_id: Option, pending_scroll_offsets: HashMap<(PipelineId, ServoScrollRootId), LayerPoint>, + current_scroll_layer_id: Option, id: FrameId, debug: bool, frame_builder_config: FrameBuilderConfig, @@ -212,6 +213,7 @@ impl Frame { layers: HashMap::with_hasher(Default::default()), root_scroll_layer_id: None, pending_scroll_offsets: HashMap::new(), + current_scroll_layer_id: None, id: FrameId(0), debug: debug, frame_builder: None, @@ -340,9 +342,17 @@ impl Frame { None => return false, }; - let scroll_layer_id = match self.get_scroll_layer(&cursor, root_scroll_layer_id) { - Some(scroll_layer_id) => scroll_layer_id, - None => return false, + let scroll_layer_id = match ( + phase, + self.get_scroll_layer(&cursor, root_scroll_layer_id), + self.current_scroll_layer_id) { + (ScrollEventPhase::Start, Some(scroll_layer_id), _) => { + self.current_scroll_layer_id = Some(scroll_layer_id); + scroll_layer_id + }, + (ScrollEventPhase::Start, None, _) => return false, + (_, _, Some(scroll_layer_id)) => scroll_layer_id, + (_, _, None) => return false, }; let scroll_root_id = match scroll_layer_id.info {