evas/event - don't transform the output in the source events.

and use the Point structure for clean code.

Signed-Off-By: Leandro Dorileo<dorileo@profusion.mobi>
Signed-Off-By: ChunEon Park<hermet@hermet.pe.kr>



SVN revision: 79224
This commit is contained in:
ChunEon Park 2012-11-13 10:59:38 +00:00
parent 9cf4d766ab
commit b313edd3e4
1 changed files with 32 additions and 105 deletions

View File

@ -194,29 +194,23 @@ _evas_event_source_mouse_down_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Event
Evas_Object *eo_src = _evas_object_image_source_get(eo_obj);
Evas_Object_Protected_Data *src = eo_data_get(eo_src, EVAS_OBJ_CLASS);
Evas_Public_Data *e = eo_data_get(eo_e, EVAS_CLASS);
Evas_Point output = ev->output;
Evas_Coord_Point canvas = ev->canvas;
if (obj->delete_me || src->delete_me || e->is_frozen) return;
_transform_to_src_space(obj, src, &ev->canvas.x, &ev->canvas.y);
ev->output.x = ev->canvas.x;
ev->output.y = ev->canvas.y;
if (src->proxy.src_event_in)
src->proxy.src_event_in = eina_list_free(src->proxy.src_event_in);
int no_rep = 0;
Eina_List *l;
Evas_Object *eo_child;
Evas_Object_Protected_Data *child;
if (src->is_smart)
{
src->proxy.src_event_in =
_evas_event_object_list_raw_in_get(eo_e, src->proxy.src_event_in,
evas_object_smart_members_get_direct(eo_src),
NULL, ev->canvas.x, ev->canvas.y, &no_rep, EINA_TRUE);
src->proxy.src_event_in = _evas_event_object_list_raw_in_get(eo_e, src->proxy.src_event_in, evas_object_smart_members_get_direct(eo_src), NULL, ev->canvas.x, ev->canvas.y, &no_rep, EINA_TRUE);
}
else
src->proxy.src_event_in = eina_list_append(src->proxy.src_event_in, eo_src);
@ -226,8 +220,6 @@ _evas_event_source_mouse_down_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Event
EINA_LIST_FOREACH(src->proxy.src_event_in, l, eo_child)
{
Evas_Object_Protected_Data *child;
child = eo_data_get(eo_child, EVAS_OBJ_CLASS);
if ((child->pointer_mode == EVAS_OBJECT_POINTER_MODE_AUTOGRAB) ||
(child->pointer_mode == EVAS_OBJECT_POINTER_MODE_NOGRAB_NO_REPEAT_UPDOWN))
@ -243,17 +235,12 @@ _evas_event_source_mouse_down_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Event
}
}
Evas_Coord point_x = ev->canvas.x;
Evas_Coord point_y = ev->canvas.y;
Evas_Coord_Point point = ev->canvas;
Eina_List *copy = evas_event_list_copy(src->proxy.src_event_in);
EINA_LIST_FOREACH(copy, l, eo_child)
{
Evas_Object_Protected_Data *child;
child = eo_data_get(eo_child, EVAS_OBJ_CLASS);
ev->canvas.x = point_x;
ev->canvas.y = point_y;
ev->canvas = point;
_evas_event_framespace_adjust(eo_child, &ev->canvas.x,
&ev->canvas.y);
_evas_event_havemap_adjust(eo_child, child, &ev->canvas.x,
@ -268,7 +255,6 @@ _evas_event_source_mouse_down_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Event
}
eina_list_free(copy);
ev->canvas = canvas;
ev->output = output;
}
static void
@ -278,21 +264,17 @@ _evas_event_source_mouse_move_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Event
Evas_Object *eo_src = _evas_object_image_source_get(eo_obj);
Evas_Object_Protected_Data *src = eo_data_get(eo_src, EVAS_OBJ_CLASS);
Evas_Public_Data *e = eo_data_get(eo_e, EVAS_CLASS);
Evas_Position cur_pos = ev->cur;
Evas_Coord_Point canvas = ev->cur.canvas;
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->cur.output.x = ev->cur.canvas.x;
ev->cur.output.y = ev->cur.canvas.y;
//FIXME: transform previous coords also.
Eina_List *l;
Evas_Object *eo_child;
Evas_Object_Protected_Data *child;
Evas_Coord point_x = ev->cur.canvas.x;
Evas_Coord point_y = ev->cur.canvas.y;
Evas_Coord_Point point = ev->cur.canvas;
if (e->pointer.mouse_grabbed)
{
@ -308,8 +290,7 @@ _evas_event_source_mouse_move_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Event
(!evas_event_freezes_through(eo_child, child)) &&
(!child->clip.clipees))
{
ev->cur.canvas.x = point_x;
ev->cur.canvas.y = point_y;
ev->cur.canvas = point;
_evas_event_framespace_adjust(eo_child, &ev->cur.canvas.x,
&ev->cur.canvas.y);
_evas_event_havemap_adjust(eo_child, child, &ev->cur.canvas.x,
@ -338,8 +319,7 @@ _evas_event_source_mouse_move_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Event
if (child->mouse_in) continue;
child->mouse_in = 0;
if (child->delete_me || e->is_frozen) continue;
ev->cur.canvas.x = cur_pos.canvas.x;
ev->cur.canvas.y = cur_pos.canvas.y;
ev->cur.canvas = canvas;
_evas_event_framespace_adjust(eo_child, &ev->cur.canvas.x,
&ev->cur.canvas.y);
_evas_event_havemap_adjust(eo_child, child, &ev->cur.canvas.x,
@ -369,8 +349,7 @@ _evas_event_source_mouse_move_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Event
{
child = eo_data_get(eo_child, EVAS_OBJ_CLASS);
ev->cur.canvas.x = point_x;
ev->cur.canvas.y = point_y;
ev->cur.canvas = point;
if (evas_object_is_in_output_rect(eo_child, child,
ev->cur.canvas.x,
@ -398,8 +377,7 @@ _evas_event_source_mouse_move_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Event
{
child->mouse_in = 0;
if (e->is_frozen) continue;
ev->cur.canvas.x = point_x;
ev->cur.canvas.y = point_y;
ev->cur.canvas = point;
_evas_event_framespace_adjust(eo_child,
&ev->cur.canvas.x,
&ev->cur.canvas.y);
@ -427,8 +405,7 @@ _evas_event_source_mouse_move_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Event
{
child->mouse_in = 1;
if (e->is_frozen) continue;
ev->cur.canvas.x = point_x;
ev->cur.canvas.y = point_y;
ev->cur.canvas = point;
_evas_event_framespace_adjust(eo_child,
&ev->cur.canvas.x,
&ev->cur.canvas.y);
@ -454,8 +431,7 @@ _evas_event_source_mouse_move_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Event
if (ins) eina_list_free(ins);
}
}
ev->cur = cur_pos;
ev->cur.canvas = canvas;
}
static void
@ -465,21 +441,16 @@ _evas_event_source_mouse_up_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Event_M
Evas_Object *eo_src = _evas_object_image_source_get(eo_obj);
Evas_Object_Protected_Data *src = eo_data_get(eo_src, EVAS_OBJ_CLASS);
Evas_Public_Data *e = eo_data_get(eo_e, EVAS_CLASS);
Evas_Point output = ev->output;
Evas_Coord_Point canvas = ev->canvas;
if (obj->delete_me || src->delete_me || e->is_frozen) return;
_transform_to_src_space(obj, src, &ev->canvas.x, &ev->canvas.y);
ev->output.x = ev->canvas.x;
ev->output.y = ev->canvas.y;
Eina_List *l;
Evas_Object *eo_child;
Evas_Object_Protected_Data *child;
Evas_Coord point_x = ev->canvas.x;
Evas_Coord point_y = ev->canvas.y;
Evas_Coord_Point point = ev->canvas;
Eina_List *copy = evas_event_list_copy(src->proxy.src_event_in);
EINA_LIST_FOREACH(copy, l, eo_child)
@ -493,8 +464,7 @@ _evas_event_source_mouse_up_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Event_M
e->pointer.mouse_grabbed--;
}
ev->canvas.x = point_x;
ev->canvas.y = point_y;
ev->canvas = point;
_evas_event_framespace_adjust(eo_child,
&ev->canvas.x,
&ev->canvas.y);
@ -515,7 +485,6 @@ _evas_event_source_mouse_up_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Event_M
eina_list_free(copy);
ev->canvas = canvas;
ev->output = output;
}
static void
@ -547,29 +516,23 @@ _evas_event_source_wheel_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Event_Mous
Evas_Object *eo_src = _evas_object_image_source_get(eo_obj);
Evas_Object_Protected_Data *src = eo_data_get(eo_src, EVAS_OBJ_CLASS);
Evas_Public_Data *e = eo_data_get(eo_e, EVAS_CLASS);
Evas_Point output = ev->output;
Evas_Coord_Point canvas = ev->canvas;
if (obj->delete_me || src->delete_me || obj->layer->evas->is_frozen) return;
_transform_to_src_space(obj, src, &ev->canvas.x, &ev->canvas.y);
ev->output.x = ev->canvas.x;
ev->output.y = ev->canvas.y;
Eina_List *l;
Evas_Object *eo_child;
Evas_Object_Protected_Data *child;
Evas_Coord point_x = ev->canvas.x;
Evas_Coord point_y = ev->canvas.y;
Evas_Coord_Point point = ev->canvas;
Eina_List *copy = evas_event_list_copy(src->proxy.src_event_in);
EINA_LIST_FOREACH(copy, l, eo_child)
{
if (src->delete_me) return;
child = eo_data_get(eo_child, EVAS_OBJ_CLASS);
ev->canvas.x = point_x;
ev->canvas.y = point_y;
ev->canvas = point;
_evas_event_framespace_adjust(eo_child,
&ev->canvas.x,
&ev->canvas.y);
@ -583,7 +546,6 @@ _evas_event_source_wheel_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Event_Mous
}
eina_list_free(copy);
ev->canvas = canvas;
ev->output = output;
}
static void
@ -593,7 +555,6 @@ _evas_event_source_multi_down_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Event
Evas_Object *eo_src = _evas_object_image_source_get(eo_obj);
Evas_Object_Protected_Data *src = eo_data_get(eo_src, EVAS_OBJ_CLASS);
Evas_Public_Data *e = eo_data_get(eo_e, EVAS_CLASS);
Evas_Point output = ev->output;
Evas_Coord_Precision_Point canvas = ev->canvas;
if (obj->delete_me || src->delete_me || obj->layer->evas->is_frozen) return;
@ -601,19 +562,15 @@ _evas_event_source_multi_down_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Event
_transform_to_src_space(obj, src, &ev->canvas.x, &ev->canvas.y);
//FIXME: transform precision
ev->output.x = ev->canvas.x;
ev->output.y = ev->canvas.y;
Eina_List *l;
Evas_Object *eo_child;
Evas_Object_Protected_Data *child = NULL;
int addgrab = 0;
if (e->pointer.downs > 1) addgrab = e->pointer.downs - 1;
EINA_LIST_FOREACH(src->proxy.src_event_in, l, eo_child)
{
Evas_Object_Protected_Data *child;
child = eo_data_get(eo_child, EVAS_OBJ_CLASS);
if (child->pointer_mode != EVAS_OBJECT_POINTER_MODE_NOGRAB)
{
@ -622,17 +579,12 @@ _evas_event_source_multi_down_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Event
}
}
Evas_Coord_Precision_Point point = ev->canvas;
Eina_List *copy = evas_event_list_copy(src->proxy.src_event_in);
EINA_LIST_FOREACH(copy, l, eo_child)
{
Evas_Coord point_x = ev->canvas.x;
Evas_Coord point_y = ev->canvas.y;
Evas_Object_Protected_Data *child;
child = eo_data_get(eo_child, EVAS_OBJ_CLASS);
ev->canvas.x = point_x;
ev->canvas.y = point_y;
ev->canvas = point;
_evas_event_framespace_adjust(eo_child,
&ev->canvas.x,
&ev->canvas.y);
@ -640,6 +592,7 @@ _evas_event_source_multi_down_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Event
&ev->canvas.x,
&ev->canvas.y,
child->mouse_grabbed);
child = eo_data_get(eo_child, EVAS_OBJ_CLASS);
evas_object_event_callback_call(eo_child, child,
EVAS_CALLBACK_MULTI_DOWN, ev, event_id);
if (e->delete_me) break;
@ -647,7 +600,6 @@ _evas_event_source_multi_down_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Event
eina_list_free(copy);
ev->canvas = canvas;
ev->output = output;
}
static void
@ -657,7 +609,6 @@ _evas_event_source_multi_up_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Event_M
Evas_Object *eo_src = _evas_object_image_source_get(eo_obj);
Evas_Object_Protected_Data *src = eo_data_get(eo_src, EVAS_OBJ_CLASS);
Evas_Public_Data *e = eo_data_get(eo_e, EVAS_CLASS);
Evas_Point output = ev->output;
Evas_Coord_Precision_Point canvas = ev->canvas;
if (obj->delete_me || src->delete_me || obj->layer->evas->is_frozen) return;
@ -665,11 +616,7 @@ _evas_event_source_multi_up_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Event_M
_transform_to_src_space(obj, src, &ev->canvas.x, &ev->canvas.y);
//FIXME: transform precision
ev->output.x = ev->canvas.x;
ev->output.y = ev->canvas.y;
Evas_Coord point_x = ev->canvas.x;
Evas_Coord point_y = ev->canvas.y;
Evas_Coord_Precision_Point point = ev->canvas;
Eina_List *copy = evas_event_list_copy(src->proxy.src_event_in);
@ -678,8 +625,7 @@ _evas_event_source_multi_up_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Event_M
Evas_Object_Protected_Data *child = NULL;
EINA_LIST_FOREACH(copy, l, eo_child)
{
ev->canvas.x = point_x;
ev->canvas.y = point_y;
ev->canvas = point;
if ((child->pointer_mode != EVAS_OBJECT_POINTER_MODE_NOGRAB) &&
(child->mouse_grabbed > 0))
{
@ -701,7 +647,6 @@ _evas_event_source_multi_up_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Event_M
eina_list_free(copy);
ev->canvas = canvas;
ev->output = output;
}
static void
@ -711,18 +656,15 @@ _evas_event_source_multi_move_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Event
Evas_Object *eo_src = _evas_object_image_source_get(eo_obj);
Evas_Object_Protected_Data *src = eo_data_get(eo_src, EVAS_OBJ_CLASS);
Evas_Public_Data *e = eo_data_get(eo_e, EVAS_CLASS);
Evas_Precision_Position cur_pos = ev->cur;
Evas_Coord_Precision_Point canvas = ev->cur.canvas;
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->cur.output.x = ev->cur.canvas.x;
ev->cur.output.y = ev->cur.canvas.y;
//FIXME: transform precision
Evas_Coord point_x = ev->cur.canvas.x;
Evas_Coord point_y = ev->cur.canvas.y;
Evas_Coord_Precision_Point point = ev->cur.canvas;
_evas_object_event_new();
event_id = _evas_event_counter;
@ -742,8 +684,7 @@ _evas_event_source_multi_move_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Event
(!evas_event_freezes_through(eo_child, child)) &&
(!child->clip.clipees))))
{
ev->cur.canvas.x = point_x;
ev->cur.canvas.y = point_y;
ev->cur.canvas = point;
_evas_event_framespace_adjust(eo_child,
&ev->cur.canvas.x,
&ev->cur.canvas.y);
@ -775,8 +716,7 @@ _evas_event_source_multi_move_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Event
EINA_LIST_FOREACH(copy, l, eo_child)
{
child = eo_data_get(eo_child, EVAS_OBJ_CLASS);
ev->cur.canvas.x = point_x;
ev->cur.canvas.y = point_y;
ev->cur.canvas = point;
if (evas_object_is_in_output_rect(eo_child, child,
ev->cur.canvas.x,
@ -815,7 +755,7 @@ _evas_event_source_multi_move_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Event
eina_list_free(ins);
}
ev->cur = cur_pos;
ev->cur.canvas = canvas;
}
static void
@ -825,15 +765,12 @@ _evas_event_source_mouse_in_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Event_
Evas_Object *eo_src = _evas_object_image_source_get(eo_obj);
Evas_Object_Protected_Data *src = eo_data_get(eo_src, EVAS_OBJ_CLASS);
Evas_Public_Data *e = eo_data_get(eo_e, EVAS_CLASS);
Evas_Point output = ev->output;
Evas_Coord_Point canvas = ev->canvas;
if (obj->delete_me || src->delete_me || e->is_frozen) return;
_transform_to_src_space(obj, src, &ev->canvas.x, &ev->canvas.y);
ev->output.x = ev->canvas.x;
ev->output.y = ev->canvas.y;
Eina_List *ins = NULL;
if (src->is_smart)
{
@ -844,8 +781,7 @@ _evas_event_source_mouse_in_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Event_
else
ins = eina_list_append(ins, eo_src);
Evas_Coord point_x = ev->canvas.x;
Evas_Coord point_y = ev->canvas.y;
Evas_Coord_Point point = ev->canvas;
Eina_List *l;
Evas_Object *eo_child;
EINA_LIST_FOREACH(ins, l, eo_child)
@ -857,8 +793,7 @@ _evas_event_source_mouse_in_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Event_
if(child->mouse_in) continue;
child->mouse_in = 1;
ev->canvas.x = point_x;
ev->canvas.y = point_y;
ev->canvas = point;
_evas_event_framespace_adjust(eo_child, &ev->canvas.x,
&ev->canvas.y);
@ -875,7 +810,6 @@ _evas_event_source_mouse_in_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Event_
src->proxy.src_event_in = ins;
ev->canvas = canvas;
ev->output = output;
}
static void
@ -885,21 +819,16 @@ _evas_event_source_mouse_out_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Event_
Evas_Object *eo_src = _evas_object_image_source_get(eo_obj);
Evas_Object_Protected_Data *src = eo_data_get(eo_src, EVAS_OBJ_CLASS);
Evas_Public_Data *e = eo_data_get(eo_e, EVAS_CLASS);
Evas_Point output = ev->output;
Evas_Coord_Point canvas = ev->canvas;
if (obj->delete_me || src->delete_me || e->is_frozen) return;
_transform_to_src_space(obj, src, &ev->canvas.x, &ev->canvas.y);
ev->output.x = ev->canvas.x;
ev->output.y = ev->canvas.y;
Eina_List *l;
Evas_Object *eo_child;
Eina_List *copy = evas_event_list_copy(src->proxy.src_event_in);
Evas_Coord point_x = ev->canvas.x;
Evas_Coord point_y = ev->canvas.y;
Evas_Coord_Point point = ev->canvas;
EINA_LIST_FOREACH(copy, l, eo_child)
{
@ -910,8 +839,7 @@ _evas_event_source_mouse_out_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Event_
if (child->delete_me) continue;
ev->canvas.x = point_x;
ev->canvas.y = point_y;
ev->canvas = point;
_evas_event_framespace_adjust(eo_child, &ev->canvas.x, &ev->canvas.y);
_evas_event_havemap_adjust(eo_child, child, &ev->canvas.x,
@ -925,7 +853,6 @@ _evas_event_source_mouse_out_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Event_
src->proxy.src_event_in = eina_list_free(src->proxy.src_event_in);
ev->canvas = canvas;
ev->output = output;
}
static Eina_List *