use crate::geometry::Point;
use crate::platform::Modifiers;
pub use crate::platform::set_pointer_modifiers;
use std::cell::Cell;
#[derive(Clone, Copy, Debug, Default, PartialEq)]
pub struct PointerInfo {
pub position: Point,
pub drag_origin: Option<Point>,
pub modifiers: Modifiers,
}
thread_local! {
static POSITION: Cell<(Point, Option<Point>)> =
const { Cell::new((Point::new(0.0, 0.0), None)) };
}
pub fn pointer() -> PointerInfo {
let (position, drag_origin) = POSITION.with(Cell::get);
PointerInfo {
position,
drag_origin,
modifiers: crate::platform::pointer_modifiers(),
}
}
pub(crate) fn set_pointer_position(position: Point, drag_origin: Option<Point>) {
POSITION.with(|p| p.set((position, drag_origin)));
}