/* if it changed geometry - and obviously not visibility or color */
/* caluclate differences since we have a constant color fill */
/* we really only need to update the differences */
+#if 0 // XXX: maybe buggy?
if (((obj->cur.geometry.x != obj->prev.geometry.x) ||
(obj->cur.geometry.y != obj->prev.geometry.y) ||
(obj->cur.geometry.w != obj->prev.geometry.w) ||
obj->prev.geometry.h);
if (!o->pixel_updates) goto done;
}
+#endif
if (((obj->cur.geometry.x != obj->prev.geometry.x) ||
(obj->cur.geometry.y != obj->prev.geometry.y) ||
(obj->cur.geometry.w != obj->prev.geometry.w) ||
}
}
else
- obj->func->render(obj, e->engine.data.output, ctx,
- obj->cur.map->surface, off_x, off_y);
+ {
+ int x = 0, y = 0, w = 0, h = 0;
+
+ w = obj->cur.map->surface_w;
+ h = obj->cur.map->surface_h;
+ 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);
+ e->engine.func->context_clip_set(e->engine.data.output,
+ ctx, x, y, w, h);
+ obj->func->render(obj, e->engine.data.output, ctx,
+ obj->cur.map->surface, off_x, off_y);
+ }
e->engine.func->context_free(e->engine.data.output, ctx);
}
}
if (((w > 0) && (h > 0)) || (obj->smart.smart))
{
+ if (!obj->smart.smart)
+ {
+ 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);
+ }
e->engine.func->context_clip_set(e->engine.data.output,
e->engine.data.context,
x, y, w, h);