diff --git a/legacy/evas/src/lib/Evas.h b/legacy/evas/src/lib/Evas.h index 478d7e577e..a6dc08b7f3 100644 --- a/legacy/evas/src/lib/Evas.h +++ b/legacy/evas/src/lib/Evas.h @@ -11,6 +11,7 @@ enum _Evas_Callback_Type EVAS_CALLBACK_MOUSE_DOWN, /**< Mouse Button Down Event */ EVAS_CALLBACK_MOUSE_UP, /**< Mouse Button Up Event */ EVAS_CALLBACK_MOUSE_MOVE, /**< Mouse Move Event */ + EVAS_CALLBACK_MOUSE_WHEEL, /**< Mouse Wheel Event */ EVAS_CALLBACK_FREE, /**< Object Being Freed */ EVAS_CALLBACK_KEY_DOWN, /**< Key Press Event */ EVAS_CALLBACK_KEY_UP, /**< Key Release Event */ @@ -63,6 +64,7 @@ typedef struct _Evas_Event_Mouse_Up Evas_Event_Mouse_Up; /**< Event structure typedef struct _Evas_Event_Mouse_In Evas_Event_Mouse_In; /**< Event structure for #EVAS_CALLBACK_MOUSE_IN event callbacks */ typedef struct _Evas_Event_Mouse_Out Evas_Event_Mouse_Out; /**< Event structure for #EVAS_CALLBACK_MOUSE_OUT event callbacks */ typedef struct _Evas_Event_Mouse_Move Evas_Event_Mouse_Move; /**< Event structure for #EVAS_CALLBACK_MOUSE_MOVE event callbacks */ +typedef struct _Evas_Event_Mouse_Wheel Evas_Event_Mouse_Wheel; /**< Event structure for #EVAS_CALLBACK_MOUSE_WHEEL event callbacks */ typedef struct _Evas_Event_Key_Down Evas_Event_Key_Down; /**< Event structure for #EVAS_CALLBACK_KEY_DOWN event callbacks */ typedef struct _Evas_Event_Key_Up Evas_Event_Key_Up; /**< Event structure for #EVAS_CALLBACK_KEY_UP event callbacks */ @@ -155,6 +157,24 @@ struct _Evas_Event_Mouse_Move /** Mouse button down event */ Evas_Lock *locks; }; +struct _Evas_Event_Mouse_Wheel /** Wheel event */ +{ + int direction; /* 0 = default up/down wheel FIXME: more wheel types */ + int z; /* ...,-2,-1 = down, 1,2,... = up */ + + struct { + int x, y; + } output; + + struct { + double x, y; + } canvas; + + void *data; + Evas_Modifier *modifiers; + Evas_Lock *locks; +}; + struct _Evas_Event_Key_Down /** Key press event */ { char *keyname; /**< The string name of the key pressed */ @@ -381,6 +401,7 @@ extern "C" { void evas_event_feed_mouse_move_data (Evas *e, int x, int y, const void *data); void evas_event_feed_mouse_in_data (Evas *e, const void *data); void evas_event_feed_mouse_out_data (Evas *e, const void *data); + void evas_event_feed_mouse_wheel_data (Evas *e, int direction, int z, const void *data); void evas_event_feed_key_down_data (Evas *e, const char *keyname, const void *data); void evas_event_feed_key_up_data (Evas *e, const char *keyname, const void *data); void evas_event_feed_mouse_down (Evas *e, int b); @@ -388,6 +409,7 @@ extern "C" { void evas_event_feed_mouse_move (Evas *e, int x, int y); void evas_event_feed_mouse_in (Evas *e); void evas_event_feed_mouse_out (Evas *e); + void evas_event_feed_mouse_wheel (Evas *e, int direction, int z); void evas_event_feed_key_down (Evas *e, const char *keyname); void evas_event_feed_key_up (Evas *e, const char *keyname); diff --git a/legacy/evas/src/lib/canvas/evas_callbacks.c b/legacy/evas/src/lib/canvas/evas_callbacks.c index 9d755269b6..051cd14585 100644 --- a/legacy/evas/src/lib/canvas/evas_callbacks.c +++ b/legacy/evas/src/lib/canvas/evas_callbacks.c @@ -131,6 +131,9 @@ evas_object_event_callback_call(Evas_Object *obj, Evas_Callback_Type type, void break; case EVAS_CALLBACK_MOUSE_MOVE: l_mod = &(obj->callbacks->move); + break; + case EVAS_CALLBACK_MOUSE_WHEEL: + l_mod = &(obj->callbacks->wheel); break; case EVAS_CALLBACK_FREE: l_mod = &(obj->callbacks->free); @@ -212,11 +215,11 @@ evas_object_event_callback_call(Evas_Object *obj, Evas_Callback_Type type, void * * The event type @p type to trigger the function mys be one of * EVAS_CALLBACK_MOUSE_IN, EVAS_CALLBACK_MOUSE_OUT, EVAS_CALLBACK_MOUSE_DOWN, - * EVAS_CALLBACK_MOUSE_UP, EVAS_CALLBACK_MOUSE_MOVE, EVAS_CALLBACK_FREE, - * EVAS_CALLBACK_KEY_DOWN, EVAS_CALLBACK_KEY_UP, EVAS_CALLBACK_FOCUS_IN, - * EVAS_CALLBACK_FOCUS_OUT, EVAS_CALLBACK_SHOW, EVAS_CALLBACK_HIDE, - * EVAS_CALLBACK_MOVE, EVAS_CALLBACK_RESIZE or EVAS_CALLBACK_RESTACK. This - * determines the kind of event that will trigger the callback to be called. + * EVAS_CALLBACK_MOUSE_UP, EVAS_CALLBACK_MOUSE_MOVE, EVAS_CALLBACK_MOUSE_WHEEL, + * EVAS_CALLBACK_FREE, EVAS_CALLBACK_KEY_DOWN, EVAS_CALLBACK_KEY_UP, + * EVAS_CALLBACK_FOCUS_IN, EVAS_CALLBACK_FOCUS_OUT, EVAS_CALLBACK_SHOW, + * EVAS_CALLBACK_HIDE, EVAS_CALLBACK_MOVE, EVAS_CALLBACK_RESIZE or EVAS_CALLBACK_RESTACK. + * This determines the kind of event that will trigger the callback to be called. * The @p event_info pointer passed to the callback will be one of the * following, depending on the event tiggering it: * @@ -261,7 +264,12 @@ evas_object_event_callback_call(Evas_Object *obj, Evas_Callback_Type type, void * * This event is triggered by the mouse pointer moving while over an object or * passively grabbed to an object. - * + * + * EVAS_CALLBACK_MOUSE_WHEEL: event_info = pointer to Evas_Event_Mouse_Wheel + * + * This event is triggered by the mouse wheel being rolled while over an object + * or passively grabbed to an object. + * * EVAS_CALLBACK_FREE: event_info = NULL * * This event is triggered just before Evas is about to free all memory used @@ -375,6 +383,9 @@ evas_object_event_callback_add(Evas_Object *obj, Evas_Callback_Type type, void ( break; case EVAS_CALLBACK_MOUSE_MOVE: l_mod = &(obj->callbacks->move); + break; + case EVAS_CALLBACK_MOUSE_WHEEL: + l_mod = &(obj->callbacks->wheel); break; case EVAS_CALLBACK_FREE: l_mod = &(obj->callbacks->free); @@ -467,6 +478,9 @@ evas_object_event_callback_del(Evas_Object *obj, Evas_Callback_Type type, void ( break; case EVAS_CALLBACK_MOUSE_MOVE: l_mod = &(obj->callbacks->move); + break; + case EVAS_CALLBACK_MOUSE_WHEEL: + l_mod = &(obj->callbacks->wheel); break; case EVAS_CALLBACK_FREE: l_mod = &(obj->callbacks->free); diff --git a/legacy/evas/src/lib/canvas/evas_events.c b/legacy/evas/src/lib/canvas/evas_events.c index 884038e927..7b3acd6d6a 100644 --- a/legacy/evas/src/lib/canvas/evas_events.c +++ b/legacy/evas/src/lib/canvas/evas_events.c @@ -141,6 +141,39 @@ evas_event_feed_mouse_down_data(Evas *e, int b, const void *data) if (copy) copy = evas_list_free(copy); } +void +evas_event_feed_mouse_wheel_data(Evas *e, int direction, int z, const void *data) +{ + Evas_List *l, *copy; + Evas_Object *obj; + + MAGIC_CHECK(e, Evas, MAGIC_EVAS); + return; + MAGIC_CHECK_END(); + + copy = evas_event_list_copy(e->pointer.object.in); + + for (l = copy; l; l = l->next) + { + Evas_Event_Mouse_Wheel ev; + Evas_Object *obj = l->data; + + ev.direction = direction; + ev.z = z; + ev.output.x = e->pointer.x; + ev.output.y = e->pointer.y; + ev.canvas.x = e->pointer.canvas_x; + ev.canvas.y = e->pointer.canvas_y; + ev.data = (void *) data; + ev.modifiers = &(e->modifiers); + ev.locks = &(e->locks); + + evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_WHEEL, &ev); + } + + return; +} + /** * To be documented. * @@ -626,6 +659,18 @@ evas_event_feed_mouse_out(Evas *e) evas_event_feed_mouse_out_data(e, NULL); } +/** + * To be documented. + * + * FIXME: To be fixed. + * + */ +void +evas_event_feed_mouse_wheel(Evas *e, int direction, int z) +{ + evas_event_feed_mouse_wheel_data(e, direction, z, NULL); +} + /** * To be documented. * diff --git a/legacy/evas/src/lib/include/evas_private.h b/legacy/evas/src/lib/include/evas_private.h index 3f7075e328..6150f9d579 100644 --- a/legacy/evas/src/lib/include/evas_private.h +++ b/legacy/evas/src/lib/include/evas_private.h @@ -20,20 +20,21 @@ typedef enum _Evas_Callback_Type { EVAS_CALLBACK_MOUSE_IN, - EVAS_CALLBACK_MOUSE_OUT, - EVAS_CALLBACK_MOUSE_DOWN, - EVAS_CALLBACK_MOUSE_UP, - EVAS_CALLBACK_MOUSE_MOVE, - EVAS_CALLBACK_FREE, - EVAS_CALLBACK_KEY_DOWN, - EVAS_CALLBACK_KEY_UP, - EVAS_CALLBACK_FOCUS_IN, - EVAS_CALLBACK_FOCUS_OUT, - EVAS_CALLBACK_SHOW, - EVAS_CALLBACK_HIDE, - EVAS_CALLBACK_MOVE, - EVAS_CALLBACK_RESIZE, - EVAS_CALLBACK_RESTACK + EVAS_CALLBACK_MOUSE_OUT, + EVAS_CALLBACK_MOUSE_DOWN, + EVAS_CALLBACK_MOUSE_UP, + EVAS_CALLBACK_MOUSE_MOVE, + EVAS_CALLBACK_MOUSE_WHEEL, + EVAS_CALLBACK_FREE, + EVAS_CALLBACK_KEY_DOWN, + EVAS_CALLBACK_KEY_UP, + EVAS_CALLBACK_FOCUS_IN, + EVAS_CALLBACK_FOCUS_OUT, + EVAS_CALLBACK_SHOW, + EVAS_CALLBACK_HIDE, + EVAS_CALLBACK_MOVE, + EVAS_CALLBACK_RESIZE, + EVAS_CALLBACK_RESTACK } Evas_Callback_Type; typedef struct _Evas_Rectangle Evas_Rectangle; @@ -227,6 +228,7 @@ struct _Evas_Callbacks Evas_Object_List *move; Evas_Object_List *in; Evas_Object_List *out; + Evas_Object_List *wheel; Evas_Object_List *key_down; Evas_Object_List *key_up; Evas_Object_List *free;