Add event struct (#47)

This commit is contained in:
TrueDoctor 2021-03-27 20:06:10 +01:00 committed by GitHub
parent 0083a2f788
commit 1b1e641aa8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 72 additions and 2 deletions

View file

@ -14,7 +14,7 @@ use tools::ToolState;
use workspace::Workspace;
// TODO: serialize with serde to save the current editor state
struct Editor {
pub struct Editor {
tools: ToolState,
workspace: Workspace,
}

View file

@ -0,0 +1,70 @@
use crate::tools::ToolType;
#[derive(Debug, Clone)]
#[repr(C)]
pub enum Event {
SelectTool(ToolType),
ModifierKeyDown(ModKey),
ModifierKeyUp(ModKey),
MouseMovement(Trace),
Click(MouseState),
KeyPress(Key),
}
#[derive(Debug, Clone)]
struct Trace(Vec<MouseState>);
#[derive(Debug, Clone)]
struct MouseState {
x: u32,
y: u32,
mod_keys: ModKeys,
mouse_keys: MouseKeys,
}
#[derive(Debug, Clone)]
enum Key {
None,
}
type ModKeysStorage = u8;
type MouseKeysStorage = u8;
#[derive(Debug, Clone, Copy)]
#[repr(transparent)]
struct ModKeys(ModKeysStorage);
impl ModKeys {
pub fn get_key(&self, key: ModKey) -> bool {
key as ModKeysStorage & self.0 > 0
}
pub fn set_key(&mut self, key: ModKey) {
self.0 |= key as ModKeysStorage
}
}
#[derive(Debug, Clone, Copy)]
#[repr(transparent)]
struct MouseKeys(u8);
impl MouseKeys {
pub fn get_key(&self, key: MouseKey) -> bool {
key as ModKeysStorage & self.0 > 0
}
pub fn set_key(&mut self, key: MouseKey) {
self.0 |= key as MouseKeysStorage
}
}
#[repr(u8)]
#[derive(Debug, Clone)]
enum ModKey {
Control = 1,
Shift = 2,
Alt = 4,
}
#[repr(u8)]
#[derive(Debug, Clone)]
enum MouseKey {
LeftMouse = 1,
RightMouse = 2,
MiddleMouse = 4,
}

View file

@ -1 +1 @@
pub mod events;