antognolli pushed a commit to branch master.

commit f09e493bc2bb9fed67b2d6e2faa4f19142394191
Author: Rafael Antognolli <[email protected]>
Date:   Fri May 3 15:43:31 2013 -0300

    evas/events: Add evas_event_input_mouse_move().
    
    This function should be used internally by the input system
    (Ecore_Evas_Input) to feed Evas with move events. The x,y event info is
    relative to the base of the window/surface, instead of the 0,0 of the
    canvas.
    
    This case only happens for now under Wayland, where the 0,0 of the
    canvas is translated due to the window decorations that are drawn by the
    client.
---
 ChangeLog                           |  4 +++
 src/lib/evas/Evas_Eo.h              | 16 ++++++++++
 src/lib/evas/Evas_Legacy.h          | 21 +++++++++++++
 src/lib/evas/canvas/evas_events.c   | 62 +++++++++++++++++++++++++++----------
 src/lib/evas/canvas/evas_main.c     |  2 ++
 src/lib/evas/include/evas_private.h |  1 +
 6 files changed, 89 insertions(+), 17 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 57f9c1a..515d66d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2013-04-03  Rafael Antognolli
+
+        * Evas: Added evas_event_input_mouse_move() for internal use only.
+
 2013-04-29  ChunEon Park (Hermet)
 
         * Evas: Added evas_object_image_source_clip_set()/get().
diff --git a/src/lib/evas/Evas_Eo.h b/src/lib/evas/Evas_Eo.h
index bacdbfe..e2a6965 100644
--- a/src/lib/evas/Evas_Eo.h
+++ b/src/lib/evas/Evas_Eo.h
@@ -185,6 +185,7 @@ enum
    EVAS_CANVAS_SUB_ID_EVENT_FEED_MOUSE_UP,
    EVAS_CANVAS_SUB_ID_EVENT_FEED_MOUSE_CANCEL,
    EVAS_CANVAS_SUB_ID_EVENT_FEED_MOUSE_WHEEL,
+   EVAS_CANVAS_SUB_ID_EVENT_INPUT_MOUSE_MOVE,
    EVAS_CANVAS_SUB_ID_EVENT_FEED_MOUSE_MOVE,
    EVAS_CANVAS_SUB_ID_EVENT_FEED_MOUSE_IN,
    EVAS_CANVAS_SUB_ID_EVENT_FEED_MOUSE_OUT,
@@ -891,6 +892,21 @@ enum
 #define evas_canvas_event_feed_mouse_wheel(direction, z, timestamp, data) 
EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_EVENT_FEED_MOUSE_WHEEL), EO_TYPECHECK(int, 
direction), EO_TYPECHECK(int, z), EO_TYPECHECK(unsigned int, timestamp), 
EO_TYPECHECK(const void *, data)
 
 /**
+ * @def evas_canvas_event_input_mouse_move
+ * @since 1.8
+ *
+ * Mouse move event feed from input.
+ *
+ * @param[in] x
+ * @param[in] y
+ * @param[in] timestamp
+ * @param[in] data
+ *
+ * @see evas_event_input_mouse_move
+ */
+#define evas_canvas_event_input_mouse_move(x, y, timestamp, data) 
EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_EVENT_INPUT_MOUSE_MOVE), EO_TYPECHECK(int, 
x), EO_TYPECHECK(int, y), EO_TYPECHECK(unsigned int, timestamp), 
EO_TYPECHECK(const void *, data)
+
+/**
  * @def evas_canvas_event_feed_mouse_move
  * @since 1.8
  *
diff --git a/src/lib/evas/Evas_Legacy.h b/src/lib/evas/Evas_Legacy.h
index 7c282bc..8e59c9c 100644
--- a/src/lib/evas/Evas_Legacy.h
+++ b/src/lib/evas/Evas_Legacy.h
@@ -1105,6 +1105,27 @@ EAPI void evas_event_feed_mouse_down(Evas *e, int b, 
Evas_Button_Flags flags, un
 EAPI void evas_event_feed_mouse_up(Evas *e, int b, Evas_Button_Flags flags, 
unsigned int timestamp, const void *data) EINA_ARG_NONNULL(1);
 
 /**
+ * Mouse move event feed from input.
+ *
+ * @param e The given canvas pointer.
+ * @param x The horizontal position of the mouse pointer relative to the 0,0 of
+ * the window/surface.
+ * @param y The vertical position of the mouse pointer relative to the 0,0 of
+ * the window/surface.
+ * @param timestamp The timestamp of the mouse move event.
+ * @param data The data for canvas.
+ *
+ * Similar to the evas_event_feed_mouse_move(), this function will inform Evas
+ * about mouse move events which were received by the input system, relative to
+ * the 0,0 of the window, not to the canvas 0,0. It will take care of doing any
+ * special transformation like adding the framespace offset to the mouse event.
+ *
+ * @since 1.8
+ * @see evas_event_feed_mouse_move
+ */
+EAPI void evas_event_input_mouse_move(Evas *e, int x, int y, unsigned int 
timestamp, const void *data) EINA_ARG_NONNULL(1);
+
+/**
  * Mouse move event feed.
  *
  * @param e The given canvas pointer.
diff --git a/src/lib/evas/canvas/evas_events.c 
b/src/lib/evas/canvas/evas_events.c
index 7f71dda..db70fa4 100644
--- a/src/lib/evas/canvas/evas_events.c
+++ b/src/lib/evas/canvas/evas_events.c
@@ -1487,24 +1487,9 @@ _canvas_event_feed_mouse_wheel(Eo *eo_e, void *_pd, 
va_list *list)
    _evas_unwalk(e);
 }
 
-EAPI void
-evas_event_feed_mouse_move(Evas *eo_e, int x, int y, unsigned int timestamp, 
const void *data)
-{
-   MAGIC_CHECK(eo_e, Evas, MAGIC_EVAS);
-   return;
-   MAGIC_CHECK_END();
-
-   eo_do(eo_e, evas_canvas_event_feed_mouse_move(x, y, timestamp, data));
-}
-
-void
-_canvas_event_feed_mouse_move(Eo *eo_e, void *_pd, va_list *list)
+static void
+_canvas_event_feed_mouse_move_internal(Eo *eo_e, void *_pd, int x, int y, 
unsigned int timestamp, const void *data)
 {
-   int x = va_arg(*list, int);
-   int y = va_arg(*list, int);
-   unsigned int timestamp = va_arg(*list, unsigned int);
-   const void *data = va_arg(*list, const void *);
-
    Evas_Public_Data *e = _pd;
    Evas_Object *nogrep_obj = NULL;
    int px, py;
@@ -2010,6 +1995,49 @@ nogrep:
 }
 
 EAPI void
+evas_event_input_mouse_move(Evas *eo_e, int x, int y, unsigned int timestamp, 
const void *data)
+{
+   MAGIC_CHECK(eo_e, Evas, MAGIC_EVAS);
+   return;
+   MAGIC_CHECK_END();
+
+   eo_do(eo_e, evas_canvas_event_input_mouse_move(x, y, timestamp, data));
+}
+
+void
+_canvas_event_input_mouse_move(Eo *eo_e, void *_pd, va_list *list)
+{
+   int x = va_arg(*list, int);
+   int y = va_arg(*list, int);
+   unsigned int timestamp = va_arg(*list, unsigned int);
+   const void *data = va_arg(*list, const void *);
+   Evas_Public_Data *e = _pd;
+
+   _canvas_event_feed_mouse_move_internal(eo_e, _pd, x - e->framespace.x, y - 
e->framespace.y, timestamp, data);
+}
+
+EAPI void
+evas_event_feed_mouse_move(Evas *eo_e, int x, int y, unsigned int timestamp, 
const void *data)
+{
+   MAGIC_CHECK(eo_e, Evas, MAGIC_EVAS);
+   return;
+   MAGIC_CHECK_END();
+
+   eo_do(eo_e, evas_canvas_event_feed_mouse_move(x, y, timestamp, data));
+}
+
+void
+_canvas_event_feed_mouse_move(Eo *eo_e, void *_pd, va_list *list)
+{
+   int x = va_arg(*list, int);
+   int y = va_arg(*list, int);
+   unsigned int timestamp = va_arg(*list, unsigned int);
+   const void *data = va_arg(*list, const void *);
+
+   _canvas_event_feed_mouse_move_internal(eo_e, _pd, x, y, timestamp, data);
+}
+
+EAPI void
 evas_event_feed_mouse_in(Evas *eo_e, unsigned int timestamp, const void *data)
 {
    MAGIC_CHECK(eo_e, Evas, MAGIC_EVAS);
diff --git a/src/lib/evas/canvas/evas_main.c b/src/lib/evas/canvas/evas_main.c
index beebbb3..4d7ab7a 100644
--- a/src/lib/evas/canvas/evas_main.c
+++ b/src/lib/evas/canvas/evas_main.c
@@ -1038,6 +1038,7 @@ _class_constructor(Eo_Class *klass)
         EO_OP_FUNC(EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_EVENT_FEED_MOUSE_UP), 
_canvas_event_feed_mouse_up),
         EO_OP_FUNC(EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_EVENT_FEED_MOUSE_CANCEL), 
_canvas_event_feed_mouse_cancel),
         EO_OP_FUNC(EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_EVENT_FEED_MOUSE_WHEEL), 
_canvas_event_feed_mouse_wheel),
+        EO_OP_FUNC(EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_EVENT_INPUT_MOUSE_MOVE), 
_canvas_event_input_mouse_move),
         EO_OP_FUNC(EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_EVENT_FEED_MOUSE_MOVE), 
_canvas_event_feed_mouse_move),
         EO_OP_FUNC(EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_EVENT_FEED_MOUSE_IN), 
_canvas_event_feed_mouse_in),
         EO_OP_FUNC(EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_EVENT_FEED_MOUSE_OUT), 
_canvas_event_feed_mouse_out),
@@ -1138,6 +1139,7 @@ static const Eo_Op_Description op_desc[] = {
      EO_OP_DESCRIPTION(EVAS_CANVAS_SUB_ID_EVENT_FEED_MOUSE_UP, "Mouse up event 
feed."),
      EO_OP_DESCRIPTION(EVAS_CANVAS_SUB_ID_EVENT_FEED_MOUSE_CANCEL, "Mouse 
cancel event feed."),
      EO_OP_DESCRIPTION(EVAS_CANVAS_SUB_ID_EVENT_FEED_MOUSE_WHEEL, "Mouse wheel 
event feed."),
+     EO_OP_DESCRIPTION(EVAS_CANVAS_SUB_ID_EVENT_INPUT_MOUSE_MOVE, "Mouse move 
event fed from input (only Ecore_Evas_Input should use it)."),
      EO_OP_DESCRIPTION(EVAS_CANVAS_SUB_ID_EVENT_FEED_MOUSE_MOVE, "Mouse move 
event feed."),
      EO_OP_DESCRIPTION(EVAS_CANVAS_SUB_ID_EVENT_FEED_MOUSE_IN, "Mouse in event 
feed."),
      EO_OP_DESCRIPTION(EVAS_CANVAS_SUB_ID_EVENT_FEED_MOUSE_OUT, "Mouse out 
event feed."),
diff --git a/src/lib/evas/include/evas_private.h 
b/src/lib/evas/include/evas_private.h
index 61818a4..b1f6d56 100644
--- a/src/lib/evas/include/evas_private.h
+++ b/src/lib/evas/include/evas_private.h
@@ -1131,6 +1131,7 @@ void _canvas_event_feed_mouse_down(Eo *e, void *_pd, 
va_list *list);
 void _canvas_event_feed_mouse_up(Eo *e, void *_pd, va_list *list);
 void _canvas_event_feed_mouse_cancel(Eo *e, void *_pd, va_list *list);
 void _canvas_event_feed_mouse_wheel(Eo *e, void *_pd, va_list *list);
+void _canvas_event_input_mouse_move(Eo *e, void *_pd, va_list *list);
 void _canvas_event_feed_mouse_move(Eo *e, void *_pd, va_list *list);
 void _canvas_event_feed_mouse_in(Eo *e, void *_pd, va_list *list);
 void _canvas_event_feed_mouse_out(Eo *e, void *_pd, va_list *list);

-- 

------------------------------------------------------------------------------
Get 100% visibility into Java/.NET code with AppDynamics Lite
It's a free troubleshooting tool designed for production
Get down to code-level detail for bottlenecks, with <2% overhead.
Download for free and get started troubleshooting in minutes.
http://p.sf.net/sfu/appdyn_d2d_ap2

Reply via email to