diff options
author | 2019-12-06 04:01:48 +0100 | |
---|---|---|
committer | 2019-12-06 04:01:48 +0100 | |
commit | 65cac922b3ff6cf289319b9c12aab68aabea844a (patch) | |
tree | 245967a3368ac865c59855c8d4434ef76e516884 | |
parent | 31b0b7f58071b42224fd56e9bb13ad67e7ffeff0 (diff) | |
download | iced-65cac922b3ff6cf289319b9c12aab68aabea844a.tar.gz iced-65cac922b3ff6cf289319b9c12aab68aabea844a.tar.bz2 iced-65cac922b3ff6cf289319b9c12aab68aabea844a.zip |
Add `ModifiersState` to `keyboard::Event::Input`
-rw-r--r-- | native/src/input/keyboard.rs | 2 | ||||
-rw-r--r-- | native/src/input/keyboard/event.rs | 7 | ||||
-rw-r--r-- | native/src/input/keyboard/modifiers_state.rs | 15 | ||||
-rw-r--r-- | native/src/widget/text_input.rs | 1 | ||||
-rw-r--r-- | winit/src/application.rs | 2 | ||||
-rw-r--r-- | winit/src/conversion.rs | 20 |
6 files changed, 44 insertions, 3 deletions
diff --git a/native/src/input/keyboard.rs b/native/src/input/keyboard.rs index 57c24484..432e75ba 100644 --- a/native/src/input/keyboard.rs +++ b/native/src/input/keyboard.rs @@ -1,6 +1,8 @@ //! Build keyboard events. mod event; mod key_code; +mod modifiers_state; pub use event::Event; pub use key_code::KeyCode; +pub use modifiers_state::ModifiersState; diff --git a/native/src/input/keyboard/event.rs b/native/src/input/keyboard/event.rs index 8118f112..862f30c4 100644 --- a/native/src/input/keyboard/event.rs +++ b/native/src/input/keyboard/event.rs @@ -1,13 +1,13 @@ -use super::KeyCode; +use super::{KeyCode, ModifiersState}; use crate::input::ButtonState; -#[derive(Debug, Clone, Copy, PartialEq)] /// A keyboard event. /// /// _**Note:** This type is largely incomplete! If you need to track /// additional events, feel free to [open an issue] and share your use case!_ /// /// [open an issue]: https://github.com/hecrj/iced/issues +#[derive(Debug, Clone, Copy, PartialEq)] pub enum Event { /// A keyboard key was pressed or released. Input { @@ -16,6 +16,9 @@ pub enum Event { /// The key identifier key_code: KeyCode, + + /// The state of the modifier keys + modifiers: ModifiersState, }, /// A unicode character was received. diff --git a/native/src/input/keyboard/modifiers_state.rs b/native/src/input/keyboard/modifiers_state.rs new file mode 100644 index 00000000..4e3794b3 --- /dev/null +++ b/native/src/input/keyboard/modifiers_state.rs @@ -0,0 +1,15 @@ +/// The current state of the keyboard modifiers. +#[derive(Debug, Clone, Copy, PartialEq)] +pub struct ModifiersState { + /// Whether a shift key is pressed + pub shift: bool, + + /// Whether a control key is pressed + pub control: bool, + + /// Whether an alt key is pressed + pub alt: bool, + + /// Whether a logo key is pressed (e.g. windows key, command key...) + pub logo: bool, +} diff --git a/native/src/widget/text_input.rs b/native/src/widget/text_input.rs index dae772bc..cfa8b0f4 100644 --- a/native/src/widget/text_input.rs +++ b/native/src/widget/text_input.rs @@ -202,6 +202,7 @@ where Event::Keyboard(keyboard::Event::Input { key_code, state: ButtonState::Pressed, + modifiers, }) if self.state.is_focused => match key_code { keyboard::KeyCode::Enter => { if let Some(on_submit) = self.on_submit.clone() { diff --git a/winit/src/application.rs b/winit/src/application.rs index 3772a667..85d06d9b 100644 --- a/winit/src/application.rs +++ b/winit/src/application.rs @@ -319,6 +319,7 @@ pub trait Application: Sized { winit::event::KeyboardInput { virtual_keycode: Some(virtual_keycode), state, + modifiers, .. }, .. @@ -334,6 +335,7 @@ pub trait Application: Sized { events.push(Event::Keyboard(keyboard::Event::Input { key_code: conversion::key_code(virtual_keycode), state: conversion::button_state(state), + modifiers: conversion::modifiers_state(modifiers), })); } WindowEvent::CloseRequested => { diff --git a/winit/src/conversion.rs b/winit/src/conversion.rs index 03d583fb..0537d853 100644 --- a/winit/src/conversion.rs +++ b/winit/src/conversion.rs @@ -3,7 +3,10 @@ //! [`winit`]: https://github.com/rust-windowing/winit //! [`iced_native`]: https://github.com/hecrj/iced/tree/master/native use crate::{ - input::{keyboard::KeyCode, mouse, ButtonState}, + input::{ + keyboard::{KeyCode, ModifiersState}, + mouse, ButtonState, + }, MouseCursor, }; @@ -47,6 +50,21 @@ pub fn button_state(element_state: winit::event::ElementState) -> ButtonState { } } +/// Convert some `ModifiersState` from [`winit`] to an [`iced_native`] modifiers state. +/// +/// [`winit`]: https://github.com/rust-windowing/winit +/// [`iced_native`]: https://github.com/hecrj/iced/tree/master/native +pub fn modifiers_state( + modifiers: winit::event::ModifiersState, +) -> ModifiersState { + ModifiersState { + shift: modifiers.shift, + control: modifiers.ctrl, + alt: modifiers.alt, + logo: modifiers.logo, + } +} + /// Convert a `VirtualKeyCode` from [`winit`] to an [`iced_native`] key code. /// /// [`winit`]: https://github.com/rust-windowing/winit |