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.lee@samsung.com>
Differential Revision: https://phab.enlightenment.org/D11322
This commit is contained in:
Mike Blumenkrantz 2020-02-11 10:29:11 -05:00 committed by Marcel Hollerbach
parent f917f75c56
commit 93abc9cbeb
11 changed files with 38 additions and 71 deletions

View File

@ -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 {

View File

@ -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);
const Efl_Class *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;
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 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;
}
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;

View File

@ -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 {

View File

@ -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 *

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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