use std::time::Instant;
use halley_core::field::{NodeId, Vec2};
#[derive(Clone, Copy)]
pub(crate) enum DragAxisMode {
Free,
EdgePanNeg,
EdgePanPos,
}
impl DragAxisMode {
pub(crate) fn sign(self) -> f32 {
match self {
Self::Free => 0.0,
Self::EdgePanNeg => -1.0,
Self::EdgePanPos => 1.0,
}
}
}
#[derive(Clone, Copy)]
pub(crate) struct DragCtx {
pub(crate) node_id: NodeId,
pub(crate) allow_monitor_transfer: bool,
pub(crate) requires_drag_modifier: bool,
pub(crate) edge_pan_eligible: bool,
pub(crate) current_offset: Vec2,
pub(crate) center_latched: bool,
pub(crate) started_active: bool,
pub(crate) edge_pan_x: DragAxisMode,
pub(crate) edge_pan_y: DragAxisMode,
pub(crate) edge_pan_pressure: Vec2,
pub(crate) last_pointer_world: Vec2,
pub(crate) last_update_at: Instant,
pub(crate) release_velocity: Vec2,
}