summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Blumenkrantz <zmike@samsung.com>2020-01-28 13:33:11 -0500
committerMarcel Hollerbach <mail@marcel-hollerbach.de>2020-02-05 10:10:46 +0100
commit2c8d7aa7c0131727f82e2e4ac15690a98c700de1 (patch)
treef88d9cad964e0159840f0edf50a502f20fbf7c0c
parentf9dacb581176cf594d1fd838650b33dee4664be6 (diff)
downloadefl-2c8d7aa7c0131727f82e2e4ac15690a98c700de1.tar.gz
efl/gesture: break out gesture processing code into separate function
this will get reused shortly Reviewed-by: woochan lee <wc0917.lee@samsung.com> Differential Revision: https://phab.enlightenment.org/D11222
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_manager.c130
1 files changed, 67 insertions, 63 deletions
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_manager.c b/src/lib/evas/gesture/efl_canvas_gesture_manager.c
index 9bed20e62f..c78682c7c3 100644
--- a/src/lib/evas/gesture/efl_canvas_gesture_manager.c
+++ b/src/lib/evas/gesture/efl_canvas_gesture_manager.c
@@ -215,6 +215,72 @@ _efl_canvas_gesture_manager_callback_del_hook(void *data, Eo *target, const Efl_
}
}
+static void
+_gesture_recognizer_process_internal(Efl_Canvas_Gesture_Manager_Data *pd, Efl_Canvas_Gesture_Recognizer *recognizer,
+ Eo *target, const Efl_Event_Description *gesture_type, Efl_Canvas_Gesture_Touch *touch_event)
+{
+ Efl_Canvas_Gesture_Recognizer_Result recog_result;
+ Efl_Canvas_Gesture_Recognizer_Result recog_state;
+ //If the gesture canceled or already finished by recognizer.
+ Efl_Canvas_Gesture *gesture = _get_state(pd, target, recognizer, gesture_type);
+ if (!gesture) return;
+
+ /* 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;
+
+ Efl_Canvas_Gesture_Recognizer_Data *rd =
+ efl_data_scope_get(recognizer, EFL_CANVAS_GESTURE_RECOGNIZER_CLASS);
+
+ if (recog_state == EFL_GESTURE_RECOGNIZER_RESULT_TRIGGER)
+ {
+ if (efl_gesture_state_get(gesture) == EFL_GESTURE_STATE_NONE)
+ efl_gesture_state_set(gesture, EFL_GESTURE_STATE_STARTED);
+ else
+ efl_gesture_state_set(gesture, EFL_GESTURE_STATE_UPDATED);
+ }
+ else if (recog_state == EFL_GESTURE_RECOGNIZER_RESULT_FINISH)
+ {
+ efl_gesture_state_set(gesture, EFL_GESTURE_STATE_FINISHED);
+ }
+ else if (recog_state == EFL_GESTURE_RECOGNIZER_RESULT_MAYBE)
+ {
+ return;
+ }
+ else if (recog_state == EFL_GESTURE_RECOGNIZER_RESULT_CANCEL)
+ {
+ if (efl_gesture_state_get(gesture) != EFL_GESTURE_STATE_NONE)
+ efl_gesture_state_set(gesture, EFL_GESTURE_STATE_CANCELED);
+ else
+ {
+ if (rd->continues)
+ return;
+ goto post_event;
+ }
+ }
+ else if (recog_state == EFL_GESTURE_RECOGNIZER_RESULT_IGNORE)
+ {
+ return;
+ }
+
+ efl_gesture_timestamp_set(gesture, efl_gesture_touch_cur_timestamp_get(touch_event));
+ efl_event_callback_call(target, gesture_type, gesture);
+post_event:
+ //If the current event recognizes the gesture continuously, dont delete gesture.
+ if (((recog_state == EFL_GESTURE_RECOGNIZER_RESULT_FINISH) || (recog_state == EFL_GESTURE_RECOGNIZER_RESULT_CANCEL)) &&
+ !rd->continues)
+ {
+ _cleanup_cached_gestures(pd, target, gesture_type);
+ eina_hash_del(pd->m_object_events, &gesture_type, NULL);
+ //FIXME: delete it by object not list.
+ _cleanup_object(pd->m_gestures_to_delete);
+ pd->m_gestures_to_delete = NULL;
+ }
+}
+
void
_efl_canvas_gesture_manager_filter_event(void *data, Eo *target, void *event)
{
@@ -223,9 +289,6 @@ _efl_canvas_gesture_manager_filter_event(void *data, Eo *target, void *event)
Eina_Iterator *it;
Eina_Hash_Tuple *tup;
Efl_Canvas_Gesture_Recognizer *recognizer;
- Efl_Canvas_Gesture *gesture;
- Efl_Canvas_Gesture_Recognizer_Result recog_result;
- Efl_Canvas_Gesture_Recognizer_Result recog_state;
Efl_Canvas_Gesture_Touch *touch_event;
thisisreallystupid = eina_hash_find(pd->m_gesture_contex, &target);
@@ -251,66 +314,7 @@ _efl_canvas_gesture_manager_filter_event(void *data, Eo *target, void *event)
continue;
recognizer = eina_hash_find(pd->m_recognizers, &gesture_type);
-
- //If the gesture canceled or already finished by recognizer.
- gesture = _get_state(pd, target, recognizer, gesture_type);
- 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;
-
- Efl_Canvas_Gesture_Recognizer_Data *rd =
- efl_data_scope_get(recognizer, EFL_CANVAS_GESTURE_RECOGNIZER_CLASS);
-
- if (recog_state == EFL_GESTURE_RECOGNIZER_RESULT_TRIGGER)
- {
- if (efl_gesture_state_get(gesture) == EFL_GESTURE_STATE_NONE)
- efl_gesture_state_set(gesture, EFL_GESTURE_STATE_STARTED);
- else
- efl_gesture_state_set(gesture, EFL_GESTURE_STATE_UPDATED);
- }
- else if (recog_state == EFL_GESTURE_RECOGNIZER_RESULT_FINISH)
- {
- efl_gesture_state_set(gesture, EFL_GESTURE_STATE_FINISHED);
- }
- else if (recog_state == EFL_GESTURE_RECOGNIZER_RESULT_MAYBE)
- {
- continue;
- }
- else if (recog_state == EFL_GESTURE_RECOGNIZER_RESULT_CANCEL)
- {
- if (efl_gesture_state_get(gesture) != EFL_GESTURE_STATE_NONE)
- efl_gesture_state_set(gesture, EFL_GESTURE_STATE_CANCELED);
- else
- {
- if (rd->continues)
- continue;
- goto post_event;
- }
- }
- else if (recog_state == EFL_GESTURE_RECOGNIZER_RESULT_IGNORE)
- {
- continue;
- }
-
- efl_gesture_timestamp_set(gesture, efl_gesture_touch_cur_timestamp_get(touch_event));
- efl_event_callback_call(target, gesture_type, gesture);
-post_event:
- //If the current event recognizes the gesture continuously, dont delete gesture.
- if (((recog_state == EFL_GESTURE_RECOGNIZER_RESULT_FINISH) || (recog_state == EFL_GESTURE_RECOGNIZER_RESULT_CANCEL)) &&
- !rd->continues)
- {
- _cleanup_cached_gestures(pd, target, gesture_type);
- eina_hash_del(pd->m_object_events, &gesture_type, NULL);
- //FIXME: delete it by object not list.
- _cleanup_object(pd->m_gestures_to_delete);
- pd->m_gestures_to_delete = NULL;
- }
+ _gesture_recognizer_process_internal(pd, recognizer, target, gesture_type, touch_event);
}
eina_iterator_free(it);
}