diff --git a/src/tests/elementary/custom_recognizer2.c b/src/tests/elementary/custom_recognizer2.c new file mode 100644 index 0000000000..1f005a7ebe --- /dev/null +++ b/src/tests/elementary/custom_recognizer2.c @@ -0,0 +1,47 @@ +#include +#include "custom_recognizer2.eo.h" +#define MY_CLASS CUSTOM_RECOGNIZER2_CLASS + +typedef struct Custom_Recognizer2_Data +{ +} Custom_Recognizer2_Data; + +EOLIAN static Eo * +_custom_recognizer2_efl_object_finalize(Eo *obj, Custom_Recognizer2_Data *pd EINA_UNUSED) +{ + efl_gesture_recognizer_custom_gesture_name_set(obj, "custom_gesture2"); + return efl_finalize(efl_super(obj, MY_CLASS)); +} + +EOLIAN static Efl_Canvas_Gesture * +_custom_recognizer2_efl_canvas_gesture_recognizer_add(Eo *obj, Custom_Recognizer2_Data *pd EINA_UNUSED, Efl_Object *target EINA_UNUSED) +{ + return efl_add(EFL_CANVAS_GESTURE_CUSTOM_CLASS, obj); +} + +EOLIAN static Efl_Canvas_Gesture_Recognizer_Result +_custom_recognizer2_efl_canvas_gesture_recognizer_recognize(Eo *obj EINA_UNUSED, Custom_Recognizer2_Data *pd EINA_UNUSED, + Efl_Canvas_Gesture *gesture EINA_UNUSED, Efl_Object *watched EINA_UNUSED, + Efl_Canvas_Gesture_Touch *event) +{ + Eina_Position2D start = efl_gesture_touch_start_point_get(event); + Eina_Position2D cur = efl_gesture_touch_cur_point_get(event); + switch (efl_gesture_touch_state_get(event)) + { + case EFL_GESTURE_TOUCH_STATE_BEGIN: + return EFL_GESTURE_RECOGNIZER_RESULT_TRIGGER; + case EFL_GESTURE_TOUCH_STATE_UPDATE: + if (EINA_POSITION2D_EQ(start, cur)) + return EFL_GESTURE_RECOGNIZER_RESULT_TRIGGER; + if ((cur.x - start.x == 1) && (cur.y == start.y)) + return EFL_GESTURE_RECOGNIZER_RESULT_FINISH; + case EFL_GESTURE_TOUCH_STATE_END: + default: + + break; + } + + return EFL_GESTURE_RECOGNIZER_RESULT_CANCEL; +} + +#include "custom_recognizer2.eo.c" diff --git a/src/tests/elementary/custom_recognizer2.eo b/src/tests/elementary/custom_recognizer2.eo new file mode 100644 index 0000000000..721c92af7f --- /dev/null +++ b/src/tests/elementary/custom_recognizer2.eo @@ -0,0 +1,11 @@ +class @beta Custom_Recognizer2 extends Efl.Canvas.Gesture_Recognizer_Custom +{ + [[Custom gesture recognizer test class. + ]] + c_prefix: custom_recognizer2; + implements { + Efl.Object.finalize; + Efl.Canvas.Gesture_Recognizer.add; + Efl.Canvas.Gesture_Recognizer.recognize; + } +} diff --git a/src/tests/elementary/efl_ui_test_gesture.c b/src/tests/elementary/efl_ui_test_gesture.c index f965b9a778..fdd5f16a98 100644 --- a/src/tests/elementary/efl_ui_test_gesture.c +++ b/src/tests/elementary/efl_ui_test_gesture.c @@ -9,6 +9,7 @@ #include #include "custom_recognizer.eo.h" +#include "custom_recognizer2.eo.h" /* typedef enum @@ -31,6 +32,7 @@ enum FLICK, ZOOM, CUSTOM, + CUSTOM2, LAST }; @@ -514,8 +516,19 @@ custom_cb(void *data EINA_UNUSED , const Efl_Event *ev) { Efl_Canvas_Gesture *g = ev->info; - ck_assert_str_eq(efl_gesture_custom_gesture_name_get(g), "custom_gesture"); int *count = data; + if (!eina_streq(efl_gesture_custom_gesture_name_get(g), "custom_gesture")) return; + /* increment counter for event state which has been processed */ + count[efl_gesture_state_get(g) - 1]++; +} + +static void +custom_cb2(void *data EINA_UNUSED , const Efl_Event *ev) +{ + Efl_Canvas_Gesture *g = ev->info; + + int *count = data; + if (!eina_streq(efl_gesture_custom_gesture_name_get(g), "custom_gesture2")) return; /* increment counter for event state which has been processed */ count[efl_gesture_state_get(g) - 1]++; } @@ -525,13 +538,48 @@ EFL_START_TEST(test_efl_ui_gesture_custom) Eo *rect = setup(); Eo *manager = efl_provider_find(rect, EFL_CANVAS_GESTURE_MANAGER_CLASS); Eo *recognizer = efl_add(CUSTOM_RECOGNIZER_CLASS, manager); - efl_gesture_manager_recognizer_register(manager, recognizer); + Eo *recognizer2 = efl_add(CUSTOM_RECOGNIZER2_CLASS, manager); + efl_gesture_manager_recognizer_register(manager, recognizer); + efl_gesture_manager_recognizer_register(manager, recognizer2); efl_event_callback_add(rect, EFL_EVENT_GESTURE_CUSTOM, custom_cb, &count[CUSTOM]); + efl_event_callback_add(rect, EFL_EVENT_GESTURE_CUSTOM, custom_cb2, &count[CUSTOM2]); + + /* verify that we're processing */ click_object(rect); CHECK_ALL(CUSTOM, 1, 0, 1, 0); - efl_event_callback_del(rect, EFL_EVENT_GESTURE_CUSTOM, custom_cb, &count[CUSTOM]); + CHECK_ALL(CUSTOM2, 1, 0, 0, 1); + + RESET; + + /* verify that we aren't still processing */ efl_gesture_manager_recognizer_unregister(manager, recognizer); + efl_gesture_manager_recognizer_unregister(manager, recognizer2); + click_object(rect); + CHECK_ZERO(CUSTOM); + CHECK_ZERO(CUSTOM2); + + RESET; + + /* verify re-register + early finish from custom2 */ + efl_gesture_manager_recognizer_register(manager, recognizer); + efl_gesture_manager_recognizer_register(manager, recognizer2); + drag_object(rect, 500, 500, 1, 0, EINA_FALSE); + CHECK_ALL(CUSTOM, 1, 1, 1, 0); + CHECK_ALL(CUSTOM2, 1, 0, 1, 0); + + efl_event_callback_del(rect, EFL_EVENT_GESTURE_CUSTOM, custom_cb, &count[CUSTOM]); + efl_event_callback_del(rect, EFL_EVENT_GESTURE_CUSTOM, custom_cb2, &count[CUSTOM2]); + + RESET; + + /* verify we don't have anything totally weird going on */ + click_object(rect); + CHECK_ZERO(CUSTOM); + CHECK_ZERO(CUSTOM2); + + efl_gesture_manager_recognizer_unregister(manager, recognizer); + efl_gesture_manager_recognizer_unregister(manager, recognizer2); } EFL_END_TEST diff --git a/src/tests/elementary/meson.build b/src/tests/elementary/meson.build index ba748514da..10534277b4 100644 --- a/src/tests/elementary/meson.build +++ b/src/tests/elementary/meson.build @@ -1,5 +1,6 @@ priv_eo_files = [ 'custom_recognizer.eo', + 'custom_recognizer2.eo', 'focus_test.eo', 'focus_test_sub_main.eo', 'focus_manager_test.eo' @@ -164,6 +165,7 @@ efl_ui_suite_src = [ 'efl_ui_test_text.c', 'efl_ui_test_vg_animation.c', 'custom_recognizer.c', + 'custom_recognizer2.c', ] efl_ui_suite = executable('efl_ui_suite',