evas/events: Add evas_event_input_mouse_move().
authorRafael Antognolli <rafael.antognolli@intel.com>
Fri, 3 May 2013 18:43:31 +0000 (15:43 -0300)
committerRafael Antognolli <rafael.antognolli@intel.com>
Fri, 3 May 2013 19:45:33 +0000 (16:45 -0300)
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
src/lib/evas/Evas_Eo.h
src/lib/evas/Evas_Legacy.h
src/lib/evas/canvas/evas_events.c
src/lib/evas/canvas/evas_main.c
src/lib/evas/include/evas_private.h

index 57f9c1a..515d66d 100644 (file)
--- 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().
index bacdbfe..e2a6965 100644 (file)
@@ -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
  *
index 7c282bc..8e59c9c 100644 (file)
@@ -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.
index 7f71dda..db70fa4 100644 (file)
@@ -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);
index beebbb3..4d7ab7a 100644 (file)
@@ -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."),
index 61818a4..b1f6d56 100644 (file)
@@ -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);