1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
use super::Point;

use orbclient;

/// A key event (such as a pressed key)
#[derive(Copy, Clone, Debug)]
pub struct KeyEvent {
    /// The charecter of the key
    pub character: Option<char>,
    /// The scancode of the key
    pub scancode: u8,
}

impl KeyEvent {
    pub fn from_orbital_key_event(key_event: orbclient::KeyEvent) -> Self {
        let character = {
            if key_event.character != '\0' && key_event.character != '\x1B'
                && key_event.character != '\n'
            {
                Some(key_event.character)
            } else {
                None
            }
        };

        let scancode = {
            if key_event.character == '\n' {
                orbclient::K_ENTER
            } else {
                key_event.scancode
            }
        };

        KeyEvent {
            character,
            scancode,
        }
    }
}

#[derive(Copy, Clone, Debug)]
pub enum Event {
    Init,

    Mouse {
        point: Point,
        left_button: bool,
        middle_button: bool,
        right_button: bool,
    },

    KeyPressed(KeyEvent),

    KeyReleased(KeyEvent),

    Scroll {
        x: i32,
        y: i32,
    },

    Resize {
        width: u32,
        height: u32,
    },

    Unknown,
}