diff --git a/legacy/evas/src/lib/canvas/evas_clip.c b/legacy/evas/src/lib/canvas/evas_clip.c index b1ff8c2308..f1e9de339a 100644 --- a/legacy/evas/src/lib/canvas/evas_clip.c +++ b/legacy/evas/src/lib/canvas/evas_clip.c @@ -7,7 +7,7 @@ evas_object_clip_dirty(Evas_Object *obj) Eina_List *l; Evas_Object *data; - if (obj->cur.cache.clip.dirty) return ; + if (obj->cur.cache.clip.dirty) return; obj->cur.cache.clip.dirty = 1; EINA_LIST_FOREACH(obj->clip.clipees, l, data) @@ -22,9 +22,9 @@ evas_object_recalc_clippees(Evas_Object *obj) if (obj->cur.cache.clip.dirty) { - evas_object_clip_recalc(obj); - EINA_LIST_FOREACH(obj->clip.clipees, l, data) - evas_object_recalc_clippees(data); + evas_object_clip_recalc(obj); + EINA_LIST_FOREACH(obj->clip.clipees, l, data) + evas_object_recalc_clippees(data); } } @@ -33,20 +33,20 @@ evas_object_clippers_was_visible(Evas_Object *obj) { if (obj->prev.visible) { - if (obj->prev.clipper) - return evas_object_clippers_is_visible(obj->prev.clipper); - return 1; + if (obj->prev.clipper) + return evas_object_clippers_is_visible(obj->prev.clipper); + return 1; } return 0; } /* aaaaargh (pirate voice) ... notes! - * + * * we have a big problem until now that's gone undetected... until yesterday. * that problem involves clips and maps and smart objects. hooray! 3 of the * more complex bits of evas - and maps and smart objects being one of the * nastiest ones. - * + * * what is the problem? when a clip crosses a map boundary. that is to say * that when the clipper and clippee are not within the child tree of the * mapped object. in this case "bad stuff" happens. basically as clips are @@ -63,13 +63,13 @@ evas_object_clippers_was_visible(Evas_Object *obj) * thats silly-expensive and i was about to fix it that way but it has since * dawned on me that that is just going to kill performance in some critical * areas like during object setup and manipulation, as well as teardown. - * + * * aaaaagh! best for now is to document this as a "don't do it damnit!" thing * and have the apps avoid it. but even then - how to do this? this is not * easy. everywhere i turn so far i come up to either expensive operations, * breaks in logic, or nasty re-work of apps or4 the whole concept of clipping, * smart objects and maps... and that will have to wait for evas 2.0 - * + * * the below does clip fixups etc. in the even a clip spans a map boundary. * not pretty, but necessary. */ @@ -87,7 +87,7 @@ evas_object_child_map_across_mark(Evas_Object *obj, Evas_Object *map_obj, Eina_B if (obj->smart.smart) { Evas_Object *obj2; - + EINA_INLIST_FOREACH(evas_object_smart_members_get_direct(obj), obj2) { // if obj has its own map - skip it. already done @@ -99,12 +99,12 @@ evas_object_child_map_across_mark(Evas_Object *obj, Evas_Object *map_obj, Eina_B { Eina_List *l; Evas_Object *obj2; - + EINA_LIST_FOREACH(obj->clip.clipees, l, obj2) - evas_object_child_map_across_mark(obj2, map_obj, force); + evas_object_child_map_across_mark(obj2, map_obj, force); } } -#endif +#endif } void @@ -113,8 +113,8 @@ evas_object_clip_across_check(Evas_Object *obj) #ifdef MAP_ACROSS if (!obj->cur.clipper) return; if (obj->cur.clipper->cur.map_parent != obj->cur.map_parent) - evas_object_child_map_across_mark(obj, obj->cur.map_parent, 1); -#endif + evas_object_child_map_across_mark(obj, obj->cur.map_parent, 1); +#endif } void @@ -131,30 +131,30 @@ evas_object_clip_across_clippees_check(Evas_Object *obj) evas_object_child_map_across_mark(obj, obj->cur.map_parent, 0); if (obj->cur.cache.clip.dirty) { - EINA_LIST_FOREACH(obj->clip.clipees, l, obj2) - evas_object_clip_across_clippees_check(obj2); + EINA_LIST_FOREACH(obj->clip.clipees, l, obj2) + evas_object_clip_across_clippees_check(obj2); } -#endif +#endif } // this function is called on an object when map is enabled or disabled on it // thus creating a "map boundary" at that point. -// +// // FIXME: flip2 test broken in elm - might be show/hide of clips void evas_object_mapped_clip_across_mark(Evas_Object *obj) { #ifdef MAP_ACROSS if ((obj->cur.map) && (obj->cur.usemap)) - evas_object_child_map_across_mark(obj, obj, 0); + evas_object_child_map_across_mark(obj, obj, 0); else { if (obj->smart.parent) - evas_object_child_map_across_mark - (obj, obj->smart.parent->cur.map_parent, 0); + evas_object_child_map_across_mark + (obj, obj->smart.parent->cur.map_parent, 0); else - evas_object_child_map_across_mark(obj, NULL, 0); - } + evas_object_child_map_across_mark(obj, NULL, 0); + } #endif } @@ -169,8 +169,8 @@ evas_object_clip_set(Evas_Object *obj, Evas_Object *clip) MAGIC_CHECK_END(); if (!clip) { - evas_object_clip_unset(obj); - return; + evas_object_clip_unset(obj); + return; } MAGIC_CHECK(clip, Evas_Object, MAGIC_OBJ); return; @@ -216,36 +216,36 @@ evas_object_clip_set(Evas_Object *obj, Evas_Object *clip) } if (obj->smart.smart) { - if (obj->smart.smart->smart_class->clip_set) - obj->smart.smart->smart_class->clip_set(obj, clip); + if (obj->smart.smart->smart_class->clip_set) + obj->smart.smart->smart_class->clip_set(obj, clip); } if (obj->cur.clipper) { - /* unclip */ - obj->cur.clipper->clip.clipees = eina_list_remove(obj->cur.clipper->clip.clipees, obj); - if (!obj->cur.clipper->clip.clipees) - { - obj->cur.clipper->cur.have_clipees = 0; - if (obj->cur.clipper->cur.visible) - evas_damage_rectangle_add(obj->cur.clipper->layer->evas, - obj->cur.clipper->cur.geometry.x, - obj->cur.clipper->cur.geometry.y, - obj->cur.clipper->cur.geometry.w, - obj->cur.clipper->cur.geometry.h); - } - evas_object_change(obj->cur.clipper); - evas_object_change(obj); - obj->cur.clipper = NULL; + /* unclip */ + obj->cur.clipper->clip.clipees = eina_list_remove(obj->cur.clipper->clip.clipees, obj); + if (!obj->cur.clipper->clip.clipees) + { + obj->cur.clipper->cur.have_clipees = 0; + if (obj->cur.clipper->cur.visible) + evas_damage_rectangle_add(obj->cur.clipper->layer->evas, + obj->cur.clipper->cur.geometry.x, + obj->cur.clipper->cur.geometry.y, + obj->cur.clipper->cur.geometry.w, + obj->cur.clipper->cur.geometry.h); + } + evas_object_change(obj->cur.clipper); + evas_object_change(obj); + obj->cur.clipper = NULL; } /* clip me */ if ((!clip->clip.clipees) && (clip->cur.visible)) { - /* Basically it just went invisible */ - clip->changed = 1; - clip->layer->evas->changed = 1; - evas_damage_rectangle_add(clip->layer->evas, - clip->cur.geometry.x, clip->cur.geometry.y, - clip->cur.geometry.w, clip->cur.geometry.h); + /* Basically it just went invisible */ + clip->changed = 1; + clip->layer->evas->changed = 1; + evas_damage_rectangle_add(clip->layer->evas, + clip->cur.geometry.x, clip->cur.geometry.y, + clip->cur.geometry.w, clip->cur.geometry.h); } obj->cur.clipper = clip; clip->clip.clipees = eina_list_append(clip->clip.clipees, obj); @@ -259,32 +259,32 @@ evas_object_clip_set(Evas_Object *obj, Evas_Object *clip) /* If it's NOT a rectangle set the mask bits too */ /* FIXME: Optmz ths chck */ if (clip->type == o_rect_type) - obj->cur.mask = NULL; + obj->cur.mask = NULL; else { - void *engdata; + void *engdata; obj->cur.mask = clip; - engdata = clip->func->engine_data_get(clip); - /* FIXME: Images only */ - clip->layer->evas->engine.func->image_mask_create( - clip->layer->evas->engine.data.output, - engdata); + engdata = clip->func->engine_data_get(clip); + /* FIXME: Images only */ + clip->layer->evas->engine.func->image_mask_create( + clip->layer->evas->engine.data.output, + engdata); } evas_object_change(clip); evas_object_change(obj); evas_object_clip_dirty(obj); evas_object_recalc_clippees(obj); - if ((!obj->smart.smart) && + if ((!obj->smart.smart) && (!((obj->cur.map) && (obj->cur.usemap)))) { - if (evas_object_is_in_output_rect(obj, - obj->layer->evas->pointer.x, - obj->layer->evas->pointer.y, 1, 1)) - evas_event_feed_mouse_move(obj->layer->evas, - obj->layer->evas->pointer.x, - obj->layer->evas->pointer.y, - obj->layer->evas->last_timestamp, - NULL); + if (evas_object_is_in_output_rect(obj, + obj->layer->evas->pointer.x, + obj->layer->evas->pointer.y, 1, 1)) + evas_event_feed_mouse_move(obj->layer->evas, + obj->layer->evas->pointer.x, + obj->layer->evas->pointer.y, + obj->layer->evas->last_timestamp, + NULL); } evas_object_clip_across_check(obj); } @@ -309,39 +309,39 @@ evas_object_clip_unset(Evas_Object *obj) if (evas_object_intercept_call_clip_unset(obj)) return; if (obj->smart.smart) { - if (obj->smart.smart->smart_class->clip_unset) - obj->smart.smart->smart_class->clip_unset(obj); + if (obj->smart.smart->smart_class->clip_unset) + obj->smart.smart->smart_class->clip_unset(obj); } if (obj->cur.clipper) { obj->cur.clipper->clip.clipees = eina_list_remove(obj->cur.clipper->clip.clipees, obj); - if (!obj->cur.clipper->clip.clipees) - { - obj->cur.clipper->cur.have_clipees = 0; - if (obj->cur.clipper->cur.visible) - evas_damage_rectangle_add(obj->cur.clipper->layer->evas, - obj->cur.clipper->cur.geometry.x, - obj->cur.clipper->cur.geometry.y, - obj->cur.clipper->cur.geometry.w, - obj->cur.clipper->cur.geometry.h); - } - evas_object_change(obj->cur.clipper); + if (!obj->cur.clipper->clip.clipees) + { + obj->cur.clipper->cur.have_clipees = 0; + if (obj->cur.clipper->cur.visible) + evas_damage_rectangle_add(obj->cur.clipper->layer->evas, + obj->cur.clipper->cur.geometry.x, + obj->cur.clipper->cur.geometry.y, + obj->cur.clipper->cur.geometry.w, + obj->cur.clipper->cur.geometry.h); + } + evas_object_change(obj->cur.clipper); } obj->cur.clipper = NULL; evas_object_change(obj); evas_object_clip_dirty(obj); evas_object_recalc_clippees(obj); - if ((!obj->smart.smart) && + if ((!obj->smart.smart) && (!((obj->cur.map) && (obj->cur.usemap)))) { - if (evas_object_is_in_output_rect(obj, - obj->layer->evas->pointer.x, - obj->layer->evas->pointer.y, 1, 1)) - evas_event_feed_mouse_move(obj->layer->evas, - obj->layer->evas->pointer.x, - obj->layer->evas->pointer.y, + if (evas_object_is_in_output_rect(obj, + obj->layer->evas->pointer.x, + obj->layer->evas->pointer.y, 1, 1)) + evas_event_feed_mouse_move(obj->layer->evas, + obj->layer->evas->pointer.x, + obj->layer->evas->pointer.y, obj->layer->evas->last_timestamp, - NULL); + NULL); } evas_object_clip_across_check(obj); } @@ -354,3 +354,4 @@ evas_object_clipees_get(const Evas_Object *obj) MAGIC_CHECK_END(); return obj->clip.clipees; } +