use std::fmt;
use incular_core::{PointerDeviceKind, PointerPhase, PointerSampleMetadata};
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct NativePointerSample {
pub device: Option<u64>,
pub kind: PointerDeviceKind,
pub sample: PointerSampleMetadata,
pub in_contact: Option<bool>,
}
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct PointerMetadata {
pub pointer: u64,
pub device: u64,
pub kind: PointerDeviceKind,
pub buttons: u32,
pub button: Option<u32>,
pub sample: PointerSampleMetadata,
pub phase: PointerPhase,
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub enum CursorGrabMode {
#[default]
None,
Confined,
Locked,
}
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct LogicalWindowPosition {
x: f64,
y: f64,
}
impl LogicalWindowPosition {
pub fn new(x: f64, y: f64) -> Result<Self, LogicalWindowPositionError> {
if !x.is_finite() || !y.is_finite() {
return Err(LogicalWindowPositionError);
}
Ok(Self { x, y })
}
#[must_use]
pub const fn x(self) -> f64 {
self.x
}
#[must_use]
pub const fn y(self) -> f64 {
self.y
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub struct LogicalWindowPositionError;
impl fmt::Display for LogicalWindowPositionError {
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
formatter.write_str("logical window position must contain finite coordinates")
}
}
impl std::error::Error for LogicalWindowPositionError {}