rich_sdl2_rust/event/keyboard/
key_mod.rs

1//! Definitions of key modification codes.
2
3use bitflags::bitflags;
4
5use crate::bind;
6
7bitflags! {
8    /// A key modification flag.
9    #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
10    pub struct KeyMod : u16 {
11        /// No mod key pressed.
12        const NONE = bind::KMOD_NONE as u16;
13        /// Left shift pressed.
14        const LSHIFT = bind::KMOD_LSHIFT as u16;
15        /// Right shift pressed.
16        const RSHIFT = bind::KMOD_RSHIFT as u16;
17        /// Left control pressed.
18        const LCTRL = bind::KMOD_LCTRL as u16;
19        /// Right control pressed.
20        const RCTRL = bind::KMOD_RCTRL as u16;
21        /// Left alt pressed.
22        const LALT = bind::KMOD_LALT as u16;
23        /// Right alt pressed.
24        const RALT = bind::KMOD_RALT as u16;
25        /// Left meta pressed.
26        const LGUI = bind::KMOD_LGUI as u16;
27        /// Right meta pressed.
28        const RGUI = bind::KMOD_RGUI as u16;
29        /// Num lock pressed.
30        const NUM = bind::KMOD_NUM as u16;
31        /// Caps lock pressed.
32        const CAPS = bind::KMOD_CAPS as u16;
33        /// Alt graphic pressed.
34        const MODE = bind::KMOD_MODE as u16;
35        /// Left or right control pressed.
36        const CTRL = bind::KMOD_CTRL as u16;
37        /// Left or right shift pressed.
38        const SHIFT = bind::KMOD_SHIFT as u16;
39        /// Left or right alt pressed.
40        const ALT = bind::KMOD_ALT as u16;
41        /// Left or right meta pressed.
42        const GUI = bind::KMOD_GUI as u16;
43    }
44}
45
46impl KeyMod {
47    /// Returns the current modification status on the keyboard.
48    #[must_use]
49    pub fn current() -> Self {
50        Self::from_bits(unsafe { bind::SDL_GetModState() } as u16).unwrap()
51    }
52}