aboutsummaryrefslogtreecommitdiffstats
path: root/legacy
diff options
context:
space:
mode:
authorCedric BAIL <cedric.bail@free.fr>2011-03-21 15:18:26 +0000
committerCedric BAIL <cedric.bail@free.fr>2011-03-21 15:18:26 +0000
commit2b3ee3f630f11a25f6f4c9b715299aeacfaa9991 (patch)
tree4a03479edfddbf512418abe314b8689322099d6c /legacy
parentEcore/Xlib: Remove unused variable. (diff)
downloadefl-2b3ee3f630f11a25f6f4c9b715299aeacfaa9991.tar.gz
evas: hopefully the last clip bug fix.
If no one see breakage due to this, I will backport all of them in two days. SVN revision: 57934
Diffstat (limited to 'legacy')
-rw-r--r--legacy/evas/src/lib/canvas/evas_clip.c2
-rw-r--r--legacy/evas/src/lib/canvas/evas_render.c23
-rw-r--r--legacy/evas/src/lib/include/evas_inline.x45
3 files changed, 31 insertions, 39 deletions
diff --git a/legacy/evas/src/lib/canvas/evas_clip.c b/legacy/evas/src/lib/canvas/evas_clip.c
index 88defd6b17..08bd86e440 100644
--- a/legacy/evas/src/lib/canvas/evas_clip.c
+++ b/legacy/evas/src/lib/canvas/evas_clip.c
@@ -7,6 +7,8 @@ evas_object_clip_dirty(Evas_Object *obj)
Eina_List *l;
Evas_Object *data;
+ if (obj->cur.cache.clip.dirty) return ;
+
obj->cur.cache.clip.dirty = 1;
EINA_LIST_FOREACH(obj->clip.clipees, l, data)
evas_object_clip_dirty(data);
diff --git a/legacy/evas/src/lib/canvas/evas_render.c b/legacy/evas/src/lib/canvas/evas_render.c
index 7dc2a7b85c..877cf6c43c 100644
--- a/legacy/evas/src/lib/canvas/evas_render.c
+++ b/legacy/evas/src/lib/canvas/evas_render.c
@@ -881,21 +881,6 @@ evas_render_mapped(Evas *e, Evas_Object *obj, void *context, void *surface,
obj->cur.geometry.w,
obj->cur.geometry.h);
- if (obj->cur.clipper)
- {
- if (_evas_render_has_map(obj))
- evas_object_clip_recalc(obj);
- RECTS_CLIP_TO_RECT(x, y, w, h,
- obj->cur.cache.clip.x + off_x,
- obj->cur.cache.clip.y + off_y,
- obj->cur.cache.clip.w,
- obj->cur.cache.clip.h);
- RECTS_CLIP_TO_RECT(x, y, w, h,
- obj->cur.clipper->cur.cache.clip.x + off_x,
- obj->cur.clipper->cur.cache.clip.y + off_y,
- obj->cur.clipper->cur.cache.clip.w,
- obj->cur.clipper->cur.cache.clip.h);
- }
e->engine.func->context_clip_set(e->engine.data.output,
ctx, x, y, w, h);
obj->func->render(obj, e->engine.data.output, ctx,
@@ -1126,10 +1111,10 @@ evas_render_updates_internal(Evas *e,
/* phase 1. add extra updates for changed objects */
if (e->invalidate || e->render_objects.count <= 0)
- clean_them = _evas_render_phase1_process(e,
- &e->active_objects,
- &e->restack_objects,
- &e->delete_objects,
+ clean_them = _evas_render_phase1_process(e,
+ &e->active_objects,
+ &e->restack_objects,
+ &e->delete_objects,
&e->render_objects,
&redraw_all);
diff --git a/legacy/evas/src/lib/include/evas_inline.x b/legacy/evas/src/lib/include/evas_inline.x
index 07db73618e..f1d131df04 100644
--- a/legacy/evas/src/lib/include/evas_inline.x
+++ b/legacy/evas/src/lib/include/evas_inline.x
@@ -204,28 +204,33 @@ evas_object_clip_recalc(Evas_Object *obj)
else cvis = obj->cur.visible;
cr = obj->cur.color.r; cg = obj->cur.color.g;
cb = obj->cur.color.b; ca = obj->cur.color.a;
- if ((obj->cur.clipper) &&
- (obj->cur.clipper->cur.map_parent == obj->cur.map_parent))
+ if (obj->cur.clipper)
{
// this causes problems... hmmm
- if (obj->cur.clipper->cur.cache.clip.dirty)
- evas_object_clip_recalc(obj->cur.clipper);
- nx = obj->cur.clipper->cur.cache.clip.x;
- ny = obj->cur.clipper->cur.cache.clip.y;
- nw = obj->cur.clipper->cur.cache.clip.w;
- nh = obj->cur.clipper->cur.cache.clip.h;
- RECTS_CLIP_TO_RECT(cx, cy, cw, ch, nx, ny, nw, nh);
-
- nvis = obj->cur.clipper->cur.cache.clip.visible;
- nr = obj->cur.clipper->cur.cache.clip.r;
- ng = obj->cur.clipper->cur.cache.clip.g;
- nb = obj->cur.clipper->cur.cache.clip.b;
- na = obj->cur.clipper->cur.cache.clip.a;
- cvis = cvis * nvis;
- cr = (cr * (nr + 1)) >> 8;
- cg = (cg * (ng + 1)) >> 8;
- cb = (cb * (nb + 1)) >> 8;
- ca = (ca * (na + 1)) >> 8;
+ if (obj->cur.clipper->cur.cache.clip.dirty)
+ evas_object_clip_recalc(obj->cur.clipper);
+
+ // I don't know why this test was here in the first place. As I have
+ // no issue showing up due to this, I keep it and move color out of it.
+ if (obj->cur.clipper->cur.map_parent == obj->cur.map_parent)
+ {
+ nx = obj->cur.clipper->cur.cache.clip.x;
+ ny = obj->cur.clipper->cur.cache.clip.y;
+ nw = obj->cur.clipper->cur.cache.clip.w;
+ nh = obj->cur.clipper->cur.cache.clip.h;
+ RECTS_CLIP_TO_RECT(cx, cy, cw, ch, nx, ny, nw, nh);
+ }
+
+ nvis = obj->cur.clipper->cur.cache.clip.visible;
+ nr = obj->cur.clipper->cur.cache.clip.r;
+ ng = obj->cur.clipper->cur.cache.clip.g;
+ nb = obj->cur.clipper->cur.cache.clip.b;
+ na = obj->cur.clipper->cur.cache.clip.a;
+ cvis = cvis * nvis;
+ cr = (cr * (nr + 1)) >> 8;
+ cg = (cg * (ng + 1)) >> 8;
+ cb = (cb * (nb + 1)) >> 8;
+ ca = (ca * (na + 1)) >> 8;
}
if ((ca == 0 && obj->cur.render_op == EVAS_RENDER_BLEND) || (cw <= 0) || (ch <= 0)) cvis = 0;
obj->cur.cache.clip.x = cx;