max time window for double click

This commit is contained in:
FabianLars 2020-02-23 01:23:57 +01:00
parent f72b1f8c45
commit 883843a72d

View File

@ -10,7 +10,10 @@ use crate::{
Rectangle, Size, Widget,
};
use std::u32;
use std::{
time::{Duration, SystemTime},
u32,
};
use unicode_segmentation::UnicodeSegmentation;
/// A field that can be filled with text.
@ -215,6 +218,15 @@ where
.last_position
.unwrap_or(Point { x: 0.0, y: 0.0 })
&& self.state.click_count < 2
&& SystemTime::now()
.duration_since(
self.state
.last_timestamp
.unwrap_or(SystemTime::now()),
)
.unwrap_or(Duration::from_secs(1))
.as_millis()
<= 500
{
self.state.click_count += 1;
@ -236,6 +248,9 @@ where
end: self.value.len(),
}
}
self.state.last_timestamp =
Option::from(SystemTime::now());
} else if target > 0.0 {
let value = if self.is_secure {
self.value.secure()
@ -266,6 +281,8 @@ where
self.state.click_count = 0;
self.state.last_position =
Option::from(cursor_position);
self.state.last_timestamp =
Option::from(SystemTime::now());
} else {
self.state.click_count = 0;
self.state.last_position =
@ -637,6 +654,7 @@ pub struct State {
/// Double- / Tripleclick
click_count: usize,
last_position: Option<Point>,
last_timestamp: Option<std::time::SystemTime>,
// TODO: Add stateful horizontal scrolling offset
}
@ -724,6 +742,7 @@ impl State {
cursor_position: Cursor::Index(usize::MAX),
click_count: 0,
last_position: None,
last_timestamp: None,
}
}