From c6c8cabdaf03f90b1739be828cf140d8ddb92e65 Mon Sep 17 00:00:00 2001 From: FabianLars Date: Mon, 24 Feb 2020 18:03:42 +0100 Subject: moved cursor into own file moved click tracking as a new State struct to input::mouse made cursor field of text_input state private brought back cursor type(Index, Selection) representation with a state enum cleaned out some stuff (but not enough/all) TODO: Documentation (sigh) TODO: Editor struct TODO: some (hopefully) small improvements here and there --- native/src/input/mouse.rs | 64 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) (limited to 'native/src/input/mouse.rs') diff --git a/native/src/input/mouse.rs b/native/src/input/mouse.rs index 69dc6b4c..22c81e15 100644 --- a/native/src/input/mouse.rs +++ b/native/src/input/mouse.rs @@ -2,5 +2,69 @@ mod button; mod event; +use crate::Point; pub use button::Button; pub use event::{Event, ScrollDelta}; +use std::time::{Duration, SystemTime}; + +/// enum to track the type of the last click +#[derive(Debug, Copy, Clone)] +pub enum Interaction { + /// Last Click was a single click + Click(Point), + /// Last Click was a double click + DoubleClick(Point), + /// Last Click was a triple click + TripleClick(Point), +} + +/// Compiler bully +#[derive(Debug, Copy, Clone)] +pub struct State { + last_click: Option, + last_click_timestamp: Option, +} + +impl Default for State { + fn default() -> Self { + State { + last_click: None, + last_click_timestamp: None, + } + } +} + +impl State { + /// processes left click to check for double/triple clicks + /// return amount of repetitive mouse clicks + /// (1 -> double click, 2 -> triple click) + pub fn update(&mut self, position: Point) -> Interaction { + self.last_click_timestamp = Some(SystemTime::now()); + self.last_click = match self.last_click { + None => Some(Interaction::Click(position)), + Some(x) => match x { + Interaction::Click(p) if self.process_click(p, position) => { + Some(Interaction::DoubleClick(position)) + } + Interaction::DoubleClick(p) + if self.process_click(p, position) => + { + Some(Interaction::TripleClick(position)) + } + _ => Some(Interaction::Click(position)), + }, + }; + self.last_click.unwrap_or(Interaction::Click(position)) + } + + fn process_click(&self, old_position: Point, new_position: Point) -> bool { + old_position == new_position + && SystemTime::now() + .duration_since( + self.last_click_timestamp.unwrap_or(SystemTime::UNIX_EPOCH), + ) + .unwrap_or(Duration::from_secs(1)) + .as_millis() + <= 500 + } +} -- cgit From c47e30e960a403631b6dff7a522a775050d59f87 Mon Sep 17 00:00:00 2001 From: FabianLars Date: Mon, 24 Feb 2020 20:10:20 +0100 Subject: double click fixed --- native/src/input/mouse.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'native/src/input/mouse.rs') diff --git a/native/src/input/mouse.rs b/native/src/input/mouse.rs index 22c81e15..eaac52f3 100644 --- a/native/src/input/mouse.rs +++ b/native/src/input/mouse.rs @@ -39,7 +39,6 @@ impl State { /// return amount of repetitive mouse clicks /// (1 -> double click, 2 -> triple click) pub fn update(&mut self, position: Point) -> Interaction { - self.last_click_timestamp = Some(SystemTime::now()); self.last_click = match self.last_click { None => Some(Interaction::Click(position)), Some(x) => match x { @@ -54,6 +53,7 @@ impl State { _ => Some(Interaction::Click(position)), }, }; + self.last_click_timestamp = Some(SystemTime::now()); self.last_click.unwrap_or(Interaction::Click(position)) } -- cgit From 1ad83889be32b1bdb746e751aa620fad85b864b0 Mon Sep 17 00:00:00 2001 From: FabianLars Date: Wed, 26 Feb 2020 21:58:34 +0100 Subject: really small cleanup --- native/src/input/mouse.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'native/src/input/mouse.rs') diff --git a/native/src/input/mouse.rs b/native/src/input/mouse.rs index eaac52f3..ca3daeb1 100644 --- a/native/src/input/mouse.rs +++ b/native/src/input/mouse.rs @@ -36,8 +36,7 @@ impl Default for State { impl State { /// processes left click to check for double/triple clicks - /// return amount of repetitive mouse clicks - /// (1 -> double click, 2 -> triple click) + /// return amount of repetitive mouse clicks as enum pub fn update(&mut self, position: Point) -> Interaction { self.last_click = match self.last_click { None => Some(Interaction::Click(position)), -- cgit From 7cb1452d29ddfdcd29fd7ecc7c96a79ea2681fce Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Tue, 24 Mar 2020 19:03:17 +0100 Subject: Convert `mouse::State` into `mouse::Click` --- native/src/input/mouse.rs | 66 +++-------------------------------------------- 1 file changed, 3 insertions(+), 63 deletions(-) (limited to 'native/src/input/mouse.rs') diff --git a/native/src/input/mouse.rs b/native/src/input/mouse.rs index ca3daeb1..7198b233 100644 --- a/native/src/input/mouse.rs +++ b/native/src/input/mouse.rs @@ -2,68 +2,8 @@ mod button; mod event; -use crate::Point; +pub mod click; + pub use button::Button; +pub use click::Click; pub use event::{Event, ScrollDelta}; -use std::time::{Duration, SystemTime}; - -/// enum to track the type of the last click -#[derive(Debug, Copy, Clone)] -pub enum Interaction { - /// Last Click was a single click - Click(Point), - /// Last Click was a double click - DoubleClick(Point), - /// Last Click was a triple click - TripleClick(Point), -} - -/// Compiler bully -#[derive(Debug, Copy, Clone)] -pub struct State { - last_click: Option, - last_click_timestamp: Option, -} - -impl Default for State { - fn default() -> Self { - State { - last_click: None, - last_click_timestamp: None, - } - } -} - -impl State { - /// processes left click to check for double/triple clicks - /// return amount of repetitive mouse clicks as enum - pub fn update(&mut self, position: Point) -> Interaction { - self.last_click = match self.last_click { - None => Some(Interaction::Click(position)), - Some(x) => match x { - Interaction::Click(p) if self.process_click(p, position) => { - Some(Interaction::DoubleClick(position)) - } - Interaction::DoubleClick(p) - if self.process_click(p, position) => - { - Some(Interaction::TripleClick(position)) - } - _ => Some(Interaction::Click(position)), - }, - }; - self.last_click_timestamp = Some(SystemTime::now()); - self.last_click.unwrap_or(Interaction::Click(position)) - } - - fn process_click(&self, old_position: Point, new_position: Point) -> bool { - old_position == new_position - && SystemTime::now() - .duration_since( - self.last_click_timestamp.unwrap_or(SystemTime::UNIX_EPOCH), - ) - .unwrap_or(Duration::from_secs(1)) - .as_millis() - <= 500 - } -} -- cgit