Skip to main content

gdk/
event_key.rs

1// Take a look at the license at the top of the repository in the LICENSE file.
2
3use glib::translate::*;
4
5/// Describes a key press or key release event.
6#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
7pub struct EventKey(crate::Event);
8
9event_wrapper!(EventKey, GdkEventKey);
10event_subtype!(EventKey, ffi::GDK_KEY_PRESS | ffi::GDK_KEY_RELEASE);
11
12impl EventKey {
13    #[doc(alias = "get_time")]
14    pub fn time(&self) -> u32 {
15        self.as_ref().time
16    }
17
18    #[doc(alias = "get_state")]
19    pub fn state(&self) -> crate::ModifierType {
20        unsafe { from_glib(self.as_ref().state) }
21    }
22
23    #[doc(alias = "get_keyval")]
24    pub fn keyval(&self) -> crate::keys::Key {
25        unsafe { from_glib(self.as_ref().keyval) }
26    }
27
28    #[doc(alias = "get_length")]
29    pub fn length(&self) -> u32 {
30        let length = self.as_ref().length;
31        assert!(length >= 0, "Unexpected negative value");
32        length as u32
33    }
34
35    #[doc(alias = "get_hardware_keycode")]
36    pub fn hardware_keycode(&self) -> u16 {
37        self.as_ref().hardware_keycode
38    }
39
40    #[doc(alias = "get_group")]
41    pub fn group(&self) -> u8 {
42        self.as_ref().group
43    }
44
45    #[doc(alias = "get_is_modifier")]
46    pub fn is_modifier(&self) -> bool {
47        self.as_ref().is_modifier & 1 != 0
48    }
49}