summaryrefslogtreecommitdiffstats
path: root/native/src/input/mouse.rs
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-03-24 19:03:17 +0100
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-03-24 19:03:17 +0100
commit7cb1452d29ddfdcd29fd7ecc7c96a79ea2681fce (patch)
tree931f8d02142c1763f51735afac6b3e94b7559d01 /native/src/input/mouse.rs
parentb632dce0daffece3d1d7c7ca9d01f9feb79e2c4c (diff)
downloadiced-7cb1452d29ddfdcd29fd7ecc7c96a79ea2681fce.tar.gz
iced-7cb1452d29ddfdcd29fd7ecc7c96a79ea2681fce.tar.bz2
iced-7cb1452d29ddfdcd29fd7ecc7c96a79ea2681fce.zip
Convert `mouse::State` into `mouse::Click`
Diffstat (limited to 'native/src/input/mouse.rs')
-rw-r--r--native/src/input/mouse.rs66
1 files changed, 3 insertions, 63 deletions
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<Interaction>,
- last_click_timestamp: Option<SystemTime>,
-}
-
-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
- }
-}