fix clip bug.

SVN revision: 53261
This commit is contained in:
Carsten Haitzler 2010-10-11 09:53:52 +00:00
parent 997acfa3a5
commit 197fa433cb
1 changed files with 41 additions and 25 deletions

View File

@ -796,14 +796,6 @@ evas_render_mapped(Evas *e, Evas_Object *obj, void *context, void *surface,
obj->cur.geometry.y + off_y2, obj->cur.geometry.y + off_y2,
obj->cur.geometry.w, obj->cur.geometry.w,
obj->cur.geometry.h); obj->cur.geometry.h);
if (!obj->cur.map)
{
RECTS_CLIP_TO_RECT(x, y, w, h,
obj->cur.cache.clip.x + off_x2,
obj->cur.cache.clip.y + off_y2,
obj->cur.cache.clip.w,
obj->cur.cache.clip.h);
}
e->engine.func->context_clip_set(e->engine.data.output, e->engine.func->context_clip_set(e->engine.data.output,
ctx, x, y, w, h); ctx, x, y, w, h);
obj->func->render(obj, e->engine.data.output, ctx, obj->func->render(obj, e->engine.data.output, ctx,
@ -824,25 +816,49 @@ evas_render_mapped(Evas *e, Evas_Object *obj, void *context, void *surface,
} }
e->engine.func->context_clip_unset(e->engine.data.output, e->engine.func->context_clip_unset(e->engine.data.output,
e->engine.data.context); e->engine.data.context);
if ((obj->cur.map->surface) && (obj->smart.smart)) if (obj->cur.map->surface)
{ {
if (obj->cur.clipper) if (obj->smart.smart)
{ {
int x, y, w, h; if (obj->cur.clipper)
Evas_Object *tobj; {
int x, y, w, h;
obj->cur.cache.clip.dirty = 1; Evas_Object *tobj;
tobj = obj->cur.map_parent;
obj->cur.map_parent = obj->cur.clipper->cur.map_parent; obj->cur.cache.clip.dirty = 1;
evas_object_clip_recalc(obj); tobj = obj->cur.map_parent;
obj->cur.map_parent = tobj; obj->cur.map_parent = obj->cur.clipper->cur.map_parent;
x = obj->cur.cache.clip.x; evas_object_clip_recalc(obj);
y = obj->cur.cache.clip.y; obj->cur.map_parent = tobj;
w = obj->cur.cache.clip.w; x = obj->cur.cache.clip.x;
h = obj->cur.cache.clip.h; y = obj->cur.cache.clip.y;
e->engine.func->context_clip_set(e->engine.data.output, w = obj->cur.cache.clip.w;
e->engine.data.context, h = obj->cur.cache.clip.h;
x + off_x, y + off_y, w, h); e->engine.func->context_clip_set(e->engine.data.output,
e->engine.data.context,
x + off_x, y + off_y, w, h);
}
}
else
{
if (obj->cur.clipper)
{
int x, y, w, h;
evas_object_clip_recalc(obj);
x = obj->cur.cache.clip.x;
y = obj->cur.cache.clip.y;
w = obj->cur.cache.clip.w;
h = 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,
e->engine.data.context,
x + off_x, y + off_y, w, h);
}
} }
} }
if (obj->cur.cache.clip.visible) if (obj->cur.cache.clip.visible)