Add ModifiersState
to keyboard::Event::Input
This commit is contained in:
parent
31b0b7f580
commit
65cac922b3
@ -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;
|
||||
|
@ -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.
|
||||
|
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 {
|
||||
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() {
|
||||
|
@ -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 => {
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user