jpeg pushed a commit to branch master.

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

commit d764d8710ad2eb6dda01cf89bcf7b2d020ec2208
Author: Jean-Philippe Andre <[email protected]>
Date:   Wed May 11 14:54:11 2016 +0900

    ecore_evas: Feed evas events with eo (down, up)
---
 src/lib/ecore_evas/ecore_evas.c   | 64 +++++++++++++++++++++++++++++++++++++--
 src/lib/evas/canvas/evas_events.c | 43 +++++++++++++++++++++-----
 2 files changed, 96 insertions(+), 11 deletions(-)

diff --git a/src/lib/ecore_evas/ecore_evas.c b/src/lib/ecore_evas/ecore_evas.c
index 4b11bfd..499add6 100644
--- a/src/lib/ecore_evas/ecore_evas.c
+++ b/src/lib/ecore_evas/ecore_evas.c
@@ -36,6 +36,9 @@
 #include "ecore_evas_extn.h"
 #include "ecore_evas_win32.h"
 
+#define EFL_INTERNAL_UNSTABLE
+#include "interfaces/efl_common_internal.h"
+
 #ifndef O_BINARY
 # define O_BINARY 0
 #endif
@@ -4300,16 +4303,71 @@ _direct_key_up_cb(Ecore_Evas *ee EINA_UNUSED, const 
Ecore_Event_Key *info EINA_U
    return EINA_FALSE;
 }
 
+#define EVENT_XY_SET(EV, X, Y, MX, MY, FX, FY) do { \
+   EV->cur.x = (X) - (FX); EV->cur.xsub = (MX) - (FX); \
+   EV->cur.y = (Y) - (FY); EV->cur.ysub = (MY) - (FY); \
+   } while (0)
+
 static Eina_Bool
-_direct_mouse_down_cb(Ecore_Evas *ee EINA_UNUSED, const 
Ecore_Event_Mouse_Button *info EINA_UNUSED)
+_direct_mouse_updown(Ecore_Evas *ee, const Ecore_Event_Mouse_Button *info, 
Efl_Pointer_Action action)
 {
-   return EINA_FALSE;
+   Efl_Pointer_Event_Data *ev;
+   Efl_Pointer_Event *evt;
+   Evas *e = ee->evas;
+   Eina_Bool processed;
+   int fx, fy, fw, fh, x, y;
+   double mx, my;
+
+   evt = efl_pointer_event_instance_get(EFL_POINTER_EVENT_CLASS, e, (void **) 
&ev);
+   if (!evt) return EINA_FALSE;
+
+   ev->action = action;
+   ev->button = info->buttons;
+   if (info->double_click) ev->button_flags |= 
EFL_POINTER_BUTTON_FLAGS_DOUBLE_CLICK;
+   if (info->triple_click) ev->button_flags |= 
EFL_POINTER_BUTTON_FLAGS_TRIPLE_CLICK;
+   ev->timestamp = info->timestamp;
+   ev->finger = info->multi.device;
+
+   evas_output_framespace_get(ee->evas, &fx, &fy, &fw, &fh);
+   x = info->x;
+   y = info->y;
+   mx = info->multi.x;
+   my = info->multi.y;
+
+   if (ee->rotation == 0)
+     EVENT_XY_SET(ev, x, y, mx, my, fx, fy);
+   else if (ee->rotation == 90)
+     EVENT_XY_SET(ev, ee->h + fw - y - 1, x, ee->h + fw - my - 1, mx, fx, fy);
+   else if (ee->rotation == 180)
+     EVENT_XY_SET(ev, ee->w + fw - x - 1, ee->h + fh - y - 1,
+                  ee->w + fw - mx - 1, ee->h + fh - my - 1,
+                  fx, fy);
+   else if (ee->rotation == 270)
+     EVENT_XY_SET(ev, y, ee->w + fh - x - 1, y, ee->w + fh - mx - 1, fx, fy);
+
+   ev->radius = info->multi.radius;
+   ev->radius_x = info->multi.radius_x;
+   ev->radius_y = info->multi.radius_y;
+   ev->pressure = info->multi.pressure;
+   ev->angle = info->multi.angle - ee->rotation;
+
+   eo_event_callback_call(e, EVAS_CANVAS_EVENT_POINTER, evt);
+   processed = ev->evas_done;
+   eo_del(evt);
+
+   return processed;
+}
+
+static Eina_Bool
+_direct_mouse_down_cb(Ecore_Evas *ee, const Ecore_Event_Mouse_Button *info)
+{
+   return _direct_mouse_updown(ee, info, EFL_POINTER_ACTION_MOUSE_DOWN);
 }
 
 static Eina_Bool
 _direct_mouse_up_cb(Ecore_Evas *ee EINA_UNUSED, const Ecore_Event_Mouse_Button 
*info EINA_UNUSED)
 {
-   return EINA_FALSE;
+   return _direct_mouse_updown(ee, info, EFL_POINTER_ACTION_MOUSE_UP);
 }
 
 static Eina_Bool
diff --git a/src/lib/evas/canvas/evas_events.c 
b/src/lib/evas/canvas/evas_events.c
index 9379b4b..6fd112c 100644
--- a/src/lib/evas/canvas/evas_events.c
+++ b/src/lib/evas/canvas/evas_events.c
@@ -3043,38 +3043,65 @@ _evas_canvas_event_pointer_cb(void *data, const 
Eo_Event *event)
 
    /* TODO:
     * - pass event to the internal functions
-    * - implement legacy over oo instead of this
+    * - implement legacy over eo instead of this
     */
 
    switch (ev->action)
      {
       case EFL_POINTER_ACTION_MOUSE_MOVE:
-        if (ev->window_pos)
+        if (ev->finger == 0)
           {
-             _canvas_event_feed_mouse_move_internal(eo_e, e,
-                                                    ev->cur.x - 
e->framespace.x,
-                                                    ev->cur.y - 
e->framespace.y,
+             _canvas_event_feed_mouse_move_internal(eo_e, e, ev->cur.x, 
ev->cur.y,
                                                     ev->timestamp, ev->data);
           }
         else
           {
-             _canvas_event_feed_mouse_move_internal(eo_e, e, ev->cur.x, 
ev->cur.y,
+             _canvas_event_feed_multi_move_internal(eo_e, e, ev->finger, 
ev->cur.x, ev->cur.y,
+                                                    ev->radius, ev->radius_x, 
ev->radius_y,
+                                                    ev->pressure, ev->angle,
+                                                    ev->cur.xsub, ev->cur.ysub,
                                                     ev->timestamp, ev->data);
           }
+        ev->evas_done = EINA_TRUE;
         break;
 
       case EFL_POINTER_ACTION_MOUSE_DOWN:
-        evas_event_feed_mouse_down(eo_e, ev->button, ev->button_flags, 
ev->timestamp, ev->data);
+        if (ev->finger == 0)
+          {
+             evas_event_feed_mouse_down(eo_e, ev->button, ev->button_flags, 
ev->timestamp, ev->data);
+          }
+        else
+          {
+             evas_event_feed_multi_down(eo_e, ev->finger, ev->cur.x, ev->cur.y,
+                                        ev->radius, ev->radius_x, ev->radius_y,
+                                        ev->pressure, ev->angle,
+                                        ev->cur.xsub, ev->cur.ysub, 
ev->button_flags,
+                                        ev->timestamp, ev->data);
+          }
+        ev->evas_done = EINA_TRUE;
         break;
 
       case EFL_POINTER_ACTION_MOUSE_UP:
-        evas_event_feed_mouse_up(eo_e, ev->button, ev->button_flags, 
ev->timestamp, ev->data);
+        if (ev->finger == 0)
+          {
+             evas_event_feed_mouse_up(eo_e, ev->button, ev->button_flags, 
ev->timestamp, ev->data);
+          }
+        else
+          {
+             evas_event_feed_multi_up(eo_e, ev->finger, ev->cur.x, ev->cur.y,
+                                      ev->radius, ev->radius_x, ev->radius_y,
+                                      ev->pressure, ev->angle,
+                                      ev->cur.xsub, ev->cur.ysub, 
ev->button_flags,
+                                      ev->timestamp, ev->data);
+          }
+        ev->evas_done = EINA_TRUE;
         break;
 
       case EFL_POINTER_ACTION_MOUSE_WHEEL:
         evas_event_feed_mouse_wheel(eo_e,
                                     (ev->wheel.dir == EFL_ORIENT_HORIZONTAL) ? 
1 : 0,
                                     ev->wheel.z, ev->timestamp, ev->data);
+        ev->evas_done = EINA_TRUE;
         break;
 
       default:

-- 


Reply via email to