diff options
author | Jean-Philippe Andre <jp.andre@samsung.com> | 2016-08-17 22:00:37 +0900 |
---|---|---|
committer | Jean-Philippe Andre <jp.andre@samsung.com> | 2016-08-26 10:18:01 +0900 |
commit | edd88292a49a02db660b62b1a72368a761f4f46b (patch) | |
tree | dda9ce71567b66fe43f13ff79031d6a81d2ffc86 | |
parent | 56c682452c17134959cb07bc290d9d7d059026e3 (diff) | |
download | efl-edd88292a49a02db660b62b1a72368a761f4f46b.tar.gz |
evas events: Switch mouse move event to the new event type (1)
This only modifies the proxy source handling code.
-rw-r--r-- | src/lib/evas/canvas/evas_events.c | 117 |
1 files changed, 57 insertions, 60 deletions
diff --git a/src/lib/evas/canvas/evas_events.c b/src/lib/evas/canvas/evas_events.c index db4ac4cd41..a281eb3e96 100644 --- a/src/lib/evas/canvas/evas_events.c +++ b/src/lib/evas/canvas/evas_events.c @@ -585,32 +585,38 @@ _evas_event_source_mouse_down_events(Evas_Object *eo_obj, Evas *eo_e, static void _evas_event_source_mouse_move_events(Evas_Object *eo_obj, Evas *eo_e, - Evas_Event_Mouse_Move *ev, int event_id, - Efl_Event_Pointer *parent_pe) + Efl_Event_Pointer *parent_ev, int event_id) { Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS); Evas_Object *eo_src = _evas_object_image_source_get(eo_obj); Evas_Object_Protected_Data *src = efl_data_scope_get(eo_src, EFL_CANVAS_OBJECT_CLASS); Evas_Public_Data *e = efl_data_scope_get(eo_e, EVAS_CANVAS_CLASS); - Evas_Coord_Point canvas = ev->cur.canvas; - Efl_Event_Pointer *pe = NULL; + Evas_Object_Protected_Data *child; + Evas_Object *eo_child; + Eina_List *l; + Efl_Event_Pointer_Data *ev; + Efl_Event_Pointer *evt; + Eina_Vector2 curpt, curpt_real, prevpt, prevpt_real; if (obj->delete_me || src->delete_me || e->is_frozen) return; - _transform_to_src_space(obj, src, &ev->cur.canvas.x, &ev->cur.canvas.y); - - ev->event_src = eo_obj; + evt = efl_event_dup(parent_ev); + ev = efl_data_scope_get(evt, EFL_EVENT_POINTER_CLASS); + if (!ev) return; - //FIXME: transform previous coords also. - Eina_List *l; - Evas_Object *eo_child; - Evas_Object_Protected_Data *child; - Evas_Coord_Point point = ev->cur.canvas; + curpt_real = ev->cur; + prevpt_real = ev->prev; + _transform_to_src_space_f(obj, src, &ev->cur); + _transform_to_src_space_f(obj, src, &ev->prev); + curpt = ev->cur; + prevpt = ev->prev; + ev->source = eo_obj; if (e->pointer.mouse_grabbed) { Eina_List *outs = NULL; Eina_List *copy = evas_event_list_copy(src->proxy->src_event_in); + EINA_LIST_FOREACH(copy, l, eo_child) { child = efl_data_scope_get(eo_child, EFL_CANVAS_OBJECT_CLASS); @@ -621,11 +627,14 @@ _evas_event_source_mouse_move_events(Evas_Object *eo_obj, Evas *eo_e, (!evas_event_freezes_through(eo_child, child)) && (!child->clip.clipees)) { - ev->cur.canvas = point; - _evas_event_havemap_adjust(eo_child, child, &ev->cur.canvas.x, - &ev->cur.canvas.y, - child->mouse_grabbed); - EV_CALL(eo_child, child, EVAS_CALLBACK_MOUSE_MOVE, ev, event_id, pe, parent_pe); + ev->cur = curpt; + ev->prev = prevpt; + _evas_event_havemap_adjust_f(eo_child, child, &ev->cur, child->mouse_grabbed); + _evas_event_havemap_adjust_f(eo_child, child, &ev->prev, child->mouse_grabbed); + + ev->action = EFL_POINTER_ACTION_MOVE; + evas_object_event_callback_call(eo_child, child, EVAS_CALLBACK_MOUSE_MOVE, NULL, + event_id, EFL_EVENT_POINTER_MOVE, evt); } else outs = eina_list_append(outs, eo_child); @@ -633,28 +642,24 @@ _evas_event_source_mouse_move_events(Evas_Object *eo_obj, Evas *eo_e, //FIXME: take care nograb object } eina_list_free(copy); - EV_RESET(pe); - while (outs) + EINA_LIST_FREE(outs, eo_child) { - eo_child = outs->data; - outs = eina_list_remove(outs, eo_child); child = efl_data_scope_get(eo_child, EFL_CANVAS_OBJECT_CLASS); if ((child->mouse_grabbed == 0) && (!e->delete_me)) { - if (child->mouse_in) continue; + if (child->mouse_in) continue; /* FIXME: dubious logic! */ child->mouse_in = 0; if (child->delete_me || e->is_frozen) continue; - ev->cur.canvas = canvas; - _evas_event_havemap_adjust(eo_child, child, &ev->cur.canvas.x, - &ev->cur.canvas.y, - child->mouse_grabbed); - + ev->cur = curpt_real; + _evas_event_havemap_adjust_f(eo_child, child, &ev->cur, child->mouse_grabbed); EINA_COW_WRITE_BEGIN(evas_object_proxy_cow, src->proxy, Evas_Object_Proxy_Data, proxy_write) proxy_write->src_event_in = eina_list_remove(proxy_write->src_event_in, eo_child); EINA_COW_WRITE_END(evas_object_proxy_cow, src->proxy, proxy_write); - EV_CALL(eo_child, child, EVAS_CALLBACK_MOUSE_OUT, ev, event_id, pe, parent_pe); + ev->action = EFL_POINTER_ACTION_OUT; + evas_object_event_callback_call(eo_child, child, EVAS_CALLBACK_MOUSE_OUT, NULL, + event_id, EFL_EVENT_POINTER_OUT, evt); } } } @@ -666,7 +671,8 @@ _evas_event_source_mouse_move_events(Evas_Object *eo_obj, Evas *eo_e, if (src->is_smart) { int no_rep = 0; - ins = _evas_event_object_list_raw_in_get(eo_e, ins, evas_object_smart_members_get_direct(eo_src), NULL, ev->cur.canvas.x, ev->cur.canvas.y, &no_rep, EINA_TRUE); + ins = _evas_event_object_list_raw_in_get(eo_e, ins, evas_object_smart_members_get_direct(eo_src), + NULL, ev->cur.x, ev->cur.y, &no_rep, EINA_TRUE); } else ins = eina_list_append(ins, eo_src); @@ -675,11 +681,9 @@ _evas_event_source_mouse_move_events(Evas_Object *eo_obj, Evas *eo_e, { child = efl_data_scope_get(eo_child, EFL_CANVAS_OBJECT_CLASS); - ev->cur.canvas = point; - + ev->cur = curpt; if (evas_object_is_in_output_rect(eo_child, child, - ev->cur.canvas.x, - ev->cur.canvas.y, 1, 1) && + ev->cur.x, ev->cur.y, 1, 1) && (evas_object_clippers_is_visible(eo_child, child) || child->mouse_grabbed) && eina_list_data_find(ins, eo_child) && @@ -687,27 +691,22 @@ _evas_event_source_mouse_move_events(Evas_Object *eo_obj, Evas *eo_e, (!evas_event_freezes_through(eo_child, child)) && (!child->clip.clipees) && ((!child->precise_is_inside) || - evas_object_is_inside(eo_child, child, ev->cur.canvas.x, - ev->cur.canvas.y))) + evas_object_is_inside(eo_child, child, ev->cur.x, ev->cur.y))) { - _evas_event_havemap_adjust(eo_child, child, &ev->cur.canvas.x, - &ev->cur.canvas.y, - child->mouse_grabbed); - EV_CALL(eo_child, child, EVAS_CALLBACK_MOUSE_MOVE, ev, event_id, pe, parent_pe); - EV_RESET(pe); + ev->action = EFL_POINTER_ACTION_MOVE; + _evas_event_havemap_adjust_f(eo_child, child, &ev->cur, child->mouse_grabbed); + evas_object_event_callback_call(eo_child, child, EVAS_CALLBACK_MOUSE_MOVE, NULL, + event_id, EFL_EVENT_POINTER_MOVE, evt); } else if (child->mouse_in) { child->mouse_in = 0; if (e->is_frozen) continue; - ev->cur.canvas = point; - _evas_event_havemap_adjust(eo_child, child, - &ev->cur.canvas.x, - &ev->cur.canvas.y, - child->mouse_grabbed); - // note: Mouse_Move and Mouse_Out are compatible (bad!) - EV_CALL(eo_child, child, EVAS_CALLBACK_MOUSE_OUT, ev, event_id, pe, parent_pe); - EV_RESET(pe); + ev->cur = curpt; + _evas_event_havemap_adjust_f(eo_child, child, &ev->cur, child->mouse_grabbed); + ev->action = EFL_POINTER_ACTION_OUT; + evas_object_event_callback_call(eo_child, child, EVAS_CALLBACK_MOUSE_OUT, NULL, + event_id, EFL_EVENT_POINTER_OUT, evt); if (e->delete_me) break; } @@ -726,13 +725,11 @@ _evas_event_source_mouse_move_events(Evas_Object *eo_obj, Evas *eo_e, { child->mouse_in = 1; if (e->is_frozen) continue; - ev->cur.canvas = point; - _evas_event_havemap_adjust(eo_child, child, - &ev->cur.canvas.x, - &ev->cur.canvas.y, - child->mouse_grabbed); - // note: Mouse_Move and Mouse_In are compatible (bad!) - EV_CALL(eo_child, child, EVAS_CALLBACK_MOUSE_IN, ev, event_id2, pe, parent_pe); + ev->cur = curpt; + _evas_event_havemap_adjust_f(eo_child, child, &ev->cur, child->mouse_grabbed); + ev->action = EFL_POINTER_ACTION_IN; + evas_object_event_callback_call(eo_child, child, EVAS_CALLBACK_MOUSE_IN, NULL, + event_id2, EFL_EVENT_POINTER_IN, evt); if (e->delete_me) break; } } @@ -752,8 +749,8 @@ _evas_event_source_mouse_move_events(Evas_Object *eo_obj, Evas *eo_e, if (ins) eina_list_free(ins); } } - ev->cur.canvas = canvas; - EV_DEL(pe); + + efl_del(evt); } static void @@ -1885,7 +1882,7 @@ _canvas_event_feed_mouse_move_internal(Eo *eo_e, Evas_Public_Data *e, int x, int { EV_CALL(eo_obj, obj, EVAS_CALLBACK_MOUSE_MOVE, &ev, event_id, pemove, parent_pe); if ((obj->proxy->is_proxy) && (obj->proxy->src_events)) - _evas_event_source_mouse_move_events(eo_obj, eo_e, &ev, event_id, pemove); + _evas_event_source_mouse_move_events(eo_obj, eo_e, pemove, event_id); } } else @@ -2039,7 +2036,7 @@ _canvas_event_feed_mouse_move_internal(Eo *eo_e, Evas_Public_Data *e, int x, int _evas_event_havemap_adjust(eo_obj, obj, &ev.cur.canvas.x, &ev.cur.canvas.y, obj->mouse_grabbed); EV_CALL(eo_obj, obj, EVAS_CALLBACK_MOUSE_MOVE, &ev, event_id, pemove, parent_pe); if ((obj->proxy->is_proxy) && (obj->proxy->src_events)) - _evas_event_source_mouse_move_events(eo_obj, eo_e, &ev, event_id, pemove); + _evas_event_source_mouse_move_events(eo_obj, eo_e, pemove, event_id); } } /* otherwise it has left the object */ @@ -2227,7 +2224,7 @@ nogrep: _evas_event_havemap_adjust(eo_obj, obj, &ev.cur.canvas.x, &ev.cur.canvas.y, obj->mouse_grabbed); EV_CALL(eo_obj, obj, EVAS_CALLBACK_MOUSE_MOVE, &ev, event_id, pemove, parent_pe); if ((obj->proxy->is_proxy) && (obj->proxy->src_events)) - _evas_event_source_mouse_move_events(eo_obj, eo_e, &ev, event_id, pemove); + _evas_event_source_mouse_move_events(eo_obj, eo_e, pemove, event_id); } } /* otherwise it has left the object */ |