1use crate::cglue::*;
4use crate::prelude::v1::Result;
5
6#[cfg_attr(feature = "plugins", cglue_trait)]
7#[int_result]
8pub trait OsKeyboard: Send {
9 #[wrap_with_obj(crate::os::keyboard::Keyboard)]
10 type KeyboardType<'a>: crate::os::keyboard::Keyboard + 'a
11 where
12 Self: 'a;
13 #[wrap_with_group(crate::os::keyboard::IntoKeyboard)]
14 type IntoKeyboardType: crate::os::keyboard::Keyboard + Clone + 'static;
15
16 fn keyboard(&mut self) -> Result<Self::KeyboardType<'_>>;
17 fn into_keyboard(self) -> Result<Self::IntoKeyboardType>;
18}
19
20#[cfg(feature = "plugins")]
21cglue_trait_group!(IntoKeyboard, { Keyboard, Clone }, {});
22
23#[cfg_attr(feature = "plugins", cglue_trait)]
24#[int_result]
25#[cglue_forward]
26pub trait Keyboard {
27 #[wrap_with_obj(crate::os::keyboard::KeyboardState)]
28 type KeyboardStateType: crate::os::keyboard::KeyboardState;
29
30 fn is_down(&mut self, vk: i32) -> bool;
31 fn set_down(&mut self, vk: i32, down: bool);
32
33 fn state(&mut self) -> Result<Self::KeyboardStateType>;
34}
35
36#[cfg_attr(feature = "plugins", cglue_trait)]
37#[int_result]
38#[cglue_forward]
39pub trait KeyboardState {
40 fn is_down(&self, vk: i32) -> bool;
41}