use egui::Pos2;
use web_time::Instant;
#[derive(Debug, Clone)]
pub struct KineticScrollState {
pub velocity: f32,
pub last_pos: Option<Pos2>,
pub last_time: Option<Instant>,
pub is_active: bool,
pub anim_last_time: Option<Instant>,
}
impl Default for KineticScrollState {
fn default() -> Self {
Self::new()
}
}
impl KineticScrollState {
pub fn new() -> Self {
Self {
velocity: 0.0,
last_pos: None,
last_time: None,
is_active: false,
anim_last_time: None,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum BoxZoomMode {
Zoom,
Measure,
}
#[derive(Debug, Clone)]
pub struct BoxZoomState {
pub active: bool,
pub start_pos: Option<Pos2>,
pub curr_pos: Option<Pos2>,
pub mode: BoxZoomMode,
}
impl Default for BoxZoomState {
fn default() -> Self {
Self::new()
}
}
impl BoxZoomState {
pub fn new() -> Self {
Self {
active: false,
start_pos: None,
curr_pos: None,
mode: BoxZoomMode::Zoom,
}
}
pub fn reset(&mut self) {
self.active = false;
self.start_pos = None;
self.curr_pos = None;
}
}
#[derive(Debug, Clone)]
pub struct ElasticBounceState {
pub velocity: f32,
pub active: bool,
pub last_time: Option<Instant>,
}
impl Default for ElasticBounceState {
fn default() -> Self {
Self::new()
}
}
impl ElasticBounceState {
pub fn new() -> Self {
Self {
velocity: 0.0,
active: false,
last_time: None,
}
}
}