Add ModifiersState
to keyboard::Event::Input
This commit is contained in:
parent
31b0b7f580
commit
65cac922b3
@ -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;
|
||||||
|
@ -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.
|
||||||
|
15
native/src/input/keyboard/modifiers_state.rs
Normal file
15
native/src/input/keyboard/modifiers_state.rs
Normal 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,
|
||||||
|
}
|
@ -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() {
|
||||||
|
@ -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 => {
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user