diff options
Diffstat (limited to 'components/layout_thread/lib.rs')
-rw-r--r-- | components/layout_thread/lib.rs | 51 |
1 files changed, 21 insertions, 30 deletions
diff --git a/components/layout_thread/lib.rs b/components/layout_thread/lib.rs index 7a3bf5cb9ab..eed95ecb9ea 100644 --- a/components/layout_thread/lib.rs +++ b/components/layout_thread/lib.rs @@ -88,7 +88,7 @@ use script_layout_interface::rpc::{LayoutRPC, MarginStyleResponse, NodeOverflowR use script_layout_interface::rpc::TextIndexResponse; use script_layout_interface::wrapper_traits::LayoutNode; use script_traits::{ConstellationControlMsg, LayoutControlMsg, LayoutMsg as ConstellationMsg}; -use script_traits::{StackingContextScrollState, UntrustedNodeAddress}; +use script_traits::{ScrollState, UntrustedNodeAddress}; use selectors::Element; use servo_config::opts; use servo_config::prefs::PREFS; @@ -506,7 +506,7 @@ impl LayoutThread { resolved_style_response: String::new(), offset_parent_response: OffsetParentResponse::empty(), margin_style_response: MarginStyleResponse::empty(), - stacking_context_scroll_offsets: HashMap::new(), + scroll_offsets: HashMap::new(), text_index_response: TextIndexResponse(None), nodes_from_point_response: vec![], })), @@ -600,9 +600,8 @@ impl LayoutThread { }; match request { - Request::FromPipeline(LayoutControlMsg::SetStackingContextScrollStates( - new_scroll_states)) => { - self.handle_request_helper(Msg::SetStackingContextScrollStates(new_scroll_states), + Request::FromPipeline(LayoutControlMsg::SetScrollStates(new_scroll_states)) => { + self.handle_request_helper(Msg::SetScrollStates(new_scroll_states), possibly_locked_rw_data) }, Request::FromPipeline(LayoutControlMsg::TickAnimations) => { @@ -653,9 +652,12 @@ impl LayoutThread { || self.handle_reflow(&mut data, possibly_locked_rw_data)); }, Msg::TickAnimations => self.tick_all_animations(possibly_locked_rw_data), - Msg::SetStackingContextScrollStates(new_scroll_states) => { - self.set_stacking_context_scroll_states(new_scroll_states, - possibly_locked_rw_data); + Msg::SetScrollStates(new_scroll_states) => { + self.set_scroll_states(new_scroll_states, possibly_locked_rw_data); + } + Msg::UpdateScrollStateFromScript(state) => { + let mut rw_data = possibly_locked_rw_data.lock(); + rw_data.scroll_offsets.insert(state.scroll_root_id, state.scroll_offset); } Msg::ReapStyleAndLayoutData(dead_data) => { unsafe { @@ -1306,19 +1308,13 @@ impl LayoutThread { let node = unsafe { ServoLayoutNode::new(&node) }; rw_data.content_boxes_response = process_content_boxes_request(node, root_flow); }, - ReflowQueryType::HitTestQuery(translated_point, client_point, update_cursor) => { - let mut translated_point = Point2D::new(Au::from_f32_px(translated_point.x), - Au::from_f32_px(translated_point.y)); - - let client_point = Point2D::new(Au::from_f32_px(client_point.x), - Au::from_f32_px(client_point.y)); - + ReflowQueryType::HitTestQuery(client_point, update_cursor) => { + let point = Point2D::new(Au::from_f32_px(client_point.x), + Au::from_f32_px(client_point.y)); let result = rw_data.display_list .as_ref() .expect("Tried to hit test with no display list") - .hit_test(&mut translated_point, - &client_point, - &rw_data.stacking_context_scroll_offsets); + .hit_test(&point, &rw_data.scroll_offsets); rw_data.hit_test_response = (result.last().cloned(), update_cursor); }, ReflowQueryType::TextIndexQuery(node, mouse_x, mouse_y) => { @@ -1332,7 +1328,7 @@ impl LayoutThread { .expect("Tried to hit test with no display list") .text_index(opaque_node, &client_point, - &rw_data.stacking_context_scroll_offsets)); + &rw_data.scroll_offsets)); }, ReflowQueryType::NodeGeometryQuery(node) => { let node = unsafe { ServoLayoutNode::new(&node) }; @@ -1368,18 +1364,14 @@ impl LayoutThread { let node = unsafe { ServoLayoutNode::new(&node) }; rw_data.margin_style_response = process_margin_style_query(node); }, - ReflowQueryType::NodesFromPoint(page_point, client_point) => { - let page_point = Point2D::new(Au::from_f32_px(page_point.x), - Au::from_f32_px(page_point.y)); + ReflowQueryType::NodesFromPoint(client_point) => { let client_point = Point2D::new(Au::from_f32_px(client_point.x), Au::from_f32_px(client_point.y)); let nodes_from_point_list = { let result = match rw_data.display_list { None => panic!("Tried to hit test without a DisplayList"), Some(ref display_list) => { - display_list.hit_test(&page_point, - &client_point, - &rw_data.stacking_context_scroll_offsets) + display_list.hit_test(&client_point, &rw_data.scroll_offsets) } }; @@ -1395,10 +1387,9 @@ impl LayoutThread { } } - fn set_stacking_context_scroll_states<'a, 'b>( - &mut self, - new_scroll_states: Vec<StackingContextScrollState>, - possibly_locked_rw_data: &mut RwData<'a, 'b>) { + fn set_scroll_states<'a, 'b>(&mut self, + new_scroll_states: Vec<ScrollState>, + possibly_locked_rw_data: &mut RwData<'a, 'b>) { let mut rw_data = possibly_locked_rw_data.lock(); let mut script_scroll_states = vec![]; let mut layout_scroll_states = HashMap::new(); @@ -1416,7 +1407,7 @@ impl LayoutThread { } let _ = self.script_chan .send(ConstellationControlMsg::SetScrollState(self.id, script_scroll_states)); - rw_data.stacking_context_scroll_offsets = layout_scroll_states + rw_data.scroll_offsets = layout_scroll_states } fn tick_all_animations<'a, 'b>(&mut self, possibly_locked_rw_data: &mut RwData<'a, 'b>) { |