bu5hm4n pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=38641ecd9be4cd8b50dcdd978b7a2e6cdc7c960d
commit 38641ecd9be4cd8b50dcdd978b7a2e6cdc7c960d Author: Mike Blumenkrantz <[email protected]> Date: Fri Jan 17 10:18:23 2020 -0500 efl/gesture: add touch_count property for gesture event info this allows us to provide the number of touch points active in any gesture so we can detect e.g., double-tap with two fingers Reviewed-by: woochan lee <[email protected]> Differential Revision: https://phab.enlightenment.org/D11126 --- src/lib/evas/gesture/efl_canvas_gesture.c | 13 +++++++++++++ src/lib/evas/gesture/efl_canvas_gesture.eo | 10 ++++++++++ src/lib/evas/gesture/efl_canvas_gesture_manager.c | 4 ++++ src/lib/evas/gesture/efl_canvas_gesture_private.h | 1 + src/lib/evas/gesture/efl_canvas_gesture_touch.c | 6 ++++++ src/lib/evas/gesture/efl_canvas_gesture_touch.eo | 8 ++++++++ 6 files changed, 42 insertions(+) diff --git a/src/lib/evas/gesture/efl_canvas_gesture.c b/src/lib/evas/gesture/efl_canvas_gesture.c index 077bc9b527..231bc865a0 100644 --- a/src/lib/evas/gesture/efl_canvas_gesture.c +++ b/src/lib/evas/gesture/efl_canvas_gesture.c @@ -1,3 +1,4 @@ +#define EFL_CANVAS_GESTURE_PROTECTED #include "efl_canvas_gesture_private.h" #define MY_CLASS EFL_CANVAS_GESTURE_CLASS @@ -46,5 +47,17 @@ _efl_canvas_gesture_timestamp_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_ return pd->timestamp; } +EOLIAN static void +_efl_canvas_gesture_touch_count_set(Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Data *pd, unsigned int touch_count) +{ + pd->touch_count = touch_count; +} + +EOLIAN static unsigned int +_efl_canvas_gesture_touch_count_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Data *pd) +{ + return pd->touch_count; +} + #include "efl_canvas_gesture.eo.c" #include "efl_canvas_gesture_events.eo.c" diff --git a/src/lib/evas/gesture/efl_canvas_gesture.eo b/src/lib/evas/gesture/efl_canvas_gesture.eo index 22334e245e..26aef89af8 100644 --- a/src/lib/evas/gesture/efl_canvas_gesture.eo +++ b/src/lib/evas/gesture/efl_canvas_gesture.eo @@ -46,5 +46,15 @@ abstract @beta Efl.Canvas.Gesture extends Efl.Object timestamp: uint;[[The time-stamp.]] } } + @property touch_count { + [[The current number of touch points recorded in the gesture.]] + get { + } + set @protected { + } + values { + touch_count: uint;[[The count of the touch points.]] + } + } } } diff --git a/src/lib/evas/gesture/efl_canvas_gesture_manager.c b/src/lib/evas/gesture/efl_canvas_gesture_manager.c index 5a28b04fbf..db2b3c16a2 100644 --- a/src/lib/evas/gesture/efl_canvas_gesture_manager.c +++ b/src/lib/evas/gesture/efl_canvas_gesture_manager.c @@ -1,3 +1,4 @@ +#define EFL_CANVAS_GESTURE_PROTECTED #include "efl_canvas_gesture_private.h" #define MY_CLASS EFL_CANVAS_GESTURE_MANAGER_CLASS @@ -192,6 +193,9 @@ _efl_canvas_gesture_manager_filter_event(void *data, Eo *target, void *event) if (!gesture) continue; + /* this is the "default" value for the event, recognizers may modify it if necessary */ + efl_gesture_touch_count_set(gesture, efl_gesture_touch_points_count_get(touch_event)); + //Gesture detecting. recog_result = efl_gesture_recognizer_recognize(recognizer, gesture, target, touch_event); recog_state = recog_result & EFL_GESTURE_RECOGNIZER_RESULT_RESULT_MASK; diff --git a/src/lib/evas/gesture/efl_canvas_gesture_private.h b/src/lib/evas/gesture/efl_canvas_gesture_private.h index 45c13a7776..f77530ff98 100644 --- a/src/lib/evas/gesture/efl_canvas_gesture_private.h +++ b/src/lib/evas/gesture/efl_canvas_gesture_private.h @@ -130,6 +130,7 @@ struct _Efl_Canvas_Gesture_Data Efl_Canvas_Gesture_State state; Eina_Position2D hotspot; unsigned int timestamp; + unsigned int touch_count; }; struct _Efl_Canvas_Gesture_Momentum_Data diff --git a/src/lib/evas/gesture/efl_canvas_gesture_touch.c b/src/lib/evas/gesture/efl_canvas_gesture_touch.c index 3ed9dfe2b2..3e90b7d751 100644 --- a/src/lib/evas/gesture/efl_canvas_gesture_touch.c +++ b/src/lib/evas/gesture/efl_canvas_gesture_touch.c @@ -122,6 +122,12 @@ _efl_canvas_gesture_touch_multi_touch_get(const Eo *obj EINA_UNUSED, Efl_Canvas_ return pd->multi_touch; } +EOLIAN static unsigned int +_efl_canvas_gesture_touch_touch_points_count_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Touch_Data *pd) +{ + return pd->touch_down; +} + EOLIAN static const Efl_Gesture_Touch_Point_Data * _efl_canvas_gesture_touch_cur_data_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Touch_Data *pd) { diff --git a/src/lib/evas/gesture/efl_canvas_gesture_touch.eo b/src/lib/evas/gesture/efl_canvas_gesture_touch.eo index a12d26d3b9..ed9949ea17 100644 --- a/src/lib/evas/gesture/efl_canvas_gesture_touch.eo +++ b/src/lib/evas/gesture/efl_canvas_gesture_touch.eo @@ -60,6 +60,14 @@ class @beta Efl.Canvas.Gesture_Touch extends Efl.Object return: bool; [[returns $true if its a multi touch]] } } + @property touch_points_count { + [[This provides the number of touch points active.]] + get { + } + values { + touch_count: uint; [[The number of active touch points.]] + } + } @property state { [[This property holds the state of the touch event.]] get { --
