From 8e08d723ff7a853f2b10dc0f1408911d5801cea8 Mon Sep 17 00:00:00 2001 From: Ben Bridle Date: Wed, 11 Oct 2023 08:21:10 +1300 Subject: Rewrite phosphor This has been a long-awaited task, the code has been accumulating small changes for a while now. This commit consolidates all these changes in order to make the code more readable and maintainable for the future. Notable changes: - Remove the concept of a ProgramController - Remove all of the dead OpenGL stub code - Update winit to version 28.1, from 27.4 - Use softbuffer for writing pixels to the native display server --- src/lib.rs | 60 +++++++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 45 insertions(+), 15 deletions(-) (limited to 'src/lib.rs') diff --git a/src/lib.rs b/src/lib.rs index 75aaa1b..b610486 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,25 +1,16 @@ -mod keyboard_input; -mod press_state; -mod program_controller; -mod render_hint; -mod render_request; +mod render; mod window; mod window_controller; mod window_manager; -use window::Window; - -pub use keyboard_input::KeyboardInput; -pub use press_state::PressState; -pub use program_controller::{DefaultProgramController, ProgramController}; -pub use render_hint::RenderHint; -pub use render_request::RenderRequest; -pub use window_controller::WindowController; -pub use window_manager::WindowManager; +pub use render::*; +pub use window::*; +pub use window_controller::*; +pub use window_manager::*; pub use buffer::{Buffer, Colour}; pub use winit::{ - event::ModifiersState, + event::{ModifiersState, ElementState}, event::VirtualKeyCode as KeyCode, window::CursorIcon, }; @@ -27,3 +18,42 @@ pub use winit::{ pub type Point = geometry::Point; pub type Dimensions = geometry::Dimensions; pub type Rect = geometry::Rect; + +// ----------------------------------------------------------------------------- + +#[derive(Copy, Clone)] +pub struct KeyboardInput { + pub action: Action, + pub key: KeyCode, +} + +impl TryFrom for KeyboardInput { + type Error = (); + + fn try_from(input: winit::event::KeyboardInput) -> Result { + if let Some(key) = input.virtual_keycode { + Ok( Self { action: input.state.into(), key } ) + } else { + Err(()) + } + } +} + +// ----------------------------------------------------------------------------- + +#[derive(Clone, Copy, PartialEq, Debug)] +pub enum Action { Pressed, Released } + +impl Action { + pub fn is_pressed(&self) -> bool { *self == Self::Pressed } + pub fn is_released(&self) -> bool { *self == Self::Released } +} + +impl From for Action { + fn from(value: ElementState) -> Self { + match value { + ElementState::Pressed => Action::Pressed, + ElementState::Released => Action::Released, + } + } +} -- cgit v1.2.3-70-g09d2