rscenes_raylib_connector/
rgestures.rs

1use raylib_ffi::{enums::Gesture, *};
2use std::{fmt::Debug, usize};
3
4#[derive(Clone, Copy, Debug, Default)]
5pub(crate) struct RgesturesImpl;
6
7/// Crate only methods
8impl RgesturesImpl {
9    pub fn __set_gestures_enabled(flags: impl Into<usize>) {
10        unsafe { SetGesturesEnabled(flags.into() as u32) }
11    }
12
13    pub fn __is_gesture_detected(gesture: impl Into<usize>) -> bool {
14        unsafe { IsGestureDetected(gesture.into() as u32) }
15    }
16
17    pub fn __get_gesture_detected() -> Vec<Gesture> {
18        unsafe {
19            let raw = GetGestureDetected() as usize;
20            let mut res: Vec<Gesture> = vec![];
21            for &gesture in [
22                Gesture::Tap,
23                Gesture::Doubletap,
24                Gesture::Hold,
25                Gesture::Drag,
26                Gesture::SwipeRight,
27                Gesture::SwipeLeft,
28                Gesture::SwipeUp,
29                Gesture::SwipeDown,
30                Gesture::PinchIn,
31                Gesture::PinchOut,
32            ]
33            .iter()
34            {
35                let code = gesture as usize;
36                if raw & code != 0 {
37                    res.push(gesture);
38                }
39            }
40            res
41        }
42    }
43
44    pub fn __get_gesture_hold_duration() -> f32 {
45        unsafe { GetGestureHoldDuration() }
46    }
47
48    pub fn __get_gesture_drag_vector() -> Vector2 {
49        unsafe { GetGestureDragVector() }
50    }
51
52    pub fn __get_gesture_drag_angle() -> f32 {
53        unsafe { GetGestureDragAngle() }
54    }
55
56    pub fn __get_gesture_pinch_vector() -> Vector2 {
57        unsafe { GetGesturePinchVector() }
58    }
59
60    pub fn __get_gesture_pinch_angle() -> f32 {
61        unsafe { GetGesturePinchAngle() }
62    }
63}
64
65/// Exported methods
66pub trait Rgestures: Debug {
67    // Enable a set of gestures using flags
68    fn set_gestures_enable(&self, flags: impl Into<usize>) {
69        RgesturesImpl::__set_gestures_enabled(flags)
70    }
71
72    /// Check whether a gesture have been detected
73    fn is_gesture_detected(&self, gesture: Gesture) -> bool {
74        RgesturesImpl::__is_gesture_detected(gesture as usize)
75    }
76
77    /// Get latest detected gesture
78    fn get_gesture_detected(&self) -> Vec<Gesture> {
79        RgesturesImpl::__get_gesture_detected()
80    }
81
82    /// Get gesture hold time in milliseconds
83    fn get_gesture_hold_duration(&self) -> f32 {
84        RgesturesImpl::__get_gesture_hold_duration()
85    }
86
87    /// Get gesture drag vector
88    fn get_gesture_drag_vector(&self) -> Vector2 {
89        RgesturesImpl::__get_gesture_drag_vector()
90    }
91
92    /// Get gesture drag angle
93    fn get_gesture_drag_angle(&self) -> f32 {
94        RgesturesImpl::__get_gesture_drag_angle()
95    }
96
97    /// Get gesture pinch delta
98    fn get_gesture_pinch_vector(&self) -> Vector2 {
99        RgesturesImpl::__get_gesture_pinch_vector()
100    }
101
102    /// Get gesture pinch angle
103    fn get_gesture_pinch_angle(&self) -> f32 {
104        RgesturesImpl::__get_gesture_pinch_angle()
105    }
106}