diff --git a/components/compositing/compositor.rs b/components/compositing/compositor.rs index bb8f4d8f2f0..af71c2dadbc 100644 --- a/components/compositing/compositor.rs +++ b/components/compositing/compositor.rs @@ -198,6 +198,9 @@ pub struct IOCompositor { /// Current mouse cursor. cursor: Cursor, + /// Current cursor position. + cursor_pos: DevicePoint, + output_file: Option, is_running_problem_test: bool, @@ -320,6 +323,7 @@ impl IOCompositor { webxr_main_thread: state.webxr_main_thread, pending_paint_metrics: HashMap::new(), cursor: Cursor::None, + cursor_pos: DevicePoint::new(0.0, 0.0), output_file, is_running_problem_test, exit_after_load, @@ -361,6 +365,21 @@ impl IOCompositor { self.webrender.deinit(); } + pub fn update_cursor(&mut self) { + let results = self.hit_test_at_point(self.cursor_pos); + if let Some(item) = results.items.first() { + if let Some(cursor) = Cursor::from_u8(item.tag.1 as _) { + if cursor != self.cursor { + self.cursor = cursor; + let msg = ConstellationMsg::SetCursor(cursor); + if let Err(e) = self.constellation_chan.send(msg) { + warn!("Sending event to constellation failed ({:?}).", e); + } + } + } + } + } + pub fn maybe_start_shutting_down(&mut self) { if self.shutdown_state == ShutdownState::NotShuttingDown { debug!("Shutting down the constellation for WindowEvent::Quit"); @@ -481,6 +500,7 @@ impl IOCompositor { (Msg::NewScrollFrameReady(recomposite_needed), ShutdownState::NotShuttingDown) => { self.waiting_for_results_of_scroll = false; + self.update_cursor(); if recomposite_needed { self.composition_request = CompositionRequest::CompositeNow( CompositingReason::NewWebRenderScrollFrame,