bu5hm4n pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=93abc9cbeb82e118fdeee85b59a931c92c115415
commit 93abc9cbeb82e118fdeee85b59a931c92c115415 Author: Mike Blumenkrantz <zm...@samsung.com> Date: Tue Feb 11 10:29:11 2020 -0500 efl/gesture: rework custom gesture recognizer methodology this needs to return the actual gesture class type so that custom gesture events can implement their own properties if necessary Reviewed-by: woochan lee <wc0917....@samsung.com> Differential Revision: https://phab.enlightenment.org/D11322 --- src/lib/evas/gesture/efl_canvas_gesture_custom.eo | 4 +- src/lib/evas/gesture/efl_canvas_gesture_manager.c | 71 ++++++---------------- .../evas/gesture/efl_canvas_gesture_recognizer.eo | 4 +- .../gesture/efl_canvas_gesture_recognizer_custom.c | 4 +- .../efl_canvas_gesture_recognizer_double_tap.c | 4 +- .../gesture/efl_canvas_gesture_recognizer_flick.c | 4 +- .../efl_canvas_gesture_recognizer_long_tap.c | 4 +- .../efl_canvas_gesture_recognizer_momentum.c | 4 +- .../gesture/efl_canvas_gesture_recognizer_tap.c | 4 +- .../efl_canvas_gesture_recognizer_triple_tap.c | 4 +- .../gesture/efl_canvas_gesture_recognizer_zoom.c | 4 +- 11 files changed, 39 insertions(+), 72 deletions(-) diff --git a/src/lib/evas/gesture/efl_canvas_gesture_custom.eo b/src/lib/evas/gesture/efl_canvas_gesture_custom.eo index 4e4f3ae3d0..b344801e95 100644 --- a/src/lib/evas/gesture/efl_canvas_gesture_custom.eo +++ b/src/lib/evas/gesture/efl_canvas_gesture_custom.eo @@ -1,4 +1,5 @@ import eina_types; +parse efl_canvas_gesture_recognizer; class @beta Efl.Canvas.Gesture_Custom extends Efl.Canvas.Gesture { @@ -9,7 +10,8 @@ class @beta Efl.Canvas.Gesture_Custom extends Efl.Canvas.Gesture Application developers receive these objects inside a gesture event and do not typically need to create their own. Custom gesture recognizers which implement their own gesture properties (e.g., gesture momentum or angle) must - inherit this class. + inherit this class, and their recognizers must implement the @Efl.Canvas.Gesture_Recognizer.type property to return + this class. ]] c_prefix: efl_gesture_custom; methods { diff --git a/src/lib/evas/gesture/efl_canvas_gesture_manager.c b/src/lib/evas/gesture/efl_canvas_gesture_manager.c index da6d8308b0..2bee20c248 100644 --- a/src/lib/evas/gesture/efl_canvas_gesture_manager.c +++ b/src/lib/evas/gesture/efl_canvas_gesture_manager.c @@ -39,60 +39,25 @@ static Efl_Canvas_Gesture * static const Efl_Event_Description * _gesture_recognizer_event_type_get(const Efl_Canvas_Gesture_Recognizer *recognizer) { - Efl_Canvas_Gesture_Recognizer_Type type = efl_gesture_recognizer_type_get(recognizer); - - switch (type) - { - case EFL_GESTURE_RECOGNIZER_TYPE_TAP: - return EFL_EVENT_GESTURE_TAP; - case EFL_GESTURE_RECOGNIZER_TYPE_DOUBLE_TAP: - return EFL_EVENT_GESTURE_DOUBLE_TAP; - case EFL_GESTURE_RECOGNIZER_TYPE_TRIPLE_TAP: - return EFL_EVENT_GESTURE_TRIPLE_TAP; - case EFL_GESTURE_RECOGNIZER_TYPE_LONG_TAP: - return EFL_EVENT_GESTURE_LONG_TAP; - case EFL_GESTURE_RECOGNIZER_TYPE_MOMENTUM: - return EFL_EVENT_GESTURE_MOMENTUM; - case EFL_GESTURE_RECOGNIZER_TYPE_FLICK: - return EFL_EVENT_GESTURE_FLICK; - case EFL_GESTURE_RECOGNIZER_TYPE_ZOOM: - return EFL_EVENT_GESTURE_ZOOM; - case EFL_GESTURE_RECOGNIZER_TYPE_CUSTOM: - return EFL_EVENT_GESTURE_CUSTOM; - default: break; - } - return NULL; -} - -static const Efl_Class * -_gesture_recognizer_class_type_get(const Efl_Canvas_Gesture_Recognizer *recognizer) -{ - Efl_Canvas_Gesture_Recognizer_Type type = efl_gesture_recognizer_type_get(recognizer); - - switch (type) - { - case EFL_GESTURE_RECOGNIZER_TYPE_TAP: - return EFL_CANVAS_GESTURE_TAP_CLASS; - case EFL_GESTURE_RECOGNIZER_TYPE_DOUBLE_TAP: - return EFL_CANVAS_GESTURE_DOUBLE_TAP_CLASS; - case EFL_GESTURE_RECOGNIZER_TYPE_TRIPLE_TAP: - return EFL_CANVAS_GESTURE_TRIPLE_TAP_CLASS; - case EFL_GESTURE_RECOGNIZER_TYPE_LONG_TAP: - return EFL_CANVAS_GESTURE_LONG_TAP_CLASS; - case EFL_GESTURE_RECOGNIZER_TYPE_MOMENTUM: - return EFL_CANVAS_GESTURE_MOMENTUM_CLASS; - case EFL_GESTURE_RECOGNIZER_TYPE_FLICK: - return EFL_CANVAS_GESTURE_FLICK_CLASS; - case EFL_GESTURE_RECOGNIZER_TYPE_ZOOM: - return EFL_CANVAS_GESTURE_ZOOM_CLASS; - case EFL_GESTURE_RECOGNIZER_TYPE_CUSTOM: - return EFL_CANVAS_GESTURE_CUSTOM_CLASS; - default: break; - } - return NULL; + const Efl_Class *type = efl_gesture_recognizer_type_get(recognizer); + + if (type == EFL_CANVAS_GESTURE_TAP_CLASS) + return EFL_EVENT_GESTURE_TAP; + if (type == EFL_CANVAS_GESTURE_DOUBLE_TAP_CLASS) + return EFL_EVENT_GESTURE_DOUBLE_TAP; + if (type == EFL_CANVAS_GESTURE_TRIPLE_TAP_CLASS) + return EFL_EVENT_GESTURE_TRIPLE_TAP; + if (type == EFL_CANVAS_GESTURE_LONG_TAP_CLASS) + return EFL_EVENT_GESTURE_LONG_TAP; + if (type == EFL_CANVAS_GESTURE_MOMENTUM_CLASS) + return EFL_EVENT_GESTURE_MOMENTUM; + if (type == EFL_CANVAS_GESTURE_FLICK_CLASS) + return EFL_EVENT_GESTURE_FLICK; + if (type == EFL_CANVAS_GESTURE_ZOOM_CLASS) + return EFL_EVENT_GESTURE_ZOOM; + return EFL_EVENT_GESTURE_CUSTOM; } - static void _cleanup_object(Eina_Array *arr) { @@ -503,7 +468,7 @@ _get_state(Efl_Canvas_Gesture_Manager_Data *pd, } } - gesture = efl_add(_gesture_recognizer_class_type_get(recognizer), recognizer); + gesture = efl_add(efl_gesture_recognizer_type_get(recognizer), recognizer); if (!gesture) return 0; diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer.eo b/src/lib/evas/gesture/efl_canvas_gesture_recognizer.eo index c9801629ff..d03447f934 100644 --- a/src/lib/evas/gesture/efl_canvas_gesture_recognizer.eo +++ b/src/lib/evas/gesture/efl_canvas_gesture_recognizer.eo @@ -14,11 +14,11 @@ abstract @beta Efl.Canvas.Gesture_Recognizer extends Efl.Object c_prefix: efl_gesture_recognizer; methods { @property type @pure_virtual { - [[This property returns the type of gesture recognized by this recognizer. + [[This property returns the class type of gesture recognized by this recognizer. It must be implemented for the recognizer to function.]] get {} values { - type: Efl.Canvas.Gesture_Recognizer_Type; [[The gesture type to recognize.]] + type: const(Efl.Class); [[The gesture type to recognize.]] } } recognize @pure_virtual { diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_custom.c b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_custom.c index 4dfe56944a..e91b195e3d 100644 --- a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_custom.c +++ b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_custom.c @@ -2,10 +2,10 @@ #define MY_CLASS EFL_CANVAS_GESTURE_RECOGNIZER_CUSTOM_CLASS -EOLIAN static Efl_Canvas_Gesture_Recognizer_Type +EOLIAN static const Efl_Class * _efl_canvas_gesture_recognizer_custom_efl_canvas_gesture_recognizer_type_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Recognizer_Custom_Data *pd EINA_UNUSED) { - return EFL_GESTURE_RECOGNIZER_TYPE_CUSTOM; + return EFL_CANVAS_GESTURE_CUSTOM_CLASS; } EOLIAN static Eo * diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_double_tap.c b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_double_tap.c index bf1791a549..c7b53110e2 100644 --- a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_double_tap.c +++ b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_double_tap.c @@ -4,10 +4,10 @@ #define TAP_TIME_OUT 0.33 -EOLIAN static Efl_Canvas_Gesture_Recognizer_Type +EOLIAN static const Efl_Class * _efl_canvas_gesture_recognizer_double_tap_efl_canvas_gesture_recognizer_type_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Recognizer_Double_Tap_Data *pd EINA_UNUSED) { - return EFL_GESTURE_RECOGNIZER_TYPE_DOUBLE_TAP; + return EFL_CANVAS_GESTURE_DOUBLE_TAP_CLASS; } EOLIAN static void diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_flick.c b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_flick.c index 2c459482c2..6736e39a45 100644 --- a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_flick.c +++ b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_flick.c @@ -22,10 +22,10 @@ _reset_recognizer(Efl_Canvas_Gesture_Recognizer_Flick_Data *pd) pd->touched = EINA_FALSE; } -EOLIAN static Efl_Canvas_Gesture_Recognizer_Type +EOLIAN static const Efl_Class * _efl_canvas_gesture_recognizer_flick_efl_canvas_gesture_recognizer_type_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Recognizer_Flick_Data *pd EINA_UNUSED) { - return EFL_GESTURE_RECOGNIZER_TYPE_FLICK; + return EFL_CANVAS_GESTURE_FLICK_CLASS; } static void diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_long_tap.c b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_long_tap.c index 3e2d3f3f96..5b173858fa 100644 --- a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_long_tap.c +++ b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_long_tap.c @@ -4,10 +4,10 @@ #define EFL_GESTURE_LONG_TAP_TIME_OUT 1.2 -EOLIAN static Efl_Canvas_Gesture_Recognizer_Type +EOLIAN static const Efl_Class * _efl_canvas_gesture_recognizer_long_tap_efl_canvas_gesture_recognizer_type_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Recognizer_Long_Tap_Data *pd EINA_UNUSED) { - return EFL_GESTURE_RECOGNIZER_TYPE_LONG_TAP; + return EFL_CANVAS_GESTURE_LONG_TAP_CLASS; } EOLIAN static void diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_momentum.c b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_momentum.c index 90685d6400..0489147721 100644 --- a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_momentum.c +++ b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_momentum.c @@ -7,10 +7,10 @@ #define THUMBSCROLL_MOMENTUM_THRESHOLD 100.0 #define EFL_GESTURE_MINIMUM_MOMENTUM 0.001 -EOLIAN static Efl_Canvas_Gesture_Recognizer_Type +EOLIAN static const Efl_Class * _efl_canvas_gesture_recognizer_momentum_efl_canvas_gesture_recognizer_type_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Recognizer_Momentum_Data *pd EINA_UNUSED) { - return EFL_GESTURE_RECOGNIZER_TYPE_MOMENTUM; + return EFL_CANVAS_GESTURE_MOMENTUM_CLASS; } static void diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_tap.c b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_tap.c index 4bbb00f8ce..eec8c34a22 100644 --- a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_tap.c +++ b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_tap.c @@ -6,10 +6,10 @@ // may using dobule tap timeout value? #define EFL_GESTURE_RECOGNIZER_TYPE_TAP_TIME_OUT 0.33 -EOLIAN static Efl_Canvas_Gesture_Recognizer_Type +EOLIAN static const Efl_Class * _efl_canvas_gesture_recognizer_tap_efl_canvas_gesture_recognizer_type_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Recognizer_Tap_Data *pd EINA_UNUSED) { - return EFL_GESTURE_RECOGNIZER_TYPE_TAP; + return EFL_CANVAS_GESTURE_TAP_CLASS; } static Eina_Bool diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_triple_tap.c b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_triple_tap.c index 83d674a8ac..f79aff5f71 100644 --- a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_triple_tap.c +++ b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_triple_tap.c @@ -4,10 +4,10 @@ #define TAP_TIME_OUT 0.33 -EOLIAN static Efl_Canvas_Gesture_Recognizer_Type +EOLIAN static const Efl_Class * _efl_canvas_gesture_recognizer_triple_tap_efl_canvas_gesture_recognizer_type_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Recognizer_Triple_Tap_Data *pd EINA_UNUSED) { - return EFL_GESTURE_RECOGNIZER_TYPE_TRIPLE_TAP; + return EFL_CANVAS_GESTURE_TRIPLE_TAP_CLASS; } EOLIAN static void diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_zoom.c b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_zoom.c index b91811c7d3..3dd6070ae4 100644 --- a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_zoom.c +++ b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_zoom.c @@ -125,10 +125,10 @@ _zoom_compute(Efl_Canvas_Gesture_Recognizer_Zoom_Data *pd, return rt; } -EOLIAN static Efl_Canvas_Gesture_Recognizer_Type +EOLIAN static const Efl_Class * _efl_canvas_gesture_recognizer_zoom_efl_canvas_gesture_recognizer_type_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Recognizer_Zoom_Data *pd EINA_UNUSED) { - return EFL_GESTURE_RECOGNIZER_TYPE_ZOOM; + return EFL_CANVAS_GESTURE_ZOOM_CLASS; } EOLIAN static Efl_Canvas_Gesture_Recognizer_Result --