1 #ifndef EFL_GESTURE_PRIVATE_H_ 2 #define EFL_GESTURE_PRIVATE_H_ 3 4 #include "evas_common_private.h" 5 #include "evas_private.h" 6 7 #include "efl_canvas_gesture_events.eo.h" 8 9 #include <Ecore.h> 10 11 /* milliseconds */ 12 #define TAP_TOUCH_TIME_THRESHOLD (0.1 * 1000) 13 14 int _direction_get(Evas_Coord xx1, Evas_Coord xx2); 15 Eina_Value *_recognizer_config_get(const Eo *obj, const char *name); 16 Eina_Bool _event_multi_touch_get(const Efl_Canvas_Gesture_Touch *event); 17 18 double _angle_get(Evas_Coord xx1, Evas_Coord yy1, Evas_Coord xx2, Evas_Coord yy2); 19 Evas_Coord _finger_gap_length_get(Evas_Coord xx1, Evas_Coord yy1, Evas_Coord xx2, Evas_Coord yy2, Evas_Coord *x, Evas_Coord *y); 20 21 typedef struct _Efl_Canvas_Gesture_Manager_Data Efl_Canvas_Gesture_Manager_Data; 22 typedef struct _Efl_Canvas_Gesture_Recognizer_Data Efl_Canvas_Gesture_Recognizer_Data; 23 typedef struct _Efl_Canvas_Gesture_Recognizer_Tap_Data Efl_Canvas_Gesture_Recognizer_Tap_Data; 24 typedef struct _Efl_Canvas_Gesture_Recognizer_Long_Press_Data Efl_Canvas_Gesture_Recognizer_Long_Press_Data; 25 typedef struct _Efl_Canvas_Gesture_Recognizer_Double_Tap_Data Efl_Canvas_Gesture_Recognizer_Double_Tap_Data; 26 typedef struct _Efl_Canvas_Gesture_Recognizer_Triple_Tap_Data Efl_Canvas_Gesture_Recognizer_Triple_Tap_Data; 27 typedef struct _Efl_Canvas_Gesture_Recognizer_Momentum_Data Efl_Canvas_Gesture_Recognizer_Momentum_Data; 28 typedef struct _Efl_Canvas_Gesture_Recognizer_Flick_Data Efl_Canvas_Gesture_Recognizer_Flick_Data; 29 typedef struct _Efl_Canvas_Gesture_Recognizer_Rotate_Data Efl_Canvas_Gesture_Recognizer_Rotate_Data; 30 typedef struct _Efl_Canvas_Gesture_Recognizer_Zoom_Data Efl_Canvas_Gesture_Recognizer_Zoom_Data; 31 typedef struct _Efl_Canvas_Gesture_Recognizer_Custom_Data Efl_Canvas_Gesture_Recognizer_Custom_Data; 32 typedef struct _Efl_Canvas_Gesture_Data Efl_Canvas_Gesture_Data; 33 typedef struct _Efl_Canvas_Gesture_Momentum_Data Efl_Canvas_Gesture_Momentum_Data; 34 typedef struct _Efl_Canvas_Gesture_Flick_Data Efl_Canvas_Gesture_Flick_Data; 35 typedef struct _Efl_Canvas_Gesture_Zoom_Data Efl_Canvas_Gesture_Zoom_Data; 36 typedef struct _Efl_Canvas_Gesture_Rotate_Data Efl_Canvas_Gesture_Rotate_Data; 37 typedef struct _Efl_Canvas_Gesture_Custom_Data Efl_Canvas_Gesture_Custom_Data; 38 39 typedef struct _Efl_Canvas_Gesture_Touch_Data 40 { 41 Efl_Canvas_Gesture_Touch_State state; 42 Eina_Array *touch_points; 43 Efl_Gesture_Touch_Point_Data *cur_touch; 44 Efl_Gesture_Touch_Point_Data *prev_touch; 45 Eo *target; 46 int touch_down; 47 } Efl_Canvas_Gesture_Touch_Data; 48 49 struct _Efl_Canvas_Gesture_Recognizer_Data 50 { 51 Eina_Bool continues; 52 }; 53 54 struct _Efl_Canvas_Gesture_Recognizer_Tap_Data 55 { 56 Eo *target; 57 Eo *gesture; 58 Ecore_Timer *timeout; 59 int finger_size; 60 }; 61 62 struct _Efl_Canvas_Gesture_Recognizer_Long_Press_Data 63 { 64 double start_timeout; 65 Eina_List *target_timeout; 66 Eo *target; 67 Efl_Canvas_Gesture *gesture; 68 Ecore_Timer *timeout; 69 int finger_size; 70 Eina_Bool is_timeout; 71 }; 72 73 struct _Efl_Canvas_Gesture_Recognizer_Double_Tap_Data 74 { 75 double start_timeout; 76 Eina_List *target_timeout; 77 Eo *target; 78 Eo *gesture; 79 Ecore_Timer *timeout; 80 int tap_count; 81 int finger_size; 82 Eina_Bool is_timeout; 83 }; 84 85 struct _Efl_Canvas_Gesture_Recognizer_Triple_Tap_Data 86 { 87 double start_timeout; 88 Eina_List *target_timeout; 89 Eo *target; 90 Eo *gesture; 91 Ecore_Timer *timeout; 92 int tap_count; 93 int finger_size; 94 Eina_Bool is_timeout; 95 }; 96 97 struct _Efl_Canvas_Gesture_Recognizer_Momentum_Data 98 { 99 Eina_Position2D st_line; 100 Eina_Position2D end_line; 101 unsigned int t_st; 102 unsigned int t_end; 103 int xdir; 104 int ydir; 105 Eina_Bool touched; 106 }; 107 108 struct _Efl_Canvas_Gesture_Recognizer_Flick_Data 109 { 110 double line_angle; 111 Eina_Position2D st_line; 112 unsigned int t_st; 113 unsigned int t_end; 114 int line_length; 115 int finger_size; 116 Eina_Bool touched; 117 }; 118 119 struct _Efl_Canvas_Gesture_Recognizer_Rotate_Data 120 { 121 Efl_Gesture_Touch_Point_Data rotate_st; 122 Efl_Gesture_Touch_Point_Data rotate_st1; 123 124 Efl_Gesture_Touch_Point_Data rotate_mv; 125 Efl_Gesture_Touch_Point_Data rotate_mv1; 126 double rotate_step; 127 double base_angle; /**< Holds start-angle */ 128 double prev_momentum; /* Snapshot of momentum 0.01 129 * sec ago */ 130 double accum_momentum; 131 double rotate_angular_tolerance; 132 double next_step; 133 unsigned int prev_momentum_tm; /* timestamp of prev_momentum */ 134 int finger_size; 135 }; 136 137 struct _Efl_Canvas_Gesture_Recognizer_Zoom_Data 138 { 139 Efl_Gesture_Touch_Point_Data zoom_st; 140 Efl_Gesture_Touch_Point_Data zoom_st1; 141 142 Efl_Gesture_Touch_Point_Data zoom_mv; 143 Efl_Gesture_Touch_Point_Data zoom_mv1; 144 145 double zoom_distance_tolerance; 146 double zoom_finger_factor; 147 double zoom_step; 148 double next_step; 149 150 Evas_Coord zoom_base; /* Holds gap between fingers on 151 * zoom-start */ 152 int finger_size; 153 Eina_Bool calc_temp; 154 }; 155 156 struct _Efl_Canvas_Gesture_Recognizer_Custom_Data 157 { 158 Eina_Stringshare *name; 159 }; 160 161 struct _Efl_Canvas_Gesture_Data 162 { 163 Efl_Canvas_Gesture_State state; 164 Eina_Position2D hotspot; 165 unsigned int timestamp; 166 unsigned int touch_count; 167 }; 168 169 struct _Efl_Canvas_Gesture_Momentum_Data 170 { 171 Eina_Vector2 momentum; 172 int id; 173 }; 174 175 struct _Efl_Canvas_Gesture_Flick_Data 176 { 177 Eina_Vector2 momentum; 178 double angle; 179 int id; 180 }; 181 182 struct _Efl_Canvas_Gesture_Rotate_Data 183 { 184 //Evas_Coord x, y; /**< Holds rotate center point reported to user */ 185 double angle; /**< Rotation value: 0.0 means no rotation */ 186 double momentum; /**< Rotation momentum: rotation done per second (NOT YET SUPPORTED) */ 187 Evas_Coord radius; /**< Holds radius between fingers reported to user */ 188 }; 189 190 struct _Efl_Canvas_Gesture_Zoom_Data 191 { 192 double radius; 193 double zoom; 194 }; 195 196 struct _Efl_Canvas_Gesture_Custom_Data 197 { 198 Eina_Stringshare *gesture_name; 199 }; 200 201 #endif 202