From 8bc0cab7746ea6a4fb7f797c78ae2e52aaa3269f Mon Sep 17 00:00:00 2001 From: raster Date: Thu, 2 Sep 2010 09:40:23 +0000 Subject: [PATCH] fix more map+clip goop. git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/evas@51830 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- src/lib/canvas/evas_clip.c | 29 ++++++++++++++++++++++++++++- src/lib/canvas/evas_object_main.c | 2 ++ src/lib/include/evas_private.h | 2 ++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/lib/canvas/evas_clip.c b/src/lib/canvas/evas_clip.c index 6c9aac0..1c1abeb 100644 --- a/src/lib/canvas/evas_clip.c +++ b/src/lib/canvas/evas_clip.c @@ -93,16 +93,43 @@ evas_object_child_map_across_mark(Evas_Object *obj, Evas_Object *map_obj, Eina_B evas_object_child_map_across_mark(obj2, map_obj, force); } } + else if (obj->clip.clipees) + { + Eina_List *l; + Evas_Object *obj2; + + EINA_LIST_FOREACH(obj->clip.clipees, l, obj2) + evas_object_child_map_across_mark(obj2, map_obj, force); + } } #endif } -static void +void 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 +} + +void +evas_object_clip_across_clippees_check(Evas_Object *obj) +{ +#ifdef MAP_ACROSS + Eina_List *l; + Evas_Object *obj2; + + if (!obj->clip.clipees) return; + evas_object_child_map_across_mark(obj, obj->cur.map_parent, 1); + if (obj->cur.cache.clip.dirty) + { + EINA_LIST_FOREACH(obj->clip.clipees, l, obj2) + evas_object_clip_across_clippees_check(obj2); + } +#endif } // this function is called on an object when map is enabled or disabled on it diff --git a/src/lib/canvas/evas_object_main.c b/src/lib/canvas/evas_object_main.c index d8ac3b5..06bcacc 100644 --- a/src/lib/canvas/evas_object_main.c +++ b/src/lib/canvas/evas_object_main.c @@ -1080,6 +1080,7 @@ evas_object_show(Evas_Object *obj) evas_object_clip_dirty(obj); if (obj->layer->evas->events_frozen <= 0) { + evas_object_clip_across_clippees_check(obj); evas_object_recalc_clippees(obj); if (!evas_event_passes_through(obj)) { @@ -1135,6 +1136,7 @@ evas_object_hide(Evas_Object *obj) evas_object_clip_dirty(obj); if (obj->layer->evas->events_frozen <= 0) { + evas_object_clip_across_clippees_check(obj); evas_object_recalc_clippees(obj); if (!evas_event_passes_through(obj)) { diff --git a/src/lib/include/evas_private.h b/src/lib/include/evas_private.h index 08b532b..df03c50 100644 --- a/src/lib/include/evas_private.h +++ b/src/lib/include/evas_private.h @@ -734,6 +734,8 @@ int evas_object_was_opaque(Evas_Object *obj); int evas_object_is_inside(Evas_Object *obj, Evas_Coord x, Evas_Coord y); int evas_object_was_inside(Evas_Object *obj, Evas_Coord x, Evas_Coord y); int evas_object_clippers_was_visible(Evas_Object *obj); +void evas_object_clip_across_check(Evas_Object *obj); +void evas_object_clip_across_clippees_check(Evas_Object *obj); void evas_object_mapped_clip_across_mark(Evas_Object *obj); void evas_event_callback_call(Evas *e, Evas_Callback_Type type, void *event_info); void evas_object_event_callback_call(Evas_Object *obj, Evas_Callback_Type type, void *event_info); -- 2.7.4