| 1 | use crate::event::KeyEvent; |
| 2 | use crate::keyboard::Key; |
| 3 | |
| 4 | /// Additional methods for the `KeyEvent` which cannot be implemented on all |
| 5 | /// platforms. |
| 6 | pub trait KeyEventExtModifierSupplement { |
| 7 | /// Identical to `KeyEvent::text` but this is affected by <kbd>Ctrl</kbd>. |
| 8 | /// |
| 9 | /// For example, pressing <kbd>Ctrl</kbd>+<kbd>a</kbd> produces `Some("\x01")`. |
| 10 | fn text_with_all_modifiers(&self) -> Option<&str>; |
| 11 | |
| 12 | /// This value ignores all modifiers including, |
| 13 | /// but not limited to <kbd>Shift</kbd>, <kbd>Caps Lock</kbd>, |
| 14 | /// and <kbd>Ctrl</kbd>. In most cases this means that the |
| 15 | /// unicode character in the resulting string is lowercase. |
| 16 | /// |
| 17 | /// This is useful for key-bindings / shortcut key combinations. |
| 18 | /// |
| 19 | /// In case `logical_key` reports `Dead`, this will still report the |
| 20 | /// key as `Character` according to the current keyboard layout. This value |
| 21 | /// cannot be `Dead`. |
| 22 | fn key_without_modifiers(&self) -> Key; |
| 23 | } |
| 24 | |
| 25 | impl KeyEventExtModifierSupplement for KeyEvent { |
| 26 | #[inline ] |
| 27 | fn text_with_all_modifiers(&self) -> Option<&str> { |
| 28 | self.platform_specific.text_with_all_modifiers.as_ref().map(|s: &SmolStr| s.as_str()) |
| 29 | } |
| 30 | |
| 31 | #[inline ] |
| 32 | fn key_without_modifiers(&self) -> Key { |
| 33 | self.platform_specific.key_without_modifiers.clone() |
| 34 | } |
| 35 | } |
| 36 | |