jpeg pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=28869a939508ce30d4102b81635a655eb2514eea

commit 28869a939508ce30d4102b81635a655eb2514eea
Author: smohanty <[email protected]>
Date:   Tue Sep 19 17:17:39 2017 +0900

    evas/gesture: Integrated gesture framework to evas.
---
 src/lib/evas/canvas/evas_callbacks.c | 15 +++++++++++++++
 src/lib/evas/canvas/evas_main.c      |  7 ++++++-
 src/lib/evas/include/evas_private.h  |  7 +++++++
 3 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/src/lib/evas/canvas/evas_callbacks.c 
b/src/lib/evas/canvas/evas_callbacks.c
index 184b500743..61e7ce8dcc 100644
--- a/src/lib/evas/canvas/evas_callbacks.c
+++ b/src/lib/evas/canvas/evas_callbacks.c
@@ -378,6 +378,15 @@ evas_object_event_callback_call(Evas_Object *eo_obj, 
Evas_Object_Protected_Data
 
    _evas_walk(e);
 
+   // gesture hook
+   if ( type == EVAS_CALLBACK_MOUSE_MOVE ||
+        type == EVAS_CALLBACK_MULTI_MOVE ||
+        type == EVAS_CALLBACK_MOUSE_DOWN ||
+        type == EVAS_CALLBACK_MULTI_DOWN ||
+        type == EVAS_CALLBACK_MOUSE_UP ||
+        type == EVAS_CALLBACK_MULTI_UP)
+     _efl_gesture_manager_filter_event(e->gesture_manager, eo_obj, event_info);
+
    if (!_evas_object_callback_has_by_type(obj, type))
      goto nothing_here;
 
@@ -698,6 +707,9 @@ _check_event_catcher_add(void *data, const Efl_Event *event)
 
    for (i = 0; array[i].desc != NULL; i++)
      {
+        if (obj->layer->evas->gesture_manager)
+          
_efl_gesture_manager_callback_add_hook(obj->layer->evas->gesture_manager, 
obj->object, array[i].desc);
+
         if (array[i].desc == EFL_EVENT_ANIMATOR_TICK)
           {
              if (obj->animator_ref++ > 0) break;
@@ -722,6 +734,9 @@ _check_event_catcher_del(void *data, const Efl_Event *event)
 
    for (i = 0; array[i].desc != NULL; i++)
      {
+        if (obj->layer->evas->gesture_manager)
+          
_efl_gesture_manager_callback_del_hook(obj->layer->evas->gesture_manager, 
obj->object, array[i].desc);
+
         if (array[i].desc == EFL_EVENT_ANIMATOR_TICK)
           {
              if ((--obj->animator_ref) > 0) break;
diff --git a/src/lib/evas/canvas/evas_main.c b/src/lib/evas/canvas/evas_main.c
index fb73145010..5a2ab02eb8 100644
--- a/src/lib/evas/canvas/evas_main.c
+++ b/src/lib/evas/canvas/evas_main.c
@@ -225,6 +225,8 @@ _evas_canvas_efl_object_constructor(Eo *eo_obj, 
Evas_Public_Data *e)
    eina_clist_init(&e->calc_list);
    eina_clist_init(&e->calc_done);
 
+   e->gesture_manager = efl_add(EFL_GESTURE_MANAGER_CLASS, eo_obj);
+
 #define EVAS_ARRAY_SET(E, Array) \
    eina_array_step_set(&E->Array, sizeof (E->Array), \
                        ((1024 * sizeof (void*)) - sizeof (E->Array)) / sizeof 
(void*));
@@ -295,6 +297,9 @@ _evas_canvas_efl_object_destructor(Eo *eo_e, 
Evas_Public_Data *e)
    _evas_post_event_callback_free(eo_e);
    _evas_canvas_event_shutdown(eo_e, e);
 
+   efl_del(e->gesture_manager);
+   e->gesture_manager = NULL;
+
    del = EINA_TRUE;
    e->walking_list++;
    e->cleanup = 1;
@@ -1247,7 +1252,7 @@ _evas_pointer_data_remove(Evas_Public_Data *edata, 
Efl_Input_Device *pointer)
    Evas_Pointer_Seat *pseat;
    Eo *seat;
 
-   seat = efl_input_device_seat_get(pointer);   
+   seat = efl_input_device_seat_get(pointer);
    EINA_INLIST_FOREACH(edata->seats, pseat)
      {
         if (pseat->seat != seat) continue;
diff --git a/src/lib/evas/include/evas_private.h 
b/src/lib/evas/include/evas_private.h
index df01f94a3e..dbaf8a1bf6 100644
--- a/src/lib/evas/include/evas_private.h
+++ b/src/lib/evas/include/evas_private.h
@@ -934,6 +934,7 @@ struct _Evas_Public_Data
    int            in_smart_calc;
    int            smart_calc_count;
 
+   Eo            *gesture_manager;
    Eo            *pending_default_focus_obj;
    Eina_Hash     *focused_objects; //Key - seat; value - the focused object
    Eina_List     *focused_by; //Which seat has the canvas focus
@@ -2015,6 +2016,12 @@ Eina_List 
*_evas_pointer_list_in_rect_get(Evas_Public_Data *edata,
 
 void efl_canvas_output_info_get(Evas_Public_Data *e, Efl_Canvas_Output 
*output);
 
+// Gesture Manager
+void _efl_gesture_manager_filter_event(Eo *gesture_manager, Eo *target, void 
*event);
+void _efl_gesture_manager_callback_del_hook(Eo *gesture_manager, Eo *target, 
const Efl_Event_Description *type);
+void _efl_gesture_manager_callback_add_hook(Eo *gesture_manager, Eo *target, 
const Efl_Event_Description *type);
+
+
 extern Eina_Cow *evas_object_proxy_cow;
 extern Eina_Cow *evas_object_map_cow;
 extern Eina_Cow *evas_object_state_cow;

-- 


Reply via email to