1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
//! Contains types to define keyboard related events. //! //! The naming and conventions follow the UI Events specification //! but this crate should be useful for anyone implementing keyboard //! input in a cross-platform way. pub use code::Code; pub use key::Key; pub use location::Location; pub use modifiers::Modifiers; pub use shortcuts::ShortcutMatcher; #[macro_use] extern crate bitflags; #[cfg(feature = "serde")] #[macro_use] extern crate serde; mod code; mod key; mod location; mod modifiers; mod shortcuts; /// Describes the state the key is in. #[derive(Copy, Clone, Debug, Eq, PartialEq)] #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub enum KeyState { /// Key is pressed. /// /// In JS: "keydown" event firing. Down, /// Key is released. /// /// In JS: "keyup event". Up, } /// Keyboard events are issued for all pressed and released keys. #[derive(Clone, Debug, Eq, PartialEq)] #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct KeyboardEvent { /// Whether the key is pressed or released. pub state: KeyState, /// Logical key value. pub key: Key, /// Physical key position. pub code: Code, /// Location for keys with multiple instances on common keyboards. pub location: Location, /// Flags for pressed modifier keys. pub modifiers: Modifiers, /// True if the key is currently auto-repeated. pub repeat: bool, /// Events with this flag should be ignored in a text editor /// and instead composition events should be used. pub is_composing: bool, } /// Describes the state of a composition session. #[derive(Copy, Clone, Debug, Eq, PartialEq)] #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub enum CompositionState { /// In JS: "compositionstart" event. Start, /// In JS: "compositionupdate" event. Update, /// In JS: "compositionend" event. /// /// In a text editor in this state the data /// should be added to the input. End, } /// Event to expose input methods to program logic. /// /// Provides information about entered sequences from /// dead key combinations and IMEs. /// /// A composition session is always started by a "compositionstart" /// event followed my zero or more "compositionupdate" events /// and terminated by a single "compositionend" event. #[derive(Clone, Debug, Eq, PartialEq)] #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct CompositionEvent { /// Describes the event kind. pub state: CompositionState, /// Current composition data. May be empty. pub data: String, }