#define EVAS_EVENT_FEED_SAFETY_CHECK(evas) _evas_event_feed_check(evas)
-static void
-_evas_event_havemap_adjust_f(Evas_Object *eo_obj EINA_UNUSED, Evas_Object_Protected_Data *obj, Eina_Vector2 *point, Eina_Bool mouse_grabbed)
+static Eina_Bool
+_evas_event_havemap_adjust_f_inline(Evas_Object_Protected_Data *obj, Eina_Vector2 *point, Eina_Bool mouse_grabbed)
{
+ Eina_Bool ret = EINA_FALSE;
+
if (obj->smart.parent)
{
Evas_Object_Protected_Data *smart_parent_obj = efl_data_scope_get(obj->smart.parent, EFL_CANVAS_OBJECT_CLASS);
- _evas_event_havemap_adjust_f(obj->smart.parent, smart_parent_obj, point, mouse_grabbed);
+ ret |= _evas_event_havemap_adjust_f_inline(smart_parent_obj, point, mouse_grabbed);
}
- if ((!obj->map->cur.usemap) || (!obj->map->cur.map) ||
- (obj->map->cur.map->count != 4))
- return;
+ if ((!obj->map->cur.usemap) || (!obj->map->cur.map)) return ret;
//FIXME: Unless map_coords_get() supports grab mode and extrapolate coords
//outside map, this should check the return value for outside case.
+
+ //FIXME: When Mouse Out, it fails. but the coordiates might be transformed as well.
if (evas_map_coords_get(obj->map->cur.map, point->x, point->y, &point->x, &point->y, mouse_grabbed))
{
point->x += obj->cur->geometry.x;
point->y += obj->cur->geometry.y;
+ return EINA_TRUE;
}
+ return ret;
+}
+
+static void
+_evas_event_havemap_adjust_f(Evas_Object_Protected_Data *obj, Eina_Vector2 *cur_pt, Eina_Vector2 *prev_pt, Eina_Bool mouse_grabbed)
+{
+ Eina_Vector2 tmp_pt = *cur_pt;
+ if (!_evas_event_havemap_adjust_f_inline(obj, &tmp_pt, mouse_grabbed)) return;
+
+ prev_pt->x += (tmp_pt.x - cur_pt->x);
+ prev_pt->y += (tmp_pt.x - cur_pt->y);
+ *cur_pt = tmp_pt;
}
#if 0
}
static void
-_transform_to_src_space_f(Evas_Object_Protected_Data *obj, Evas_Object_Protected_Data *src, Eina_Vector2 *point)
+_transform_to_src_space_f(Evas_Object_Protected_Data *obj, Evas_Object_Protected_Data *src,
+ Eina_Vector2 *cur_pt, Eina_Vector2 *prev_pt)
{
double obj_w = obj->cur->geometry.w, obj_h = obj->cur->geometry.h;
double src_w = src->cur->geometry.w, src_h = src->cur->geometry.h;
- double tmp_x = point->x;
- double tmp_y = point->y;
- tmp_x -= obj->cur->geometry.x;
- tmp_y -= obj->cur->geometry.y;
+ //Current Point
+ cur_pt->x -= obj->cur->geometry.x;
+ cur_pt->y -= obj->cur->geometry.y;
- if (!EINA_DBL_EQ(obj_w, src_w))
- tmp_x = (tmp_x * (src_w / obj_w));
- if (!EINA_DBL_EQ(obj_h, src_h))
- tmp_y = (tmp_y * (src_h / obj_h));
+ if (!EINA_DBL_EQ(obj_w, src_w)) cur_pt->x *= (src_w / obj_w);
+ if (!EINA_DBL_EQ(obj_h, src_h)) cur_pt->y *= (src_h / obj_h);
- tmp_x += src->cur->geometry.x;
- tmp_y += src->cur->geometry.y;
- point->x = tmp_x;
- point->y = tmp_y;
+ cur_pt->x += src->cur->geometry.x;
+ cur_pt->y += src->cur->geometry.y;
+
+ //Prev Point
+ prev_pt->x -= obj->cur->geometry.x;
+ prev_pt->y -= obj->cur->geometry.y;
+
+ if (!EINA_DBL_EQ(obj_w, src_w)) prev_pt->x *= (src_w / obj_w);
+ if (!EINA_DBL_EQ(obj_h, src_h)) prev_pt->y *= (src_h / obj_h);
+
+ prev_pt->x += src->cur->geometry.x;
+ prev_pt->y += src->cur->geometry.y;
}
static Efl_Input_Device *
Eina_List *copy, *l;
Efl_Input_Pointer_Data *ev;
Efl_Input_Pointer *evt;
- Eina_Vector2 point;
+ Eina_Vector2 cur_pt, prev_pt;
int addgrab = 0;
int no_rep = 0;
int srcgrab = 0;
ev = efl_data_scope_get(evt, EFL_INPUT_POINTER_CLASS);
if (!ev) return;
- _transform_to_src_space_f(obj, src, &ev->cur);
- point = ev->cur;
+ _transform_to_src_space_f(obj, src, &ev->cur, &ev->prev);
+
+ cur_pt = ev->cur;
+ prev_pt = ev->prev;
ev->source = eo_obj;
ev->touch_id = 0;
Evas_Object_Pointer_Mode pointer_mode;
child = efl_data_scope_get(eo_child, EFL_CANVAS_OBJECT_CLASS);
- ev->cur = point;
obj_pdata = _evas_object_pointer_data_get(pdata, child);
if (!obj_pdata)
{
continue;
}
pointer_mode = obj_pdata->pointer_mode;
- _evas_event_havemap_adjust_f(eo_child, child, &ev->cur, obj_pdata->mouse_grabbed);
+
+ ev->cur = cur_pt;
+ ev->prev = prev_pt;
+
+ _evas_event_havemap_adjust_f(child, &ev->cur, &ev->prev, obj_pdata->mouse_grabbed);
+
evas_object_event_callback_call(eo_child, child, EVAS_CALLBACK_MOUSE_DOWN, evt,
event_id, EFL_EVENT_POINTER_DOWN);
if (e->delete_me) break;
Eina_List *l;
Efl_Input_Pointer_Data *ev;
Efl_Input_Pointer *evt;
- Eina_Vector2 curpt, curpt_real, prevpt;
+ Eina_Vector2 cur_pt_real, prev_pt_real, cur_pt, prev_pt;
Evas_Object_Pointer_Data *obj_pdata;
if (obj->delete_me || src->delete_me || e->is_frozen) return;
ev = efl_data_scope_get(evt, EFL_INPUT_POINTER_CLASS);
if (!ev) return;
- curpt_real = ev->cur;
- _transform_to_src_space_f(obj, src, &ev->cur);
- _transform_to_src_space_f(obj, src, &ev->prev);
- curpt = ev->cur;
- prevpt = ev->prev;
+ cur_pt_real = ev->cur;
+ prev_pt_real = ev->prev;
+
+ _transform_to_src_space_f(obj, src, &ev->cur, &ev->prev);
+
+ cur_pt = ev->cur;
+ prev_pt = ev->prev;
ev->source = eo_obj;
ev->touch_id = 0;
if (_evas_event_object_pointer_allow(eo_child, child, obj_pdata))
{
- ev->cur = curpt;
- ev->prev = prevpt;
- _evas_event_havemap_adjust_f(eo_child, child, &ev->cur, obj_pdata->mouse_grabbed);
- _evas_event_havemap_adjust_f(eo_child, child, &ev->prev, obj_pdata->mouse_grabbed);
+ ev->cur = cur_pt;
+ ev->prev = prev_pt;
+
+ _evas_event_havemap_adjust_f(child, &ev->cur, &ev->prev, obj_pdata->mouse_grabbed);
ev->action = EFL_POINTER_ACTION_MOVE;
evas_object_event_callback_call(eo_child, child, EVAS_CALLBACK_MOUSE_MOVE, evt,
if (obj_pdata->mouse_in) continue; /* FIXME: dubious logic! */
_evas_event_mouse_in_set(pdata->seat, child, 0);
if (e->is_frozen) continue;
- ev->cur = curpt_real;
- _evas_event_havemap_adjust_f(eo_child, child, &ev->cur, obj_pdata->mouse_grabbed);
+
+ ev->cur = cur_pt_real;
+ ev->prev = prev_pt_real;
+
+ _evas_event_havemap_adjust_f(child, &ev->cur, &ev->prev, obj_pdata->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->device);
continue;
}
- ev->cur = curpt;
+ ev->cur = cur_pt;
+ ev->prev = prev_pt;
+
+ _evas_event_havemap_adjust_f(child, &ev->cur, &ev->prev, obj_pdata->mouse_grabbed);
+
if (evas_object_is_in_output_rect(eo_child, child,
ev->cur.x, ev->cur.y, 1, 1) &&
_evas_event_object_pointer_allow(eo_child, child, obj_pdata) &&
_evas_event_object_pointer_allow_precise(eo_child, child, ev->cur.x, ev->cur.y, ins))
{
ev->action = EFL_POINTER_ACTION_MOVE;
- _evas_event_havemap_adjust_f(eo_child, child, &ev->cur, obj_pdata->mouse_grabbed);
- evas_object_event_callback_call(eo_child, child, EVAS_CALLBACK_MOUSE_MOVE, evt,
+ evas_object_event_callback_call(eo_child, child, EVAS_CALLBACK_MOUSE_MOVE, evt,
event_id, EFL_EVENT_POINTER_MOVE);
}
else if (obj_pdata->mouse_in)
{
_evas_event_mouse_in_set(pdata->seat, child, 0);
if (e->is_frozen) continue;
- ev->cur = curpt;
- _evas_event_havemap_adjust_f(eo_child, child, &ev->cur, obj_pdata->mouse_grabbed);
ev->action = EFL_POINTER_ACTION_OUT;
evas_object_event_callback_call(eo_child, child, EVAS_CALLBACK_MOUSE_OUT, evt,
event_id, EFL_EVENT_POINTER_OUT);
{
_evas_event_mouse_in_set(pdata->seat, child, 1);
if (e->is_frozen) continue;
- ev->cur = curpt;
- _evas_event_havemap_adjust_f(eo_child, child, &ev->cur, obj_pdata->mouse_grabbed);
+
+ ev->cur = cur_pt;
+ ev->prev = prev_pt;
+
+ _evas_event_havemap_adjust_f(child, &ev->cur, &ev->prev, obj_pdata->mouse_grabbed);
+
ev->action = EFL_POINTER_ACTION_IN;
evas_object_event_callback_call(eo_child, child, EVAS_CALLBACK_MOUSE_IN, evt,
event_id2, EFL_EVENT_POINTER_IN);
- if ((curpt.x != ev->prev.x) &&
- (curpt.y != ev->prev.y))
+ if ((cur_pt.x != prev_pt.x) && (cur_pt.y != prev_pt.y))
{
ev->action = EFL_POINTER_ACTION_MOVE;
evas_object_event_callback_call(eo_child, child, EVAS_CALLBACK_MOUSE_MOVE, evt,
Eina_List *copy, *l;
Efl_Input_Pointer_Data *ev;
Efl_Input_Pointer *evt;
- Eina_Vector2 point;
+ Eina_Vector2 cur_pt, prev_pt;
if (obj->delete_me || src->delete_me || e->is_frozen) return;
ev = efl_data_scope_get(evt, EFL_INPUT_POINTER_CLASS);
if (!ev) return;
- _transform_to_src_space_f(obj, src, &ev->cur);
- point = ev->cur;
+ _transform_to_src_space_f(obj, src, &ev->cur, &ev->prev);
+
+ cur_pt = ev->cur;
+ prev_pt = ev->prev;
ev->source = eo_obj;
ev->touch_id = 0;
pdata->seat->mouse_grabbed--;
}
- ev->cur = point;
pointer_mode = obj_pdata->pointer_mode;
- _evas_event_havemap_adjust_f(eo_child, child, &ev->cur, obj_pdata->mouse_grabbed);
+
+ ev->cur = cur_pt;
+ ev->prev = prev_pt;
+
+ _evas_event_havemap_adjust_f(child, &ev->cur, &ev->prev, obj_pdata->mouse_grabbed);
+
if (cancel)
efl_event_callback_call(eo_child, EFL_EVENT_POINTER_CANCEL, evt);
else
Eina_List *copy, *l;
Efl_Input_Pointer_Data *ev;
Efl_Input_Pointer *evt;
- Eina_Vector2 point;
+ Eina_Vector2 cur_pt, prev_pt;
Evas_Pointer_Data *pdata;
if (obj->delete_me || src->delete_me || obj->layer->evas->is_frozen) return;
pdata = _evas_pointer_data_by_device_get(e, ev->device);
if (!pdata) return;
- _transform_to_src_space_f(obj, src, &ev->cur);
- point = ev->cur;
+ _transform_to_src_space_f(obj, src, &ev->cur, &ev->prev);
+
+ cur_pt = ev->cur;
+ prev_pt = ev->prev;
ev->source = eo_obj;
copy = evas_event_list_copy(src->proxy->src_event_in);
ev->device);
continue;
}
- ev->cur = point;
- _evas_event_havemap_adjust_f(eo_child, child, &ev->cur, obj_pdata->mouse_grabbed);
+ ev->cur = cur_pt;
+ ev->prev = prev_pt;
+ _evas_event_havemap_adjust_f(child, &ev->cur, &ev->prev, obj_pdata->mouse_grabbed);
+
evas_object_event_callback_call(eo_child, child, EVAS_CALLBACK_MOUSE_WHEEL, evt,
event_id, EFL_EVENT_POINTER_WHEEL);
if (e->delete_me) break;
Eina_List *copy, *l;
Efl_Input_Pointer_Data *ev;
Efl_Input_Pointer *evt;
- Eina_Vector2 point;
+ Eina_Vector2 cur_pt, prev_pt;
Evas_Object_Pointer_Data *obj_pdata;
int addgrab = 0;
ev = efl_data_scope_get(evt, EFL_INPUT_POINTER_CLASS);
if (!ev) return;
- _transform_to_src_space_f(obj, src, &ev->cur);
- point = ev->cur;
+ _transform_to_src_space_f(obj, src, &ev->cur, &ev->prev);
+
+ cur_pt = ev->cur;
+ prev_pt = ev->prev;
ev->source = obj->object;
ev->action = EFL_POINTER_ACTION_DOWN;
ev->device);
continue;
}
- ev->cur = point;
- _evas_event_havemap_adjust_f(eo_child, child, &ev->cur, obj_pdata->mouse_grabbed);
+ ev->cur = cur_pt;
+ ev->prev = prev_pt;
+
+ _evas_event_havemap_adjust_f(child, &ev->cur, &ev->prev, obj_pdata->mouse_grabbed);
+
evas_object_event_callback_call(obj->object, obj, EVAS_CALLBACK_MULTI_DOWN, evt,
event_id, EFL_EVENT_FINGER_DOWN);
if (e->delete_me) break;
Eina_List *copy, *l;
Efl_Input_Pointer_Data *ev;
Efl_Input_Pointer *evt;
- Eina_Vector2 point;
+ Eina_Vector2 cur_pt, prev_pt;
if (obj->delete_me || src->delete_me || obj->layer->evas->is_frozen) return;
ev = efl_data_scope_get(evt, EFL_INPUT_POINTER_CLASS);
if (!ev) return;
- _transform_to_src_space_f(obj, src, &ev->cur);
- point = ev->cur;
+ _transform_to_src_space_f(obj, src, &ev->cur, &ev->prev);
+
+ cur_pt = ev->cur;
+ prev_pt = ev->prev;
+
ev->source = obj->object;
ev->action = EFL_POINTER_ACTION_UP;
obj_pdata->mouse_grabbed--;
pdata->seat->mouse_grabbed--;
}
- ev->cur = point;
- _evas_event_havemap_adjust_f(eo_child, child, &ev->cur, obj_pdata->mouse_grabbed);
+ ev->cur = cur_pt;
+ ev->prev = prev_pt;
+ _evas_event_havemap_adjust_f(child, &ev->cur, &ev->prev, obj_pdata->mouse_grabbed);
+
evas_object_event_callback_call(obj->object, obj, EVAS_CALLBACK_MULTI_UP, evt,
event_id, EFL_EVENT_FINGER_UP);
if (e->delete_me || e->is_frozen) break;
Eina_List *copy, *l;
Efl_Input_Pointer_Data *ev;
Efl_Input_Pointer *evt;
- Eina_Vector2 point;
+ Eina_Vector2 cur_pt, prev_pt;
Evas_Object_Pointer_Data *obj_pdata;
Evas *eo_e = e->evas;
ev = efl_data_scope_get(evt, EFL_INPUT_POINTER_CLASS);
if (!ev) return;
- _transform_to_src_space_f(obj, src, &ev->cur);
- point = ev->cur;
+ _transform_to_src_space_f(obj, src, &ev->cur, &ev->prev);
+
+ cur_pt = ev->cur;
+ prev_pt = ev->prev;
ev->source = obj->object;
ev->action = EFL_POINTER_ACTION_UP;
}
if (_evas_event_object_pointer_allow(eo_child, child, obj_pdata))
{
- ev->cur = point;
- _evas_event_havemap_adjust_f(eo_child, child, &ev->cur, obj_pdata->mouse_grabbed);
+ ev->cur = cur_pt;
+ ev->prev = prev_pt;
+ _evas_event_havemap_adjust_f(child, &ev->cur, &ev->prev, obj_pdata->mouse_grabbed);
+
evas_object_event_callback_call(obj->object, obj, EVAS_CALLBACK_MULTI_MOVE, evt,
event_id, EFL_EVENT_FINGER_MOVE);
if (e->delete_me || e->is_frozen) break;
EINA_LIST_FOREACH(copy, l, eo_child)
{
child = efl_data_scope_get(eo_child, EFL_CANVAS_OBJECT_CLASS);
- ev->cur = point;
obj_pdata = _evas_object_pointer_data_get(pdata, child);
if (!obj_pdata)
{
continue;
}
+ ev->cur = cur_pt;
+ ev->prev = prev_pt;
+ _evas_event_havemap_adjust_f(child, &ev->cur, &ev->prev, obj_pdata->mouse_grabbed);
+
if (evas_object_is_in_output_rect(eo_child, child, ev->cur.x, ev->cur.y, 1, 1) &&
_evas_event_object_pointer_allow(eo_child, child, obj_pdata) &&
_evas_event_object_pointer_allow_precise(eo_child, child, ev->cur.x, ev->cur.y, ins))
{
- _evas_event_havemap_adjust_f(eo_child, child, &ev->cur, obj_pdata->mouse_grabbed);
evas_object_event_callback_call(obj->object, obj, EVAS_CALLBACK_MULTI_MOVE, evt,
event_id, EFL_EVENT_FINGER_MOVE);
if (e->delete_me || e->is_frozen) break;
Eina_List *ins = NULL, *l;
Efl_Input_Pointer_Data *ev;
Efl_Input_Pointer *evt;
- Eina_Vector2 point;
+ Eina_Vector2 cur_pt, prev_pt;
Evas_Pointer_Data *pdata;
if (obj->delete_me || src->delete_me || e->is_frozen) return;
pdata = _evas_pointer_data_by_device_get(e, ev->device);
if (!pdata) return;
- _transform_to_src_space_f(obj, src, &ev->cur);
- point = ev->cur;
+ _transform_to_src_space_f(obj, src, &ev->cur, &ev->prev);
+
+ cur_pt = ev->cur;
+ prev_pt = ev->prev;
ev->source = eo_obj;
ev->action = EFL_POINTER_ACTION_IN;
{
if (obj_pdata->mouse_in) continue;
_evas_event_mouse_in_set(pdata->seat, child, 1);
- ev->cur = point;
- _evas_event_havemap_adjust_f(eo_child, child, &ev->cur, obj_pdata->mouse_grabbed);
+
+ ev->cur = cur_pt;
+ ev->prev = prev_pt;
+ _evas_event_havemap_adjust_f(child, &ev->cur, &ev->prev, obj_pdata->mouse_grabbed);
+
ev->action = EFL_POINTER_ACTION_IN;
evas_object_event_callback_call(eo_child, child, EVAS_CALLBACK_MOUSE_IN, evt,
event_id, EFL_EVENT_POINTER_IN);
- if ((ev->cur.x != ev->prev.x) &&
- (ev->cur.y != ev->prev.y))
+ if ((cur_pt.x != prev_pt.x) || (cur_pt.y != prev_pt.y))
{
ev->action = EFL_POINTER_ACTION_MOVE;
evas_object_event_callback_call(eo_child, child, EVAS_CALLBACK_MOUSE_MOVE, evt,
Eina_List *copy, *l;
Efl_Input_Pointer_Data *ev;
Efl_Input_Pointer *evt;
- Eina_Vector2 point;
+ Eina_Vector2 cur_pt, prev_pt;
Evas_Pointer_Data *pdata;
if (obj->delete_me || src->delete_me || e->is_frozen) return;
pdata = _evas_pointer_data_by_device_get(e, ev->device);
if (!pdata) return;
- _transform_to_src_space_f(obj, src, &ev->cur);
- point = ev->cur;
+
+ _transform_to_src_space_f(obj, src, &ev->cur, &ev->prev);
+
+ cur_pt = ev->cur;
+ prev_pt = ev->prev;
ev->source = eo_obj;
ev->action = EFL_POINTER_ACTION_OUT;
_evas_event_mouse_in_set(pdata->seat, child, 0);
if (child->delete_me) continue;
- ev->cur = point;
- _evas_event_havemap_adjust_f(eo_child, child, &ev->cur, obj_pdata->mouse_grabbed);
+ ev->cur = cur_pt;
+ ev->prev = prev_pt;
+ _evas_event_havemap_adjust_f(child, &ev->cur, &ev->prev, obj_pdata->mouse_grabbed);
+
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MOUSE_OUT, evt,
event_id, EFL_EVENT_POINTER_OUT);
if (e->is_frozen) continue;
ev->device);
continue;
}
+ pointer_mode = obj_pdata->pointer_mode;
+
ev->cur.x = pdata->seat->x;
ev->cur.y = pdata->seat->y;
- pointer_mode = obj_pdata->pointer_mode;
- _evas_event_havemap_adjust_f(eo_obj, obj, &ev->cur, obj_pdata->mouse_grabbed);
+ ev->prev.x = pdata->seat->prev.x;
+ ev->prev.y = pdata->seat->prev.y;
+ _evas_event_havemap_adjust_f(obj, &ev->cur, &ev->prev, obj_pdata->mouse_grabbed);
+
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MOUSE_DOWN, evt,
event_id, EFL_EVENT_POINTER_DOWN);
if ((obj->proxy->is_proxy) && (obj->proxy->src_events))
{
ev->cur.x = pdata->seat->x;
ev->cur.y = pdata->seat->y;
- _evas_event_havemap_adjust_f(eo_obj, obj, &ev->cur, obj_pdata->mouse_grabbed);
+ ev->prev.x = pdata->seat->prev.x;
+ ev->prev.y = pdata->seat->prev.y;
+
+ _evas_event_havemap_adjust_f(obj, &ev->cur, &ev->prev, obj_pdata->mouse_grabbed);
+
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MOUSE_OUT, evt,
event_id, EFL_EVENT_POINTER_OUT);
if ((obj->proxy->is_proxy) && (obj->proxy->src_events))
if (obj_pdata->mouse_in) continue;
_evas_event_mouse_in_set(pdata->seat, obj_itr, 1);
if (e->is_frozen) continue;
+
ev->cur.x = pdata->seat->x;
ev->cur.y = pdata->seat->y;
- _evas_event_havemap_adjust_f(eo_obj_itr, obj_itr, &ev->cur, obj_pdata->mouse_grabbed);
+ ev->prev.x = pdata->seat->prev.x;
+ ev->prev.y = pdata->seat->prev.y;
+
+ _evas_event_havemap_adjust_f(obj_itr, &ev->cur, &ev->prev, obj_pdata->mouse_grabbed);
+
ev->action = EFL_POINTER_ACTION_IN;
evas_object_event_callback_call(eo_obj_itr, obj_itr, EVAS_CALLBACK_MOUSE_IN, evt,
event_id, EFL_EVENT_POINTER_IN);
- if ((pdata->seat->x != ev->prev.x) &&
- (pdata->seat->y != ev->prev.y))
+ if ((pdata->seat->x != pdata->seat->prev.x) && (pdata->seat->y != pdata->seat->prev.y))
{
ev->action = EFL_POINTER_ACTION_MOVE;
evas_object_event_callback_call(eo_obj_itr, obj_itr, EVAS_CALLBACK_MOUSE_MOVE, evt,
{
ev->cur.x = pdata->seat->x;
ev->cur.y = pdata->seat->y;
- _evas_event_havemap_adjust_f(eo_obj, obj, &ev->cur, obj_pdata->mouse_grabbed);
+ ev->prev.x = pdata->seat->prev.x;
+ ev->prev.y = pdata->seat->prev.y;
+
+ _evas_event_havemap_adjust_f(obj, &ev->cur, &ev->prev, obj_pdata->mouse_grabbed);
+
if (cancel)
efl_event_callback_call(eo_obj, EFL_EVENT_POINTER_CANCEL, evt);
else
}
ev->cur.x = pdata->seat->x;
ev->cur.y = pdata->seat->y;
- _evas_event_havemap_adjust_f(eo_obj, obj, &ev->cur, obj_pdata->mouse_grabbed);
+ ev->prev.x = pdata->seat->prev.x;
+ ev->prev.y = pdata->seat->prev.y;
+
+ _evas_event_havemap_adjust_f(obj, &ev->cur, &ev->prev, obj_pdata->mouse_grabbed);
+
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MOUSE_WHEEL, evt,
event_id, EFL_EVENT_POINTER_WHEEL);
if ((obj->proxy->is_proxy) && (obj->proxy->src_events))
Efl_Input_Pointer *evt;
Eina_List *l, *copy;
Evas_Object *eo_obj;
- Eina_Vector2 point;
+ Eina_Vector2 cur_pt, prev_pt;
Evas *eo_e;
int event_id;
- int x, y, px, py;
Evas_Pointer_Data *pdata;
Evas_Object_Pointer_Data *obj_pdata;
eo_e = e->evas;
e->last_timestamp = ev->timestamp;
+ ev->prev.x = pdata->seat->x;
+ ev->prev.y = pdata->seat->y;
+
// prev pos
- pdata->seat->prev.x = pdata->seat->x;
- pdata->seat->prev.y = pdata->seat->y;
- px = ev->prev.x = pdata->seat->x;
- py = ev->prev.y = pdata->seat->y;
+ prev_pt.x = pdata->seat->prev.x = ev->prev.x;
+ prev_pt.y = pdata->seat->prev.y = ev->prev.y;
// new pos
- x = pdata->seat->x = ev->cur.x;
- y = pdata->seat->y = ev->cur.y;
- point = ev->cur;
+ cur_pt.x = pdata->seat->x = ev->cur.x;
+ cur_pt.y = pdata->seat->y = ev->cur.y;
if ((!pdata->seat->inside) && (pdata->seat->mouse_grabbed == 0)) return;
_evas_walk(e);
/* update moved touch point */
- if ((px != x) || (py != y))
+ if ((prev_pt.x != cur_pt.x) || (prev_pt.y != cur_pt.y))
_evas_touch_point_update(eo_e, 0, pdata->seat->x, pdata->seat->y, EVAS_TOUCH_POINT_MOVE);
/* if our mouse button is grabbed to any objects */
if (pdata->seat->mouse_grabbed > 0)
(!evas_object_is_source_invisible(eo_obj, obj) ||
obj_pdata->mouse_grabbed))
{
- if ((px != x) || (py != y))
+ ev->cur = cur_pt;
+ ev->prev = prev_pt;
+
+ if ((prev_pt.x != cur_pt.x) || (prev_pt.y != cur_pt.y))
{
- ev->cur = point;
- _evas_event_havemap_adjust_f(eo_obj, obj, &ev->cur, obj_pdata->mouse_grabbed);
+ _evas_event_havemap_adjust_f(obj, &ev->cur, &ev->prev, obj_pdata->mouse_grabbed);
+
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MOUSE_MOVE, evt,
event_id, EFL_EVENT_POINTER_MOVE);
if ((obj->proxy->is_proxy) && (obj->proxy->src_events))
_evas_event_mouse_in_set(pdata->seat, obj, 0);
if (obj->delete_me || e->is_frozen) continue;
pdata->seat->object.in = eina_list_remove(pdata->seat->object.in, eo_obj);
- ev->cur = point;
- _evas_event_havemap_adjust_f(eo_obj, obj, &ev->cur, obj_pdata->mouse_grabbed);
+
+ ev->cur = cur_pt;
+ ev->prev = prev_pt;
+
+ _evas_event_havemap_adjust_f(obj, &ev->cur, &ev->prev, obj_pdata->mouse_grabbed);
+
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MOUSE_OUT, evt,
event_id, EFL_EVENT_POINTER_OUT);
if ((obj->proxy->is_proxy) && (obj->proxy->src_events))
event_id = _evas_object_event_new();
/* get all new in objects */
- ins = evas_event_objects_event_list(eo_e, NULL, x, y);
+ ins = evas_event_objects_event_list(eo_e, NULL, cur_pt.x, cur_pt.y);
/* go thru old list of in objects */
copy = evas_event_list_copy(pdata->seat->object.in);
EINA_LIST_FOREACH(copy, l, eo_obj)
/* in list */
// FIXME: i don't think we need this
// evas_object_clip_recalc(eo_obj);
+
+ ev->cur = cur_pt;
+ ev->prev = prev_pt;
+
+ _evas_event_havemap_adjust_f(obj, &ev->cur, &ev->prev, obj_pdata->mouse_grabbed);
+
if ((!e->is_frozen) &&
- evas_object_is_in_output_rect(eo_obj, obj, x, y, 1, 1) &&
+ (evas_object_is_in_output_rect(eo_obj, obj, ev->cur.x, ev->cur.y, 1, 1)) &&
_evas_event_object_pointer_allow(eo_obj, obj, obj_pdata) &&
- _evas_event_object_pointer_allow_precise(eo_obj, obj, x, y, ins) &&
- (!evas_object_is_source_invisible(eo_obj, obj) ||
- obj_pdata->mouse_grabbed))
+ _evas_event_object_pointer_allow_precise(eo_obj, obj, ev->cur.x, ev->cur.y, ins) &&
+ (obj_pdata->mouse_grabbed || !evas_object_is_source_invisible(eo_obj, obj)))
{
- if ((px != x) || (py != y))
+ if ((prev_pt.x != cur_pt.x) || (prev_pt.y != cur_pt.y))
{
- ev->cur = point;
- _evas_event_havemap_adjust_f(eo_obj, obj, &ev->cur, obj_pdata->mouse_grabbed);
ev->action = EFL_POINTER_ACTION_MOVE;
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MOUSE_MOVE, evt,
event_id, EFL_EVENT_POINTER_MOVE);
{
_evas_event_mouse_in_set(pdata->seat, obj, 0);
if (e->is_frozen) continue;
- ev->cur = point;
- _evas_event_havemap_adjust_f(eo_obj, obj, &ev->cur, obj_pdata->mouse_grabbed);
ev->action = EFL_POINTER_ACTION_OUT;
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MOUSE_OUT, evt,
event_id, EFL_EVENT_POINTER_OUT);
{
_evas_event_mouse_in_set(pdata->seat, obj, 1);
if (e->is_frozen) continue;
- ev->cur = point;
- _evas_event_havemap_adjust_f(eo_obj, obj, &ev->cur, obj_pdata->mouse_grabbed);
+
+ ev->cur = cur_pt;
+ ev->prev = prev_pt;
+
+ _evas_event_havemap_adjust_f(obj, &ev->cur, &ev->prev, obj_pdata->mouse_grabbed);
+
ev->action = EFL_POINTER_ACTION_IN;
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MOUSE_IN, evt,
event_id, EFL_EVENT_POINTER_IN);
- if ((point.x != ev->prev.x) &&
- (point.y != ev->prev.y))
+ if ((prev_pt.x != cur_pt.x) || (prev_pt.y != cur_pt.y))
{
ev->action = EFL_POINTER_ACTION_MOVE;
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MOUSE_MOVE, evt,
event_id, EFL_EVENT_POINTER_MOVE);
}
- if ((obj->proxy->is_proxy) &&
- (obj->proxy->src_events))
+ if ((obj->proxy->is_proxy) && (obj->proxy->src_events))
_evas_event_source_mouse_in_events(eo_obj, eo_e, evt, event_id);
+
if (e->delete_me) break;
}
}
/* in list */
// FIXME: i don't think we need this
// evas_object_clip_recalc(eo_obj);
+
+ ev->cur = cur_pt;
+ ev->prev = prev_pt;
+
+ _evas_event_havemap_adjust_f(obj, &ev->cur, &ev->prev, obj_pdata->mouse_grabbed);
+
if ((!e->is_frozen) &&
- evas_object_is_in_output_rect(eo_obj, obj, x, y, 1, 1) &&
+ evas_object_is_in_output_rect(eo_obj, obj, ev->cur.x, ev->cur.y, 1, 1) &&
_evas_event_object_pointer_allow(eo_obj, obj, obj_pdata) &&
- _evas_event_object_pointer_allow_precise(eo_obj, obj, x, y, newin) &&
- (!evas_object_is_source_invisible(eo_obj, obj) ||
- obj_pdata->mouse_grabbed))
+ _evas_event_object_pointer_allow_precise(eo_obj, obj, ev->cur.x, ev->cur.y, newin) &&
+ (obj_pdata->mouse_grabbed || !evas_object_is_source_invisible(eo_obj, obj)))
{
- if ((px != x) || (py != y))
+ if ((prev_pt.x != cur_pt.x) || (prev_pt.y != cur_pt.y))
{
- ev->cur = point;
- _evas_event_havemap_adjust_f(eo_obj, obj, &ev->cur, obj_pdata->mouse_grabbed);
ev->action = EFL_POINTER_ACTION_MOVE;
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MOUSE_MOVE, evt,
event_id, EFL_EVENT_POINTER_MOVE);
if (!obj_pdata->mouse_in) continue;
_evas_event_mouse_in_set(pdata->seat, obj, 0);
if (e->is_frozen) continue;
- ev->cur = point;
- _evas_event_havemap_adjust_f(eo_obj, obj, &ev->cur, obj_pdata->mouse_grabbed);
ev->action = EFL_POINTER_ACTION_OUT;
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MOUSE_OUT, evt,
event_id, EFL_EVENT_POINTER_OUT);
if (obj_pdata->mouse_in) continue;
_evas_event_mouse_in_set(pdata->seat, obj, 1);
if (e->is_frozen) continue;
- ev->cur = point;
- _evas_event_havemap_adjust_f(eo_obj, obj, &ev->cur, obj_pdata->mouse_grabbed);
+
+ ev->cur = cur_pt;
+ ev->prev = prev_pt;
+
+ _evas_event_havemap_adjust_f(obj, &ev->cur, &ev->prev, obj_pdata->mouse_grabbed);
+
ev->action = EFL_POINTER_ACTION_IN;
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MOUSE_IN, evt,
event_id, EFL_EVENT_POINTER_IN);
- if ((point.x != ev->prev.x) &&
- (point.y != ev->prev.y))
+ if ((prev_pt.x != cur_pt.x) || (prev_pt.y != cur_pt.y))
{
ev->action = EFL_POINTER_ACTION_MOVE;
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MOUSE_MOVE, evt,
}
if (obj_pdata->mouse_in) continue;
_evas_event_mouse_in_set(pdata->seat, obj, 1);
+
ev->cur.x = pdata->seat->x;
ev->cur.y = pdata->seat->y;
- _evas_event_havemap_adjust_f(eo_obj, obj, &ev->cur, obj_pdata->mouse_grabbed);
+ ev->prev.x = pdata->seat->prev.x;
+ ev->prev.y = pdata->seat->prev.y;
+ _evas_event_havemap_adjust_f(obj, &ev->cur, &ev->prev, obj_pdata->mouse_grabbed);
+
ev->action = EFL_POINTER_ACTION_IN;
efl_ref(eo_obj);
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MOUSE_IN, evt,
}
if (!obj_pdata->mouse_in) continue;
_evas_event_mouse_in_set(pdata->seat, obj, 0);
+ efl_ref(eo_obj);
+
ev->cur.x = pdata->seat->x;
ev->cur.y = pdata->seat->y;
- efl_ref(eo_obj);
- _evas_event_havemap_adjust_f(eo_obj, obj, &ev->cur, obj_pdata->mouse_grabbed);
+ ev->prev.x = pdata->seat->prev.x;
+ ev->prev.y = pdata->seat->prev.y;
+ _evas_event_havemap_adjust_f(obj, &ev->cur, &ev->prev, obj_pdata->mouse_grabbed);
+
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MOUSE_OUT, evt,
event_id, EFL_EVENT_POINTER_OUT);
if ((obj->proxy->is_proxy) && (obj->proxy->src_events))
continue;
}
ev->cur = point;
- _evas_event_havemap_adjust_f(eo_obj, obj, &ev->cur, obj_pdata->mouse_grabbed);
+ ev->prev.x = pdata->seat->prev.x;
+ ev->prev.y = pdata->seat->prev.y;
+ _evas_event_havemap_adjust_f(obj, &ev->cur, &ev->prev, obj_pdata->mouse_grabbed);
+
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MULTI_DOWN, evt,
event_id, EFL_EVENT_FINGER_DOWN);
if ((obj->proxy->is_proxy) || (obj->proxy->src_events))
continue;
}
ev->cur = point;
- _evas_event_havemap_adjust_f(eo_obj, obj, &ev->cur, obj_pdata->mouse_grabbed);
+ ev->prev.x = pdata->seat->prev.x;
+ ev->prev.y = pdata->seat->prev.y;
+
+ _evas_event_havemap_adjust_f(obj, &ev->cur, &ev->prev, obj_pdata->mouse_grabbed);
if (((obj_pdata->pointer_mode == EVAS_OBJECT_POINTER_MODE_AUTOGRAB) ||
(obj_pdata->pointer_mode == EVAS_OBJECT_POINTER_MODE_NOGRAB_NO_REPEAT_UPDOWN)) &&
(obj_pdata->mouse_grabbed > 0))
Efl_Input_Pointer *evt;
Eina_List *l, *copy;
Evas_Object *eo_obj;
- Eina_Vector2 point;
+ Eina_Vector2 cur_pt, prev_pt;
Evas *eo_e;
int event_id;
Evas_Pointer_Data *pdata;
ev->value_flags |= value_flags;
if (ev->device) efl_ref(ev->device);
- point = ev->cur;
+ cur_pt = ev->cur;
+ prev_pt = ev->prev;
_evas_walk(e);
/* update moved touch point */
(!evas_object_is_source_invisible(eo_obj, obj) ||
obj_pdata->mouse_grabbed))
{
- ev->cur = point;
- _evas_event_havemap_adjust_f(eo_obj, obj, &ev->cur, obj_pdata->mouse_grabbed);
+ ev->cur = cur_pt;
+ ev->prev = prev_pt;
+ _evas_event_havemap_adjust_f(obj, &ev->cur, &ev->prev, obj_pdata->mouse_grabbed);
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MULTI_MOVE, evt,
event_id, EFL_EVENT_FINGER_MOVE);
if ((obj->proxy->is_proxy) || (obj->proxy->src_events))
/* in list */
// FIXME: i don't think we need this
// evas_object_clip_recalc(eo_obj);
+
+ ev->cur = cur_pt;
+ ev->prev = prev_pt;
+
+ _evas_event_havemap_adjust_f(obj, &ev->cur, &ev->prev, obj_pdata->mouse_grabbed);
+
if (evas_object_is_in_output_rect(eo_obj, obj, ev->cur.x, ev->cur.y, 1, 1) &&
_evas_event_object_pointer_allow(eo_obj, obj, obj_pdata) &&
_evas_event_object_pointer_allow_precise(eo_obj, obj, ev->cur.x, ev->cur.y, ins) &&
- (!evas_object_is_source_invisible(eo_obj, obj) ||
- obj_pdata->mouse_grabbed))
+ (obj_pdata->mouse_grabbed || !evas_object_is_source_invisible(eo_obj, obj)))
{
- ev->cur = point;
- _evas_event_havemap_adjust_f(eo_obj, obj, &ev->cur, obj_pdata->mouse_grabbed);
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MULTI_MOVE, evt,
event_id, EFL_EVENT_FINGER_MOVE);
if ((obj->proxy->is_proxy) || (obj->proxy->src_events))