Add ModifiersState to keyboard::Event::Input

This commit is contained in:
Héctor Ramón Jiménez 2019-12-06 04:01:48 +01:00
parent 31b0b7f580
commit 65cac922b3
6 changed files with 44 additions and 3 deletions

View File

@ -1,6 +1,8 @@
//! Build keyboard events. //! Build keyboard events.
mod event; mod event;
mod key_code; mod key_code;
mod modifiers_state;
pub use event::Event; pub use event::Event;
pub use key_code::KeyCode; pub use key_code::KeyCode;
pub use modifiers_state::ModifiersState;

View File

@ -1,13 +1,13 @@
use super::KeyCode; use super::{KeyCode, ModifiersState};
use crate::input::ButtonState; use crate::input::ButtonState;
#[derive(Debug, Clone, Copy, PartialEq)]
/// A keyboard event. /// A keyboard event.
/// ///
/// _**Note:** This type is largely incomplete! If you need to track /// _**Note:** This type is largely incomplete! If you need to track
/// additional events, feel free to [open an issue] and share your use case!_ /// additional events, feel free to [open an issue] and share your use case!_
/// ///
/// [open an issue]: https://github.com/hecrj/iced/issues /// [open an issue]: https://github.com/hecrj/iced/issues
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum Event { pub enum Event {
/// A keyboard key was pressed or released. /// A keyboard key was pressed or released.
Input { Input {
@ -16,6 +16,9 @@ pub enum Event {
/// The key identifier /// The key identifier
key_code: KeyCode, key_code: KeyCode,
/// The state of the modifier keys
modifiers: ModifiersState,
}, },
/// A unicode character was received. /// A unicode character was received.

View File

@ -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,
}

View File

@ -202,6 +202,7 @@ where
Event::Keyboard(keyboard::Event::Input { Event::Keyboard(keyboard::Event::Input {
key_code, key_code,
state: ButtonState::Pressed, state: ButtonState::Pressed,
modifiers,
}) if self.state.is_focused => match key_code { }) if self.state.is_focused => match key_code {
keyboard::KeyCode::Enter => { keyboard::KeyCode::Enter => {
if let Some(on_submit) = self.on_submit.clone() { if let Some(on_submit) = self.on_submit.clone() {

View File

@ -319,6 +319,7 @@ pub trait Application: Sized {
winit::event::KeyboardInput { winit::event::KeyboardInput {
virtual_keycode: Some(virtual_keycode), virtual_keycode: Some(virtual_keycode),
state, state,
modifiers,
.. ..
}, },
.. ..
@ -334,6 +335,7 @@ pub trait Application: Sized {
events.push(Event::Keyboard(keyboard::Event::Input { events.push(Event::Keyboard(keyboard::Event::Input {
key_code: conversion::key_code(virtual_keycode), key_code: conversion::key_code(virtual_keycode),
state: conversion::button_state(state), state: conversion::button_state(state),
modifiers: conversion::modifiers_state(modifiers),
})); }));
} }
WindowEvent::CloseRequested => { WindowEvent::CloseRequested => {

View File

@ -3,7 +3,10 @@
//! [`winit`]: https://github.com/rust-windowing/winit //! [`winit`]: https://github.com/rust-windowing/winit
//! [`iced_native`]: https://github.com/hecrj/iced/tree/master/native //! [`iced_native`]: https://github.com/hecrj/iced/tree/master/native
use crate::{ use crate::{
input::{keyboard::KeyCode, mouse, ButtonState}, input::{
keyboard::{KeyCode, ModifiersState},
mouse, ButtonState,
},
MouseCursor, 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. /// Convert a `VirtualKeyCode` from [`winit`] to an [`iced_native`] key code.
/// ///
/// [`winit`]: https://github.com/rust-windowing/winit /// [`winit`]: https://github.com/rust-windowing/winit