gooey/interface/view/input/
mod.rs1use std;
2use bitflags::bitflags;
3use derive_more::{From, TryInto};
4use serde::{Deserialize, Serialize};
5
6pub mod button;
7pub use self::button::Button;
8
9type ModifiersPrimitiveType = u8;
10
11#[derive(Clone, Debug, PartialEq, From, TryInto)]
13pub enum Input {
14 Axis (Axis),
15 Button (Button, button::State),
16 Motion (Motion),
17 Pointer (Pointer),
18 System (System),
19 Text (Text),
20 Wheel (Wheel)
21}
22
23#[derive(Clone, Debug, Eq, PartialEq)]
25pub enum System {
26 Close,
27 CursorEntered,
28 CursorLeft,
29 Destroyed,
30 Focused (bool),
31 InputMethod (),
32 Occluded (bool),
33 Redraw,
34 Resized {
35 width : u32,
36 height : u32
37 },
38 }
41
42#[derive(Clone, Debug, Eq, PartialEq)]
49pub struct Axis {
50 pub axis : u32,
51 pub value : i32
52}
53
54#[derive(Clone, Debug, Eq, PartialEq)]
58pub struct Motion (pub i32, pub i32);
59
60#[derive(Clone, Debug, Default, PartialEq)]
61pub struct Pointer {
62 pub position_horizontal : f32,
63 pub position_vertical : f32,
64 pub modifiers : Modifiers
65}
66
67#[derive(Clone, Debug, Eq, PartialEq)]
68pub enum Text {
69 Char (char),
70 String (String)
71}
72
73#[derive(Clone, Debug, Eq, PartialEq)]
75pub struct Wheel {
76 pub delta : (i32, i32),
77 pub modifiers : Modifiers
78 }
80
81bitflags! {
82 #[derive(Clone, Copy, Debug, Default, Eq, Ord, PartialEq, PartialOrd,
83 Deserialize, Serialize)]
84 pub struct Modifiers : ModifiersPrimitiveType {
85 const SHIFT = 0b0_0001;
86 const CTRL = 0b0_0010;
87 const ALT = 0b0_0100;
88 const SUPER = 0b0_1000;
89 const ANY = 0b1_0000;
90 }
91}
92
93impl std::string::ToString for Modifiers {
94 fn to_string (&self) -> String {
95 let mut s = String::new();
96 if self.contains (Modifiers::SHIFT) {
97 s.push_str ("+Shift")
98 }
99 if self.contains (Modifiers::CTRL) {
100 s.push_str ("+Ctrl")
101 }
102 if self.contains (Modifiers::ALT) {
103 s.push_str ("+Alt")
104 }
105 if self.contains (Modifiers::SUPER) {
106 s.push_str ("+Super")
107 }
108 if self.contains (Modifiers::ANY) {
109 s.push_str ("+Any")
110 }
111 s
112 }
113}