Hagia
log in
morj / wzmach
overview
files
history
wiki
Viewing at
use crate::common::{Direction, PinchDirection, RotateDirection};
use crate::gesture_event::trigger as gesture;

use serde::Deserialize;

#[derive(PartialEq, Debug, Clone, Copy, Deserialize)]
pub enum Trigger {
Swipe {
fingers: u32,
direction: Direction,
repeated: bool,
},
Shear {
fingers: u32,
direction: Direction,
repeated: bool,
},
Pinch {
fingers: u32,
direction: PinchDirection,
repeated: bool,
},
Rotate {
fingers: u32,
direction: RotateDirection,
repeated: bool,
},
Hold {
fingers: u32,
},
}

#[derive(PartialEq, Debug, Clone, Copy, Deserialize)]
struct Cardinal {
fingers: u32,
direction: Direction,
repeated: bool,
}

#[derive(PartialEq, Debug, Clone, Copy, Deserialize)]
struct Pinch {
fingers: u32,
direction: PinchDirection,
repeated: bool,
}

#[derive(PartialEq, Debug, Clone, Copy, Deserialize)]
struct Hold {
fingers: u32,
}

impl Trigger {
pub fn make(
self,
swipe_distance: u32,
shear_distance: u32,
pinch_distance: f64,
rotate_distance: f64,
) -> gesture::Trigger {
match self {
Trigger::Swipe {
fingers,
direction,
repeated,
} => gesture::Trigger::Swipe(gesture::CardinalTrigger {
fingers: fingers.try_into().expect("Too many fingers"),
direction,
distance: swipe_distance.try_into().expect("Incorrect distance"),
repeated,
}),
Trigger::Shear {
fingers,
direction,
repeated,
} => gesture::Trigger::Shear(gesture::CardinalTrigger {
fingers: fingers.try_into().expect("Too many fingers"),
direction,
distance: shear_distance.try_into().expect("Incorrect distance"),
repeated,
}),
Trigger::Pinch {
fingers,
direction,
repeated,
} => gesture::Trigger::Pinch(gesture::PinchTrigger {
fingers: fingers.try_into().expect("Too many fingers"),
direction,
scale: pinch_distance,
repeated,
}),
Trigger::Rotate {
fingers,
direction,
repeated,
} => gesture::Trigger::Rotate(gesture::RotateTrigger {
fingers: fingers.try_into().expect("Too many fingers"),
direction,
distance: rotate_distance,
repeated,
}),
Trigger::Hold { fingers } => gesture::Trigger::Hold(gesture::HoldTrigger {
fingers: fingers.try_into().expect("Too many fingers"),
time: 1, // Time not implemented currently
}),
}
}
}