From 4aca7949f581eaaf943785759b542acd8fc6794c Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Wed, 2 Nov 2005 04:03:55 +0000 Subject: [PATCH] fix excess overdraw bug SVN revision: 18200 --- legacy/evas/src/lib/canvas/evas_clip.c | 6 ++++++ legacy/evas/src/lib/canvas/evas_render.c | 6 ++++-- legacy/evas/src/lib/include/evas_private.h | 1 + 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/legacy/evas/src/lib/canvas/evas_clip.c b/legacy/evas/src/lib/canvas/evas_clip.c index 7c93e05b14..399cdfd0b0 100644 --- a/legacy/evas/src/lib/canvas/evas_clip.c +++ b/legacy/evas/src/lib/canvas/evas_clip.c @@ -176,6 +176,8 @@ evas_object_clip_set(Evas_Object *obj, Evas_Object *clip) { /* unclip */ obj->cur.clipper->clip.clipees = evas_list_remove(obj->cur.clipper->clip.clipees, obj); + if (!obj->cur.clipper->clip.clipees) obj->cur.clipper->cur.have_clipees = 0; + evas_object_change(obj->cur.clipper); evas_object_change(obj); obj->cur.clipper = NULL; } @@ -191,6 +193,8 @@ evas_object_clip_set(Evas_Object *obj, Evas_Object *clip) } obj->cur.clipper = clip; clip->clip.clipees = evas_list_append(clip->clip.clipees, obj); + if (clip->clip.clipees) clip->cur.have_clipees = 1; + evas_object_change(clip); evas_object_change(obj); evas_object_clip_dirty(obj); evas_object_recalc_clippees(obj); @@ -278,6 +282,8 @@ evas_object_clip_unset(Evas_Object *obj) obj->smart.smart->smart_class->clip_unset(obj); } obj->cur.clipper->clip.clipees = evas_list_remove(obj->cur.clipper->clip.clipees, obj); + if (!obj->cur.clipper->clip.clipees) obj->cur.clipper->cur.have_clipees = 0; + evas_object_change(obj->cur.clipper); obj->cur.clipper = NULL; evas_object_change(obj); evas_object_clip_dirty(obj); diff --git a/legacy/evas/src/lib/canvas/evas_render.c b/legacy/evas/src/lib/canvas/evas_render.c index f2b739cf02..9f6aca7ddd 100644 --- a/legacy/evas/src/lib/canvas/evas_render.c +++ b/legacy/evas/src/lib/canvas/evas_render.c @@ -101,9 +101,11 @@ _evas_render_phase1_object_process(Evas *e, Evas_Object *obj, Evas_List **active } else { - if ((is_active) && (obj->restack) && (!obj->clip.clipees)) + if ((is_active) && (obj->restack) && (!obj->clip.clipees) && + ((evas_object_is_visible(obj) && (!obj->cur.have_clipees)) || + (evas_object_was_visible(obj) && (!obj->prev.have_clipees)))) *restack_objects = evas_list_append(*restack_objects, obj); - else if (is_active) + else if ((is_active) && (!obj->clip.clipees)) obj->func->render_pre(obj); } } diff --git a/legacy/evas/src/lib/include/evas_private.h b/legacy/evas/src/lib/include/evas_private.h index b18998606f..e64fb9fe7a 100644 --- a/legacy/evas/src/lib/include/evas_private.h +++ b/legacy/evas/src/lib/include/evas_private.h @@ -317,6 +317,7 @@ struct _Evas_Object unsigned char r, g, b, a; } color; unsigned char visible : 1; + unsigned char have_clipees : 1; int layer; Evas_Object *clipper; } cur, prev;