diff --git a/ChangeLog b/ChangeLog index 57f9c1a156..515d66d73b 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 bacdbfea0d..e2a6965eed 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, @@ -890,6 +891,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 7c282bcb12..8e59c9c820 100644 --- a/src/lib/evas/Evas_Legacy.h +++ b/src/lib/evas/Evas_Legacy.h @@ -1104,6 +1104,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. * diff --git a/src/lib/evas/canvas/evas_events.c b/src/lib/evas/canvas/evas_events.c index 7f71ddaf70..db70fa4e22 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) +static void +_canvas_event_feed_mouse_move_internal(Eo *eo_e, void *_pd, 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 *); - Evas_Public_Data *e = _pd; Evas_Object *nogrep_obj = NULL; int px, py; @@ -2009,6 +1994,49 @@ nogrep: _evas_unwalk(e); } +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) { diff --git a/src/lib/evas/canvas/evas_main.c b/src/lib/evas/canvas/evas_main.c index beebbb3926..4d7ab7a6a0 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 61818a4297..b1f6d56ef3 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);