diff options
| author | 2020-05-05 00:05:47 +0200 | |
|---|---|---|
| committer | 2020-05-05 00:05:47 +0200 | |
| commit | 7dc02a5e16a3143b7c3ba9270207e3ebda71d567 (patch) | |
| tree | dd727f138641fbda008af8e7827369cc99420749 /winit/src | |
| parent | 27aad74a32fd8ac2b12f9d32df8a3b61a3175457 (diff) | |
| parent | 93c6be5eef577f0778b5787dac37351c035ed471 (diff) | |
| download | iced-7dc02a5e16a3143b7c3ba9270207e3ebda71d567.tar.gz iced-7dc02a5e16a3143b7c3ba9270207e3ebda71d567.tar.bz2 iced-7dc02a5e16a3143b7c3ba9270207e3ebda71d567.zip | |
Merge pull request #325 from hecrj/feature/canvas-interaction
Canvas interactivity and Game of Life example
Diffstat (limited to '')
| -rw-r--r-- | winit/src/application.rs | 16 | ||||
| -rw-r--r-- | winit/src/conversion.rs | 78 | 
2 files changed, 52 insertions, 42 deletions
| diff --git a/winit/src/application.rs b/winit/src/application.rs index b974711c..f6bc8fcc 100644 --- a/winit/src/application.rs +++ b/winit/src/application.rs @@ -1,6 +1,6 @@  use crate::{ -    conversion, size::Size, window, Cache, Clipboard, Command, Debug, Element, -    Executor, Mode, MouseCursor, Proxy, Runtime, Settings, Subscription, +    conversion, mouse, size::Size, window, Cache, Clipboard, Command, Debug, +    Element, Executor, Mode, Proxy, Runtime, Settings, Subscription,      UserInterface,  }; @@ -205,7 +205,7 @@ pub trait Application: Sized {          let mut cache = Some(user_interface.into_cache());          let mut events = Vec::new(); -        let mut mouse_cursor = MouseCursor::OutOfBounds; +        let mut mouse_interaction = mouse::Interaction::default();          let mut modifiers = winit::event::ModifiersState::default();          debug.startup_finished(); @@ -328,7 +328,7 @@ pub trait Application: Sized {                      resized = false;                  } -                let new_mouse_cursor = backend.draw( +                let new_mouse_interaction = backend.draw(                      &mut renderer,                      &mut swap_chain,                      &primitive, @@ -338,12 +338,12 @@ pub trait Application: Sized {                  debug.render_finished(); -                if new_mouse_cursor != mouse_cursor { -                    window.set_cursor_icon(conversion::mouse_cursor( -                        new_mouse_cursor, +                if new_mouse_interaction != mouse_interaction { +                    window.set_cursor_icon(conversion::mouse_interaction( +                        new_mouse_interaction,                      )); -                    mouse_cursor = new_mouse_cursor; +                    mouse_interaction = new_mouse_interaction;                  }                  // TODO: Handle animations! diff --git a/winit/src/conversion.rs b/winit/src/conversion.rs index eaa26ace..b887db6e 100644 --- a/winit/src/conversion.rs +++ b/winit/src/conversion.rs @@ -3,11 +3,8 @@  //! [`winit`]: https://github.com/rust-windowing/winit  //! [`iced_native`]: https://github.com/hecrj/iced/tree/master/native  use crate::{ -    input::{ -        keyboard::{self, KeyCode, ModifiersState}, -        mouse, ButtonState, -    }, -    window, Event, Mode, MouseCursor, +    keyboard::{self, KeyCode, ModifiersState}, +    mouse, window, Event, Mode,  };  /// Converts a winit window event into an iced event. @@ -36,9 +33,15 @@ pub fn window_event(              }))          }          WindowEvent::MouseInput { button, state, .. } => { -            Some(Event::Mouse(mouse::Event::Input { -                button: mouse_button(*button), -                state: button_state(*state), +            let button = mouse_button(*button); + +            Some(Event::Mouse(match state { +                winit::event::ElementState::Pressed => { +                    mouse::Event::ButtonPressed(button) +                } +                winit::event::ElementState::Released => { +                    mouse::Event::ButtonReleased(button) +                }              }))          }          WindowEvent::MouseWheel { delta, .. } => match delta { @@ -70,10 +73,24 @@ pub fn window_event(                      ..                  },              .. -        } => Some(Event::Keyboard(keyboard::Event::Input { -            key_code: key_code(*virtual_keycode), -            state: button_state(*state), -            modifiers: modifiers_state(modifiers), +        } => Some(Event::Keyboard({ +            let key_code = key_code(*virtual_keycode); +            let modifiers = modifiers_state(modifiers); + +            match state { +                winit::event::ElementState::Pressed => { +                    keyboard::Event::KeyPressed { +                        key_code, +                        modifiers, +                    } +                } +                winit::event::ElementState::Released => { +                    keyboard::Event::KeyReleased { +                        key_code, +                        modifiers, +                    } +                } +            }          })),          WindowEvent::HoveredFile(path) => {              Some(Event::Window(window::Event::FileHovered(path.clone()))) @@ -108,19 +125,23 @@ pub fn fullscreen(  ///  /// [`winit`]: https://github.com/rust-windowing/winit  /// [`iced_native`]: https://github.com/hecrj/iced/tree/master/native -pub fn mouse_cursor(mouse_cursor: MouseCursor) -> winit::window::CursorIcon { -    match mouse_cursor { -        MouseCursor::OutOfBounds => winit::window::CursorIcon::Default, -        MouseCursor::Idle => winit::window::CursorIcon::Default, -        MouseCursor::Pointer => winit::window::CursorIcon::Hand, -        MouseCursor::Working => winit::window::CursorIcon::Progress, -        MouseCursor::Grab => winit::window::CursorIcon::Grab, -        MouseCursor::Grabbing => winit::window::CursorIcon::Grabbing, -        MouseCursor::Text => winit::window::CursorIcon::Text, -        MouseCursor::ResizingHorizontally => { +pub fn mouse_interaction( +    interaction: mouse::Interaction, +) -> winit::window::CursorIcon { +    use mouse::Interaction; + +    match interaction { +        Interaction::Idle => winit::window::CursorIcon::Default, +        Interaction::Pointer => winit::window::CursorIcon::Hand, +        Interaction::Working => winit::window::CursorIcon::Progress, +        Interaction::Grab => winit::window::CursorIcon::Grab, +        Interaction::Grabbing => winit::window::CursorIcon::Grabbing, +        Interaction::Crosshair => winit::window::CursorIcon::Crosshair, +        Interaction::Text => winit::window::CursorIcon::Text, +        Interaction::ResizingHorizontally => {              winit::window::CursorIcon::EwResize          } -        MouseCursor::ResizingVertically => winit::window::CursorIcon::NsResize, +        Interaction::ResizingVertically => winit::window::CursorIcon::NsResize,      }  } @@ -137,17 +158,6 @@ pub fn mouse_button(mouse_button: winit::event::MouseButton) -> mouse::Button {      }  } -/// Converts an `ElementState` from [`winit`] to an [`iced_native`] button state. -/// -/// [`winit`]: https://github.com/rust-windowing/winit -/// [`iced_native`]: https://github.com/hecrj/iced/tree/master/native -pub fn button_state(element_state: winit::event::ElementState) -> ButtonState { -    match element_state { -        winit::event::ElementState::Pressed => ButtonState::Pressed, -        winit::event::ElementState::Released => ButtonState::Released, -    } -} -  /// Converts some `ModifiersState` from [`winit`] to an [`iced_native`]  /// modifiers state.  /// | 
