diff options
Diffstat (limited to '')
| -rw-r--r-- | winit/src/application.rs | 27 | 
1 files changed, 22 insertions, 5 deletions
| diff --git a/winit/src/application.rs b/winit/src/application.rs index 70562627..9d787933 100644 --- a/winit/src/application.rs +++ b/winit/src/application.rs @@ -5,6 +5,7 @@ pub use state::State;  use crate::clipboard::{self, Clipboard};  use crate::conversion; +use crate::mouse;  use crate::{      Color, Command, Debug, Error, Executor, Mode, Proxy, Runtime, Settings,      Size, Subscription, @@ -252,9 +253,7 @@ async fn run_instance<A, E, C>(          &mut debug,      )); -    // TODO -    // let mut mouse_interaction = mouse::Interaction::default(); - +    let mut mouse_interaction = mouse::Interaction::default();      let mut events = Vec::new();      let mut messages = Vec::new(); @@ -317,9 +316,18 @@ async fn run_instance<A, E, C>(                  }                  debug.draw_started(); -                user_interface.draw(&mut renderer, state.cursor_position()); +                let new_mouse_interaction = +                    user_interface.draw(&mut renderer, state.cursor_position());                  debug.draw_finished(); +                if new_mouse_interaction != mouse_interaction { +                    window.set_cursor_icon(conversion::mouse_interaction( +                        new_mouse_interaction, +                    )); + +                    mouse_interaction = new_mouse_interaction; +                } +                  window.request_redraw();              }              event::Event::PlatformSpecific(event::PlatformSpecific::MacOS( @@ -356,7 +364,16 @@ async fn run_instance<A, E, C>(                      debug.layout_finished();                      debug.draw_started(); -                    user_interface.draw(&mut renderer, state.cursor_position()); +                    let new_mouse_interaction = user_interface +                        .draw(&mut renderer, state.cursor_position()); + +                    if new_mouse_interaction != mouse_interaction { +                        window.set_cursor_icon(conversion::mouse_interaction( +                            new_mouse_interaction, +                        )); + +                        mouse_interaction = new_mouse_interaction; +                    }                      debug.draw_finished();                      compositor.configure_surface( | 
