From 1b1e641aa8ea1ca62f15ae79017e1865c306e4cf Mon Sep 17 00:00:00 2001 From: TrueDoctor Date: Sat, 27 Mar 2021 20:06:10 +0100 Subject: [PATCH] Add event struct (#47) --- core/editor/src/lib.rs | 2 +- core/editor/src/scheduler/events.rs | 70 +++++++++++++++++++++++++++++ core/editor/src/scheduler/mod.rs | 2 +- 3 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 core/editor/src/scheduler/events.rs diff --git a/core/editor/src/lib.rs b/core/editor/src/lib.rs index 3baa4fffb..9285d8836 100644 --- a/core/editor/src/lib.rs +++ b/core/editor/src/lib.rs @@ -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, } diff --git a/core/editor/src/scheduler/events.rs b/core/editor/src/scheduler/events.rs new file mode 100644 index 000000000..e4eff7710 --- /dev/null +++ b/core/editor/src/scheduler/events.rs @@ -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); +#[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, +} diff --git a/core/editor/src/scheduler/mod.rs b/core/editor/src/scheduler/mod.rs index 8b1378917..a9970c28f 100644 --- a/core/editor/src/scheduler/mod.rs +++ b/core/editor/src/scheduler/mod.rs @@ -1 +1 @@ - +pub mod events;