cedric rect + arrays patch for reducing allocs

SVN revision: 35024
This commit is contained in:
Carsten Haitzler 2008-07-07 21:29:29 +00:00
parent 72803ae3e7
commit 3242217c16
11 changed files with 273 additions and 240 deletions

View File

@ -902,7 +902,7 @@ evas_object_gradient_render(Evas_Object *obj, void *output, void *context, void
static void static void
evas_object_gradient_render_pre(Evas_Object *obj) evas_object_gradient_render_pre(Evas_Object *obj)
{ {
Evas_List *updates = NULL; Evas_Rectangles rects = { 0, 0, NULL };
Evas_Object_Gradient *o; Evas_Object_Gradient *o;
int is_v, was_v; int is_v, was_v;
@ -993,17 +993,17 @@ evas_object_gradient_render_pre(Evas_Object *obj)
was_v = evas_object_was_visible(obj); was_v = evas_object_was_visible(obj);
if (is_v != was_v) if (is_v != was_v)
{ {
updates = evas_object_render_pre_visible_change(updates, obj, is_v, was_v); evas_object_render_pre_visible_change(&rects, obj, is_v, was_v);
goto done; goto done;
} }
/* its not visible - we accounted for it appearing or not so just abort */ /* its not visible - we accounted for it appearing or not so just abort */
if (!is_v) goto done; if (!is_v) goto done;
/* clipper changed this is in addition to anything else for obj */ /* clipper changed this is in addition to anything else for obj */
updates = evas_object_render_pre_clipper_change(updates, obj); evas_object_render_pre_clipper_change(&rects, obj);
/* gradient changed */ /* gradient changed */
if (o->changed || obj->restack) if (o->changed || obj->restack)
{ {
updates = evas_object_render_pre_prev_cur_add(updates, obj); evas_object_render_pre_prev_cur_add(&rects, obj);
goto done; goto done;
} }
/* if it changed geometry */ /* if it changed geometry */
@ -1012,7 +1012,7 @@ evas_object_gradient_render_pre(Evas_Object *obj)
(obj->cur.geometry.w != obj->prev.geometry.w) || (obj->cur.geometry.w != obj->prev.geometry.w) ||
(obj->cur.geometry.h != obj->prev.geometry.h)) (obj->cur.geometry.h != obj->prev.geometry.h))
{ {
updates = evas_object_render_pre_prev_cur_add(updates, obj); evas_object_render_pre_prev_cur_add(&rects, obj);
goto done; goto done;
} }
/* it obviously didn't change - add a NO obscure - this "unupdates" this */ /* it obviously didn't change - add a NO obscure - this "unupdates" this */
@ -1028,7 +1028,7 @@ evas_object_gradient_render_pre(Evas_Object *obj)
obj->cur.cache.clip.h); obj->cur.cache.clip.h);
done: done:
evas_object_render_pre_effect_updates(updates, obj, is_v, was_v); evas_object_render_pre_effect_updates(&rects, obj, is_v, was_v);
} }
static void static void

View File

@ -2074,7 +2074,7 @@ evas_object_image_render(Evas_Object *obj, void *output, void *context, void *su
static void static void
evas_object_image_render_pre(Evas_Object *obj) evas_object_image_render_pre(Evas_Object *obj)
{ {
Evas_List *updates = NULL; Evas_Rectangles rects = { 0, 0, NULL };
Evas_Object_Image *o; Evas_Object_Image *o;
int is_v, was_v; int is_v, was_v;
@ -2100,17 +2100,17 @@ evas_object_image_render_pre(Evas_Object *obj)
was_v = evas_object_was_visible(obj); was_v = evas_object_was_visible(obj);
if (is_v != was_v) if (is_v != was_v)
{ {
updates = evas_object_render_pre_visible_change(updates, obj, is_v, was_v); evas_object_render_pre_visible_change(&rects, obj, is_v, was_v);
if (!o->pixel_updates) goto done; if (!o->pixel_updates) goto done;
} }
/* it's not visible - we accounted for it appearing or not so just abort */ /* it's not visible - we accounted for it appearing or not so just abort */
if (!is_v) goto done; if (!is_v) goto done;
/* clipper changed this is in addition to anything else for obj */ /* clipper changed this is in addition to anything else for obj */
updates = evas_object_render_pre_clipper_change(updates, obj); evas_object_render_pre_clipper_change(&rects, obj);
/* if we restacked (layer or just within a layer) and don't clip anyone */ /* if we restacked (layer or just within a layer) and don't clip anyone */
if (obj->restack) if (obj->restack)
{ {
updates = evas_object_render_pre_prev_cur_add(updates, obj); evas_object_render_pre_prev_cur_add(&rects, obj);
if (!o->pixel_updates) goto done; if (!o->pixel_updates) goto done;
} }
/* if it changed color */ /* if it changed color */
@ -2119,19 +2119,19 @@ evas_object_image_render_pre(Evas_Object *obj)
(obj->cur.color.b != obj->prev.color.b) || (obj->cur.color.b != obj->prev.color.b) ||
(obj->cur.color.a != obj->prev.color.a)) (obj->cur.color.a != obj->prev.color.a))
{ {
updates = evas_object_render_pre_prev_cur_add(updates, obj); evas_object_render_pre_prev_cur_add(&rects, obj);
if (!o->pixel_updates) goto done; if (!o->pixel_updates) goto done;
} }
/* if it changed render op */ /* if it changed render op */
if (obj->cur.render_op != obj->prev.render_op) if (obj->cur.render_op != obj->prev.render_op)
{ {
updates = evas_object_render_pre_prev_cur_add(updates, obj); evas_object_render_pre_prev_cur_add(&rects, obj);
if (!o->pixel_updates) goto done; if (!o->pixel_updates) goto done;
} }
/* if it changed anti_alias */ /* if it changed anti_alias */
if (obj->cur.anti_alias != obj->prev.anti_alias) if (obj->cur.anti_alias != obj->prev.anti_alias)
{ {
updates = evas_object_render_pre_prev_cur_add(updates, obj); evas_object_render_pre_prev_cur_add(&rects, obj);
if (!o->pixel_updates) goto done; if (!o->pixel_updates) goto done;
} }
if (o->changed) if (o->changed)
@ -2142,7 +2142,7 @@ evas_object_image_render_pre(Evas_Object *obj)
((!o->cur.key) && (o->prev.key)) ((!o->cur.key) && (o->prev.key))
) )
{ {
updates = evas_object_render_pre_prev_cur_add(updates, obj); evas_object_render_pre_prev_cur_add(&rects, obj);
if (!o->pixel_updates) goto done; if (!o->pixel_updates) goto done;
} }
if ((o->cur.image.w != o->prev.image.w) || if ((o->cur.image.w != o->prev.image.w) ||
@ -2151,7 +2151,7 @@ evas_object_image_render_pre(Evas_Object *obj)
(o->cur.cspace != o->prev.cspace) || (o->cur.cspace != o->prev.cspace) ||
(o->cur.smooth_scale != o->prev.smooth_scale)) (o->cur.smooth_scale != o->prev.smooth_scale))
{ {
updates = evas_object_render_pre_prev_cur_add(updates, obj); evas_object_render_pre_prev_cur_add(&rects, obj);
if (!o->pixel_updates) goto done; if (!o->pixel_updates) goto done;
} }
if ((o->cur.border.l != o->prev.border.l) || if ((o->cur.border.l != o->prev.border.l) ||
@ -2159,12 +2159,12 @@ evas_object_image_render_pre(Evas_Object *obj)
(o->cur.border.t != o->prev.border.t) || (o->cur.border.t != o->prev.border.t) ||
(o->cur.border.b != o->prev.border.b)) (o->cur.border.b != o->prev.border.b))
{ {
updates = evas_object_render_pre_prev_cur_add(updates, obj); evas_object_render_pre_prev_cur_add(&rects, obj);
if (!o->pixel_updates) goto done; if (!o->pixel_updates) goto done;
} }
if (o->dirty_pixels) if (o->dirty_pixels)
{ {
updates = evas_object_render_pre_prev_cur_add(updates, obj); evas_object_render_pre_prev_cur_add(&rects, obj);
if (!o->pixel_updates) goto done; if (!o->pixel_updates) goto done;
} }
} }
@ -2182,10 +2182,8 @@ evas_object_image_render_pre(Evas_Object *obj)
(!o->pixel_updates) (!o->pixel_updates)
) )
{ {
Evas_Rectangle *r; evas_rects_return_difference_rects(&rects,
Evas_List *rl; obj->cur.geometry.x,
rl = evas_rects_return_difference_rects(obj->cur.geometry.x,
obj->cur.geometry.y, obj->cur.geometry.y,
obj->cur.geometry.w, obj->cur.geometry.w,
obj->cur.geometry.h, obj->cur.geometry.h,
@ -2193,12 +2191,6 @@ evas_object_image_render_pre(Evas_Object *obj)
obj->prev.geometry.y, obj->prev.geometry.y,
obj->prev.geometry.w, obj->prev.geometry.w,
obj->prev.geometry.h); obj->prev.geometry.h);
while (rl)
{
r = rl->data;
rl = evas_list_remove(rl, r);
updates = evas_list_append(updates, r);
}
if (!o->pixel_updates) goto done; if (!o->pixel_updates) goto done;
} }
if (((obj->cur.geometry.x != obj->prev.geometry.x) || if (((obj->cur.geometry.x != obj->prev.geometry.x) ||
@ -2207,7 +2199,7 @@ evas_object_image_render_pre(Evas_Object *obj)
(obj->cur.geometry.h != obj->prev.geometry.h)) (obj->cur.geometry.h != obj->prev.geometry.h))
) )
{ {
updates = evas_object_render_pre_prev_cur_add(updates, obj); evas_object_render_pre_prev_cur_add(&rects, obj);
if (!o->pixel_updates) goto done; if (!o->pixel_updates) goto done;
} }
if (o->changed) if (o->changed)
@ -2217,7 +2209,7 @@ evas_object_image_render_pre(Evas_Object *obj)
(o->cur.fill.w != o->prev.fill.w) || (o->cur.fill.w != o->prev.fill.w) ||
(o->cur.fill.h != o->prev.fill.h)) (o->cur.fill.h != o->prev.fill.h))
{ {
updates = evas_object_render_pre_prev_cur_add(updates, obj); evas_object_render_pre_prev_cur_add(&rects, obj);
if (!o->pixel_updates) goto done; if (!o->pixel_updates) goto done;
} }
if ((o->cur.border.l == 0) && if ((o->cur.border.l == 0) &&
@ -2227,7 +2219,7 @@ evas_object_image_render_pre(Evas_Object *obj)
{ {
while (o->pixel_updates) while (o->pixel_updates)
{ {
Evas_Rectangle *r, *rr; Evas_Rectangle *rr;
Evas_Coord idw, idh, idx, idy; Evas_Coord idw, idh, idx, idy;
int x, y, w, h; int x, y, w, h;
@ -2251,16 +2243,18 @@ evas_object_image_render_pre(Evas_Object *obj)
w = ((int)(idx + idw)) - x; w = ((int)(idx + idw)) - x;
while (idy < obj->cur.geometry.h) while (idy < obj->cur.geometry.h)
{ {
Evas_Rectangle r;
y = idy; y = idy;
h = ((int)(idy + idh)) - y; h = ((int)(idy + idh)) - y;
NEW_RECT(r, x, y, w, h);
r->x = ((rr->x - 1) * r->w) / o->cur.image.w; r.x = ((rr->x - 1) * w) / o->cur.image.w;
r->y = ((rr->y - 1) * r->h) / o->cur.image.h; r.y = ((rr->y - 1) * h) / o->cur.image.h;
r->w = ((rr->w + 2) * r->w) / o->cur.image.w; r.w = ((rr->w + 2) * w) / o->cur.image.w;
r->h = ((rr->h + 2) * r->h) / o->cur.image.h; r.h = ((rr->h + 2) * h) / o->cur.image.h;
r->x += obj->cur.geometry.x + x; r.x += obj->cur.geometry.x + x;
r->y += obj->cur.geometry.y + y; r.y += obj->cur.geometry.y + y;
if (r) updates = evas_list_append(updates, r); evas_add_rect(&rects, r.x, r.y, r.w, r.h);
idy += h; idy += h;
} }
idx += idw; idx += idw;
@ -2283,7 +2277,7 @@ evas_object_image_render_pre(Evas_Object *obj)
free(r); free(r);
} }
obj->layer->evas->engine.func->image_dirty_region(obj->layer->evas->engine.data.output, o->engine_data, 0, 0, o->cur.image.w, o->cur.image.h); obj->layer->evas->engine.func->image_dirty_region(obj->layer->evas->engine.data.output, o->engine_data, 0, 0, o->cur.image.w, o->cur.image.h);
updates = evas_object_render_pre_prev_cur_add(updates, obj); evas_object_render_pre_prev_cur_add(&rects, obj);
goto done; goto done;
} }
} }
@ -2299,7 +2293,7 @@ evas_object_image_render_pre(Evas_Object *obj)
obj->cur.cache.clip.w, obj->cur.cache.clip.w,
obj->cur.cache.clip.h); obj->cur.cache.clip.h);
done: done:
evas_object_render_pre_effect_updates(updates, obj, is_v, was_v); evas_object_render_pre_effect_updates(&rects, obj, is_v, was_v);
} }
static void static void

View File

@ -298,7 +298,7 @@ evas_object_line_render(Evas_Object *obj, void *output, void *context, void *sur
static void static void
evas_object_line_render_pre(Evas_Object *obj) evas_object_line_render_pre(Evas_Object *obj)
{ {
Evas_List *updates = NULL; Evas_Rectangles rects = { 0, 0, NULL };
Evas_Object_Line *o; Evas_Object_Line *o;
int is_v, was_v; int is_v, was_v;
@ -324,29 +324,29 @@ evas_object_line_render_pre(Evas_Object *obj)
was_v = evas_object_was_visible(obj); was_v = evas_object_was_visible(obj);
if (is_v != was_v) if (is_v != was_v)
{ {
updates = evas_object_render_pre_visible_change(updates, obj, is_v, was_v); evas_object_render_pre_visible_change(&rects, obj, is_v, was_v);
goto done; goto done;
} }
/* it's not visible - we accounted for it appearing or not so just abort */ /* it's not visible - we accounted for it appearing or not so just abort */
if (!is_v) goto done; if (!is_v) goto done;
/* clipper changed this is in addition to anything else for obj */ /* clipper changed this is in addition to anything else for obj */
updates = evas_object_render_pre_clipper_change(updates, obj); evas_object_render_pre_clipper_change(&rects, obj);
/* if we restacked (layer or just within a layer) */ /* if we restacked (layer or just within a layer) */
if (obj->restack) if (obj->restack)
{ {
updates = evas_object_render_pre_prev_cur_add(updates, obj); evas_object_render_pre_prev_cur_add(&rects, obj);
goto done; goto done;
} }
/* if it changed anti_alias */ /* if it changed anti_alias */
if (obj->cur.anti_alias != obj->prev.anti_alias) if (obj->cur.anti_alias != obj->prev.anti_alias)
{ {
updates = evas_object_render_pre_prev_cur_add(updates, obj); evas_object_render_pre_prev_cur_add(&rects, obj);
goto done; goto done;
} }
/* if it changed render op */ /* if it changed render op */
if (obj->cur.render_op != obj->prev.render_op) if (obj->cur.render_op != obj->prev.render_op)
{ {
updates = evas_object_render_pre_prev_cur_add(updates, obj); evas_object_render_pre_prev_cur_add(&rects, obj);
goto done; goto done;
} }
/* if it changed color */ /* if it changed color */
@ -355,7 +355,7 @@ evas_object_line_render_pre(Evas_Object *obj)
(obj->cur.color.b != obj->prev.color.b) || (obj->cur.color.b != obj->prev.color.b) ||
(obj->cur.color.a != obj->prev.color.a)) (obj->cur.color.a != obj->prev.color.a))
{ {
updates = evas_object_render_pre_prev_cur_add(updates, obj); evas_object_render_pre_prev_cur_add(&rects, obj);
goto done; goto done;
} }
/* if it changed geometry - and obviously not visibility or color */ /* if it changed geometry - and obviously not visibility or color */
@ -372,11 +372,11 @@ evas_object_line_render_pre(Evas_Object *obj)
(o->cur.y2 != o->prev.y2))) (o->cur.y2 != o->prev.y2)))
) )
{ {
updates = evas_object_render_pre_prev_cur_add(updates, obj); evas_object_render_pre_prev_cur_add(&rects, obj);
goto done; goto done;
} }
done: done:
evas_object_render_pre_effect_updates(updates, obj, is_v, was_v); evas_object_render_pre_effect_updates(&rects, obj, is_v, was_v);
} }
static void static void

View File

@ -85,46 +85,41 @@ evas_object_change(Evas_Object *obj)
if (obj->smart.parent) evas_object_change(obj->smart.parent); if (obj->smart.parent) evas_object_change(obj->smart.parent);
} }
Evas_List * void
evas_object_render_pre_visible_change(Evas_List *updates, Evas_Object *obj, int is_v, int was_v) evas_object_render_pre_visible_change(Evas_Rectangles *rects, Evas_Object *obj, int is_v, int was_v)
{ {
Evas_Rectangle *r; if (obj->smart.smart) return ;
if (is_v == was_v) return ;
if (obj->smart.smart) return updates;
if (is_v == was_v) return updates;
if (is_v) if (is_v)
{ {
NEW_RECT(r, evas_add_rect(rects,
obj->cur.cache.clip.x, obj->cur.cache.clip.x,
obj->cur.cache.clip.y, obj->cur.cache.clip.y,
obj->cur.cache.clip.w, obj->cur.cache.clip.w,
obj->cur.cache.clip.h); obj->cur.cache.clip.h);
if (r) updates = evas_list_append(updates, r);
} }
else else
{ {
NEW_RECT(r, evas_add_rect(rects,
obj->prev.cache.clip.x, obj->prev.cache.clip.x,
obj->prev.cache.clip.y, obj->prev.cache.clip.y,
obj->prev.cache.clip.w, obj->prev.cache.clip.w,
obj->prev.cache.clip.h); obj->prev.cache.clip.h);
if (r) updates = evas_list_append(updates, r);
} }
return updates;
} }
Evas_List * void
evas_object_render_pre_clipper_change(Evas_List *updates, Evas_Object *obj) evas_object_render_pre_clipper_change(Evas_Rectangles *rects, Evas_Object *obj)
{ {
Evas_Rectangle *r; unsigned int i;
Evas_List *rl;
if (obj->smart.smart) return updates; if (obj->smart.smart) return ;
if (obj->cur.clipper == obj->prev.clipper) return updates; if (obj->cur.clipper == obj->prev.clipper) return ;
if ((obj->cur.clipper) && (obj->prev.clipper)) if ((obj->cur.clipper) && (obj->prev.clipper))
{ {
/* get difference rects between clippers */ /* get difference rects between clippers */
rl = evas_rects_return_difference_rects(obj->cur.clipper->cur.cache.clip.x, evas_rects_return_difference_rects(rects,
obj->cur.clipper->cur.cache.clip.x,
obj->cur.clipper->cur.cache.clip.y, obj->cur.clipper->cur.cache.clip.y,
obj->cur.clipper->cur.cache.clip.w, obj->cur.clipper->cur.cache.clip.w,
obj->cur.clipper->cur.cache.clip.h, obj->cur.clipper->cur.cache.clip.h,
@ -132,17 +127,11 @@ evas_object_render_pre_clipper_change(Evas_List *updates, Evas_Object *obj)
obj->prev.clipper->prev.cache.clip.y, obj->prev.clipper->prev.cache.clip.y,
obj->prev.clipper->prev.cache.clip.w, obj->prev.clipper->prev.cache.clip.w,
obj->prev.clipper->prev.cache.clip.h); obj->prev.clipper->prev.cache.clip.h);
/* go thru every difference rect */
while (rl)
{
r = rl->data;
rl = evas_list_remove(rl, r);
updates = evas_list_append(updates, r);
}
} }
else if (obj->cur.clipper) else if (obj->cur.clipper)
{ {
rl = evas_rects_return_difference_rects(obj->cur.geometry.x, evas_rects_return_difference_rects(rects,
obj->cur.geometry.x,
obj->cur.geometry.y, obj->cur.geometry.y,
obj->cur.geometry.w, obj->cur.geometry.w,
obj->cur.geometry.h, obj->cur.geometry.h,
@ -154,16 +143,11 @@ evas_object_render_pre_clipper_change(Evas_List *updates, Evas_Object *obj)
obj->cur.clipper->cur.cache.clip.y, obj->cur.clipper->cur.cache.clip.y,
obj->cur.clipper->cur.cache.clip.w, obj->cur.clipper->cur.cache.clip.w,
obj->cur.clipper->cur.cache.clip.h); obj->cur.clipper->cur.cache.clip.h);
while (rl)
{
r = rl->data;
rl = evas_list_remove(rl, r);
updates = evas_list_append(updates, r);
}
} }
else if (obj->prev.clipper) else if (obj->prev.clipper)
{ {
rl = evas_rects_return_difference_rects(obj->prev.geometry.x, evas_rects_return_difference_rects(rects,
obj->prev.geometry.x,
obj->prev.geometry.y, obj->prev.geometry.y,
obj->prev.geometry.w, obj->prev.geometry.w,
obj->prev.geometry.h, obj->prev.geometry.h,
@ -175,22 +159,13 @@ evas_object_render_pre_clipper_change(Evas_List *updates, Evas_Object *obj)
obj->prev.clipper->prev.cache.clip.y, obj->prev.clipper->prev.cache.clip.y,
obj->prev.clipper->prev.cache.clip.w, obj->prev.clipper->prev.cache.clip.w,
obj->prev.clipper->prev.cache.clip.h); obj->prev.clipper->prev.cache.clip.h);
while (rl)
{
r = rl->data;
rl = evas_list_remove(rl, r);
updates = evas_list_append(updates, r);
} }
} }
return updates;
}
Evas_List * void
evas_object_render_pre_prev_cur_add(Evas_List *updates, Evas_Object *obj) evas_object_render_pre_prev_cur_add(Evas_Rectangles *rects, Evas_Object *obj)
{ {
Evas_Rectangle *r; evas_add_rect(rects,
NEW_RECT(r,
obj->cur.geometry.x, obj->cur.geometry.x,
obj->cur.geometry.y, obj->cur.geometry.y,
obj->cur.geometry.w, obj->cur.geometry.w,
@ -199,8 +174,7 @@ evas_object_render_pre_prev_cur_add(Evas_List *updates, Evas_Object *obj)
//// obj->cur.cache.geometry.y, //// obj->cur.cache.geometry.y,
//// obj->cur.cache.geometry.w, //// obj->cur.cache.geometry.w,
//// obj->cur.cache.geometry.h); //// obj->cur.cache.geometry.h);
if (r) updates = evas_list_append(updates, r); evas_add_rect(rects,
NEW_RECT(r,
obj->prev.geometry.x, obj->prev.geometry.x,
obj->prev.geometry.y, obj->prev.geometry.y,
obj->prev.geometry.w, obj->prev.geometry.w,
@ -209,29 +183,29 @@ evas_object_render_pre_prev_cur_add(Evas_List *updates, Evas_Object *obj)
//// obj->prev.cache.geometry.y, //// obj->prev.cache.geometry.y,
//// obj->prev.cache.geometry.w, //// obj->prev.cache.geometry.w,
//// obj->prev.cache.geometry.h); //// obj->prev.cache.geometry.h);
if (r) updates = evas_list_append(updates, r);
return updates;
} }
void void
evas_object_render_pre_effect_updates(Evas_List *updates, Evas_Object *obj, int is_v, int was_v) evas_object_render_pre_effect_updates(Evas_Rectangles *rects, Evas_Object *obj, int is_v, int was_v)
{ {
Evas_Rectangle *r; Evas_Rectangle *r;
int x, y, w, h;
Evas_Object *clipper; Evas_Object *clipper;
Evas_List *l; Evas_List *l;
unsigned int i;
int x, y, w, h;
if (obj->smart.smart) return; if (obj->smart.smart) goto end;
/* FIXME: was_v isn't used... why? */ /* FIXME: was_v isn't used... why? */
was_v = 0; was_v = 0;
if (!obj->clip.clipees) if (!obj->clip.clipees)
{ {
while (updates) for (i = 0; i < rects->count; ++i)
{ {
r = (Evas_Rectangle *)(updates->data);
updates = evas_list_remove(updates, r);
/* get updates and clip to current clip */ /* get updates and clip to current clip */
x = r->x; y = r->y; w = r->w; h = r->h; x = rects->array[i].x;
y = rects->array[i].y;
w = rects->array[i].w;
h = rects->array[i].h;
RECTS_CLIP_TO_RECT(x, y, w, h, RECTS_CLIP_TO_RECT(x, y, w, h,
obj->cur.cache.clip.x, obj->cur.cache.clip.x,
obj->cur.cache.clip.y, obj->cur.cache.clip.y,
@ -241,7 +215,10 @@ evas_object_render_pre_effect_updates(Evas_List *updates, Evas_Object *obj, int
obj->layer->evas->engine.func->output_redraws_rect_add(obj->layer->evas->engine.data.output, obj->layer->evas->engine.func->output_redraws_rect_add(obj->layer->evas->engine.data.output,
x, y, w, h); x, y, w, h);
/* get updates and clip to previous clip */ /* get updates and clip to previous clip */
x = r->x; y = r->y; w = r->w; h = r->h; x = rects->array[i].x;
y = rects->array[i].y;
w = rects->array[i].w;
h = rects->array[i].h;
RECTS_CLIP_TO_RECT(x, y, w, h, RECTS_CLIP_TO_RECT(x, y, w, h,
obj->prev.cache.clip.x, obj->prev.cache.clip.x,
obj->prev.cache.clip.y, obj->prev.cache.clip.y,
@ -250,8 +227,6 @@ evas_object_render_pre_effect_updates(Evas_List *updates, Evas_Object *obj, int
if ((w > 0) && (h > 0)) if ((w > 0) && (h > 0))
obj->layer->evas->engine.func->output_redraws_rect_add(obj->layer->evas->engine.data.output, obj->layer->evas->engine.func->output_redraws_rect_add(obj->layer->evas->engine.data.output,
x, y, w, h); x, y, w, h);
free(r);
r = NULL;
} }
/* if the object is actually visible, take any parent clip changes */ /* if the object is actually visible, take any parent clip changes */
if (is_v) if (is_v)
@ -294,10 +269,23 @@ evas_object_render_pre_effect_updates(Evas_List *updates, Evas_Object *obj, int
free(obj->clip.changes->data); free(obj->clip.changes->data);
obj->clip.changes = evas_list_remove(obj->clip.changes, obj->clip.changes->data); obj->clip.changes = evas_list_remove(obj->clip.changes, obj->clip.changes->data);
} }
obj->clip.changes = updates; for (i = 0; i < rects->count; ++i)
{
r = malloc(sizeof(Evas_Rectangle));
if (!r) goto end;
*r = rects->array[i];
obj->clip.changes = evas_list_append(obj->clip.changes, r);
} }
} }
end:
free(rects->array);
rects->array = NULL;
rects->count = 0;
rects->total = 0;
}
int int
evas_object_was_in_output_rect(Evas_Object *obj, int x, int y, int w, int h) evas_object_was_in_output_rect(Evas_Object *obj, int x, int y, int w, int h)
{ {

View File

@ -316,7 +316,7 @@ evas_object_polygon_render(Evas_Object *obj, void *output, void *context, void *
static void static void
evas_object_polygon_render_pre(Evas_Object *obj) evas_object_polygon_render_pre(Evas_Object *obj)
{ {
Evas_List *updates = NULL; Evas_Rectangles rects = { 0, 0, NULL };
Evas_Object_Polygon *o; Evas_Object_Polygon *o;
int is_v, was_v; int is_v, was_v;
@ -342,23 +342,23 @@ evas_object_polygon_render_pre(Evas_Object *obj)
was_v = evas_object_was_visible(obj); was_v = evas_object_was_visible(obj);
if (is_v != was_v) if (is_v != was_v)
{ {
updates = evas_object_render_pre_visible_change(updates, obj, is_v, was_v); evas_object_render_pre_visible_change(&rects, obj, is_v, was_v);
goto done; goto done;
} }
/* it's not visible - we accounted for it appearing or not so just abort */ /* it's not visible - we accounted for it appearing or not so just abort */
if (!is_v) goto done; if (!is_v) goto done;
/* clipper changed this is in addition to anything else for obj */ /* clipper changed this is in addition to anything else for obj */
updates = evas_object_render_pre_clipper_change(updates, obj); evas_object_render_pre_clipper_change(&rects, obj);
/* if we restacked (layer or just within a layer) */ /* if we restacked (layer or just within a layer) */
if (obj->restack) if (obj->restack)
{ {
updates = evas_object_render_pre_prev_cur_add(updates, obj); evas_object_render_pre_prev_cur_add(&rects, obj);
goto done; goto done;
} }
/* if it changed render op */ /* if it changed render op */
if (obj->cur.render_op != obj->prev.render_op) if (obj->cur.render_op != obj->prev.render_op)
{ {
updates = evas_object_render_pre_prev_cur_add(updates, obj); evas_object_render_pre_prev_cur_add(&rects, obj);
goto done; goto done;
} }
/* if it changed color */ /* if it changed color */
@ -367,7 +367,7 @@ evas_object_polygon_render_pre(Evas_Object *obj)
(obj->cur.color.b != obj->prev.color.b) || (obj->cur.color.b != obj->prev.color.b) ||
(obj->cur.color.a != obj->prev.color.a)) (obj->cur.color.a != obj->prev.color.a))
{ {
updates = evas_object_render_pre_prev_cur_add(updates, obj); evas_object_render_pre_prev_cur_add(&rects, obj);
goto done; goto done;
} }
/* if it changed geometry - and obviously not visibility or color */ /* if it changed geometry - and obviously not visibility or color */
@ -379,11 +379,11 @@ evas_object_polygon_render_pre(Evas_Object *obj)
(obj->cur.geometry.h != obj->prev.geometry.h) || (obj->cur.geometry.h != obj->prev.geometry.h) ||
(o->changed)) (o->changed))
{ {
updates = evas_object_render_pre_prev_cur_add(updates, obj); evas_object_render_pre_prev_cur_add(&rects, obj);
goto done; goto done;
} }
done: done:
evas_object_render_pre_effect_updates(updates, obj, is_v, was_v); evas_object_render_pre_effect_updates(&rects, obj, is_v, was_v);
} }
static void static void

View File

@ -162,7 +162,7 @@ evas_object_rectangle_render(Evas_Object *obj, void *output, void *context, void
static void static void
evas_object_rectangle_render_pre(Evas_Object *obj) evas_object_rectangle_render_pre(Evas_Object *obj)
{ {
Evas_List *updates = NULL; Evas_Rectangles rects = { 0, 0, NULL };
Evas_Object_Rectangle *o; Evas_Object_Rectangle *o;
int is_v, was_v; int is_v, was_v;
@ -188,23 +188,23 @@ evas_object_rectangle_render_pre(Evas_Object *obj)
was_v = evas_object_was_visible(obj); was_v = evas_object_was_visible(obj);
if (is_v != was_v) if (is_v != was_v)
{ {
updates = evas_object_render_pre_visible_change(updates, obj, is_v, was_v); evas_object_render_pre_visible_change(&rects, obj, is_v, was_v);
goto done; goto done;
} }
/* it's not visible - we accounted for it appearing or not so just abort */ /* it's not visible - we accounted for it appearing or not so just abort */
if (!is_v) goto done; if (!is_v) goto done;
/* clipper changed this is in addition to anything else for obj */ /* clipper changed this is in addition to anything else for obj */
updates = evas_object_render_pre_clipper_change(updates, obj); evas_object_render_pre_clipper_change(&rects, obj);
/* if we restacked (layer or just within a layer) and don't clip anyone */ /* if we restacked (layer or just within a layer) and don't clip anyone */
if ((obj->restack) && (!obj->clip.clipees)) if ((obj->restack) && (!obj->clip.clipees))
{ {
updates = evas_object_render_pre_prev_cur_add(updates, obj); evas_object_render_pre_prev_cur_add(&rects, obj);
goto done; goto done;
} }
/* if it changed render op */ /* if it changed render op */
if (obj->cur.render_op != obj->prev.render_op) if (obj->cur.render_op != obj->prev.render_op)
{ {
updates = evas_object_render_pre_prev_cur_add(updates, obj); evas_object_render_pre_prev_cur_add(&rects, obj);
goto done; goto done;
} }
/* if it changed color */ /* if it changed color */
@ -213,7 +213,7 @@ evas_object_rectangle_render_pre(Evas_Object *obj)
(obj->cur.color.b != obj->prev.color.b) || (obj->cur.color.b != obj->prev.color.b) ||
(obj->cur.color.a != obj->prev.color.a)) (obj->cur.color.a != obj->prev.color.a))
{ {
updates = evas_object_render_pre_prev_cur_add(updates, obj); evas_object_render_pre_prev_cur_add(&rects, obj);
goto done; goto done;
} }
/* if it changed geometry - and obviously not visibility or color */ /* if it changed geometry - and obviously not visibility or color */
@ -224,10 +224,8 @@ evas_object_rectangle_render_pre(Evas_Object *obj)
(obj->cur.geometry.w != obj->prev.geometry.w) || (obj->cur.geometry.w != obj->prev.geometry.w) ||
(obj->cur.geometry.h != obj->prev.geometry.h)) (obj->cur.geometry.h != obj->prev.geometry.h))
{ {
Evas_Rectangle *r; evas_rects_return_difference_rects(&rects,
Evas_List *rl; obj->cur.geometry.x,
rl = evas_rects_return_difference_rects(obj->cur.geometry.x,
obj->cur.geometry.y, obj->cur.geometry.y,
obj->cur.geometry.w, obj->cur.geometry.w,
obj->cur.geometry.h, obj->cur.geometry.h,
@ -243,12 +241,6 @@ evas_object_rectangle_render_pre(Evas_Object *obj)
//// obj->prev.cache.geometry.y, //// obj->prev.cache.geometry.y,
//// obj->prev.cache.geometry.w, //// obj->prev.cache.geometry.w,
//// obj->prev.cache.geometry.h); //// obj->prev.cache.geometry.h);
while (rl)
{
r = rl->data;
rl = evas_list_remove(rl, r);
updates = evas_list_append(updates, r);
}
goto done; goto done;
} }
/* it obviously didn't change - add a NO obscure - this "unupdates" this */ /* it obviously didn't change - add a NO obscure - this "unupdates" this */
@ -265,7 +257,7 @@ evas_object_rectangle_render_pre(Evas_Object *obj)
obj->cur.cache.clip.h); obj->cur.cache.clip.h);
*/ */
done: done:
evas_object_render_pre_effect_updates(updates, obj, is_v, was_v); evas_object_render_pre_effect_updates(&rects, obj, is_v, was_v);
} }
static void static void

View File

@ -1541,7 +1541,7 @@ evas_object_text_render(Evas_Object *obj, void *output, void *context, void *sur
static void static void
evas_object_text_render_pre(Evas_Object *obj) evas_object_text_render_pre(Evas_Object *obj)
{ {
Evas_List *updates = NULL; Evas_Rectangles rects = { 0, 0, NULL };
Evas_Object_Text *o; Evas_Object_Text *o;
int is_v, was_v; int is_v, was_v;
@ -1567,17 +1567,17 @@ evas_object_text_render_pre(Evas_Object *obj)
was_v = evas_object_was_visible(obj); was_v = evas_object_was_visible(obj);
if (is_v != was_v) if (is_v != was_v)
{ {
updates = evas_object_render_pre_visible_change(updates, obj, is_v, was_v); evas_object_render_pre_visible_change(&rects, obj, is_v, was_v);
goto done; goto done;
} }
/* its not visible - we accounted for it appearing or not so just abort */ /* its not visible - we accounted for it appearing or not so just abort */
if (!is_v) goto done; if (!is_v) goto done;
/* clipper changed this is in addition to anything else for obj */ /* clipper changed this is in addition to anything else for obj */
updates = evas_object_render_pre_clipper_change(updates, obj); evas_object_render_pre_clipper_change(&rects, obj);
/* if we restacked (layer or just within a layer) and dont clip anyone */ /* if we restacked (layer or just within a layer) and dont clip anyone */
if (obj->restack) if (obj->restack)
{ {
updates = evas_object_render_pre_prev_cur_add(updates, obj); evas_object_render_pre_prev_cur_add(&rects, obj);
goto done; goto done;
} }
/* if it changed color */ /* if it changed color */
@ -1586,7 +1586,7 @@ evas_object_text_render_pre(Evas_Object *obj)
(obj->cur.color.b != obj->prev.color.b) || (obj->cur.color.b != obj->prev.color.b) ||
(obj->cur.color.a != obj->prev.color.a)) (obj->cur.color.a != obj->prev.color.a))
{ {
updates = evas_object_render_pre_prev_cur_add(updates, obj); evas_object_render_pre_prev_cur_add(&rects, obj);
goto done; goto done;
} }
/* if it changed geometry - and obviously not visibility or color */ /* if it changed geometry - and obviously not visibility or color */
@ -1597,12 +1597,12 @@ evas_object_text_render_pre(Evas_Object *obj)
(obj->cur.geometry.w != obj->prev.geometry.w) || (obj->cur.geometry.w != obj->prev.geometry.w) ||
(obj->cur.geometry.h != obj->prev.geometry.h)) (obj->cur.geometry.h != obj->prev.geometry.h))
{ {
updates = evas_object_render_pre_prev_cur_add(updates, obj); evas_object_render_pre_prev_cur_add(&rects, obj);
goto done; goto done;
} }
if (obj->cur.render_op != obj->prev.render_op) if (obj->cur.render_op != obj->prev.render_op)
{ {
updates = evas_object_render_pre_prev_cur_add(updates, obj); evas_object_render_pre_prev_cur_add(&rects, obj);
goto done; goto done;
} }
if (o->changed) if (o->changed)
@ -1632,12 +1632,12 @@ evas_object_text_render_pre(Evas_Object *obj)
((o->cur.glow2.b != o->prev.glow2.b)) || ((o->cur.glow2.b != o->prev.glow2.b)) ||
((o->cur.glow2.a != o->prev.glow2.a))) ((o->cur.glow2.a != o->prev.glow2.a)))
{ {
updates = evas_object_render_pre_prev_cur_add(updates, obj); evas_object_render_pre_prev_cur_add(&rects, obj);
goto done; goto done;
} }
} }
done: done:
evas_object_render_pre_effect_updates(updates, obj, is_v, was_v); evas_object_render_pre_effect_updates(&rects, obj, is_v, was_v);
} }
static void static void

View File

@ -4740,7 +4740,7 @@ evas_object_textblock_render(Evas_Object *obj, void *output, void *context, void
static void static void
evas_object_textblock_render_pre(Evas_Object *obj) evas_object_textblock_render_pre(Evas_Object *obj)
{ {
Evas_List *updates = NULL; Evas_Rectangles rects = { 0, 0, NULL };
Evas_Object_Textblock *o; Evas_Object_Textblock *o;
int is_v, was_v; int is_v, was_v;
@ -4770,7 +4770,7 @@ evas_object_textblock_render_pre(Evas_Object *obj)
if (lines) _lines_clear(obj, lines); if (lines) _lines_clear(obj, lines);
o->last_w = obj->cur.geometry.w; o->last_w = obj->cur.geometry.w;
o->redraw = 0; o->redraw = 0;
updates = evas_object_render_pre_prev_cur_add(updates, obj); evas_object_render_pre_prev_cur_add(&rects, obj);
o->changed = 0; o->changed = 0;
is_v = evas_object_is_visible(obj); is_v = evas_object_is_visible(obj);
was_v = evas_object_was_visible(obj); was_v = evas_object_was_visible(obj);
@ -4779,7 +4779,7 @@ evas_object_textblock_render_pre(Evas_Object *obj)
if (o->redraw) if (o->redraw)
{ {
o->redraw = 0; o->redraw = 0;
updates = evas_object_render_pre_prev_cur_add(updates, obj); evas_object_render_pre_prev_cur_add(&rects, obj);
o->changed = 0; o->changed = 0;
is_v = evas_object_is_visible(obj); is_v = evas_object_is_visible(obj);
was_v = evas_object_was_visible(obj); was_v = evas_object_was_visible(obj);
@ -4798,17 +4798,17 @@ evas_object_textblock_render_pre(Evas_Object *obj)
was_v = evas_object_was_visible(obj); was_v = evas_object_was_visible(obj);
if (is_v != was_v) if (is_v != was_v)
{ {
updates = evas_object_render_pre_visible_change(updates, obj, is_v, was_v); evas_object_render_pre_visible_change(&rects, obj, is_v, was_v);
goto done; goto done;
} }
/* it's not visible - we accounted for it appearing or not so just abort */ /* it's not visible - we accounted for it appearing or not so just abort */
if (!is_v) goto done; if (!is_v) goto done;
/* clipper changed this is in addition to anything else for obj */ /* clipper changed this is in addition to anything else for obj */
updates = evas_object_render_pre_clipper_change(updates, obj); evas_object_render_pre_clipper_change(&rects, obj);
/* if we restacked (layer or just within a layer) and don't clip anyone */ /* if we restacked (layer or just within a layer) and don't clip anyone */
if (obj->restack) if (obj->restack)
{ {
updates = evas_object_render_pre_prev_cur_add(updates, obj); evas_object_render_pre_prev_cur_add(&rects, obj);
goto done; goto done;
} }
/* if it changed color */ /* if it changed color */
@ -4817,7 +4817,7 @@ evas_object_textblock_render_pre(Evas_Object *obj)
(obj->cur.color.b != obj->prev.color.b) || (obj->cur.color.b != obj->prev.color.b) ||
(obj->cur.color.a != obj->prev.color.a)) (obj->cur.color.a != obj->prev.color.a))
{ {
updates = evas_object_render_pre_prev_cur_add(updates, obj); evas_object_render_pre_prev_cur_add(&rects, obj);
goto done; goto done;
} }
/* if it changed geometry - and obviously not visibility or color */ /* if it changed geometry - and obviously not visibility or color */
@ -4828,7 +4828,7 @@ evas_object_textblock_render_pre(Evas_Object *obj)
(obj->cur.geometry.w != obj->prev.geometry.w) || (obj->cur.geometry.w != obj->prev.geometry.w) ||
(obj->cur.geometry.h != obj->prev.geometry.h)) (obj->cur.geometry.h != obj->prev.geometry.h))
{ {
updates = evas_object_render_pre_prev_cur_add(updates, obj); evas_object_render_pre_prev_cur_add(&rects, obj);
goto done; goto done;
} }
if (o->changed) if (o->changed)
@ -4842,11 +4842,11 @@ evas_object_textblock_render_pre(Evas_Object *obj)
r->h = obj->cur.geometry.h; r->h = obj->cur.geometry.h;
updates = evas_list_append(updates, r); updates = evas_list_append(updates, r);
*/ */
updates = evas_object_render_pre_prev_cur_add(updates, obj); evas_object_render_pre_prev_cur_add(&rects, obj);
o->changed = 0; o->changed = 0;
} }
done: done:
evas_object_render_pre_effect_updates(updates, obj, is_v, was_v); evas_object_render_pre_effect_updates(&rects, obj, is_v, was_v);
} }
static void static void

View File

@ -1,23 +1,20 @@
#include "evas_common.h" #include "evas_common.h"
#include "evas_private.h" #include "evas_private.h"
Evas_List * void
evas_rects_return_difference_rects(int x, int y, int w, int h, int xx, int yy, int ww, int hh) evas_rects_return_difference_rects(Evas_Rectangles *rects, int x, int y, int w, int h, int xx, int yy, int ww, int hh)
{ {
Evas_List *rects = NULL; unsigned int available = 0;
Evas_Rectangle *r;
if (!RECTS_INTERSECT(x, y, w, h, xx, yy, ww, hh)) if (!RECTS_INTERSECT(x, y, w, h, xx, yy, ww, hh))
{ {
NEW_RECT(r, x, y, w, h); evas_add_rect(rects, x, y, w, h);
if (r) rects = evas_list_append(rects, r); evas_add_rect(rects, xx, yy, ww, hh);
NEW_RECT(r, xx, yy, ww, hh);
if (r) rects = evas_list_append(rects, r);
} }
else else
{ {
int x1[4], y1[4], i, j; int x1[4], y1[4], i, j;
Evas_List *rl = NULL, *rll; Evas_Rectangles tmp = { 0, 0, NULL };
if (x < xx) if (x < xx)
{ {
@ -62,33 +59,43 @@ evas_rects_return_difference_rects(int x, int y, int w, int h, int xx, int yy, i
for (j = 0; j < 3; j++) for (j = 0; j < 3; j++)
{ {
for (i = 0; i < 3; i++) for (i = 0; i < 3; i++)
{
NEW_RECT(r, x1[i], y1[j], x1[i + 1] - x1[i], y1[j + 1] - y1[j]);
if (r) rl = evas_list_append(rl, r);
}
}
if (rl)
{
for (rll = rl; rll; rll = rll->next)
{
r = rll->data;
if ((r->w > 0) && (r->h > 0))
{ {
int intsec1, intsec2; int intsec1, intsec2;
int tx, ty, tw, th;
intsec1 = (RECTS_INTERSECT(r->x, r->y, r->w, r->h, x, y, w, h)); tx = x1[i];
intsec2 = (RECTS_INTERSECT(r->x, r->y, r->w, r->h, xx, yy, ww, hh)); ty = y1[j];
tw = x1[i + 1] - x1[i];
th = y1[j + 1] - y1[j];
intsec1 = (RECTS_INTERSECT(tx, ty, tw, th, x, y, w, h));
intsec2 = (RECTS_INTERSECT(tx, ty, tw, th, xx, yy, ww, hh));
if (intsec1 ^ intsec2) if (intsec1 ^ intsec2)
rects = evas_list_append(rects, r); {
else evas_add_rect(rects, tx, ty, tw, th);
free(r);
} }
else
free(r);
} }
rl = evas_list_free(rl);
} }
/* if (tmp.count > 0) */
/* { */
/* unsigned int i; */
/* for (i = 0; i < tmp.count; ++i) */
/* { */
/* if ((tmp.array[i].w > 0) && (tmp.array[i].h > 0)) */
/* { */
/* int intsec1, intsec2; */
/* intsec1 = (RECTS_INTERSECT(tmp.array[i].x, tmp.array[i].y, tmp.array[i].w, tmp.array[i].h, x, y, w, h)); */
/* intsec2 = (RECTS_INTERSECT(tmp.array[i].x, tmp.array[i].y, tmp.array[i].w, tmp.array[i].h, xx, yy, ww, hh)); */
/* if (intsec1 ^ intsec2) */
/* { */
/* evas_add_rect(rects, tmp.array[i].x, tmp.array[i].y, tmp.array[i].w, tmp.array[i].h); */
/* } */
/* } */
/* } */
/* free(tmp.array); */
/* } */
} }
return rects;
} }

View File

@ -1,6 +1,50 @@
#ifndef EVAS_INLINE_H #ifndef EVAS_INLINE_H
#define EVAS_INLINE_H #define EVAS_INLINE_H
static inline void
evas_add_rect(Evas_Rectangles *rects, int x, int y, int w, int h)
{
if ((rects->count + 1) > rects->total)
{
Evas_Rectangle *_add_rect;
unsigned int _tmp_total;
_tmp_total = rects->total + 32;
_add_rect = realloc(rects->array, sizeof(Evas_Rectangle) * _tmp_total);
if (!_add_rect) return ;
rects->total = _tmp_total;
rects->array = _add_rect;
}
rects->array[rects->count].x = x;
rects->array[rects->count].y = y;
rects->array[rects->count].w = w;
rects->array[rects->count].h = h;
rects->count += 1;
}
static inline Cutout_Rect*
evas_common_draw_context_cutouts_add(Cutout_Rects* rects,
int x, int y, int w, int h)
{
Cutout_Rect* rect;
if (rects->max < (rects->active + 1))
{
rects->max += 32;
rects->rects = realloc(rects->rects, sizeof(Cutout_Rect) * rects->max);
}
rect = rects->rects + rects->active;
rect->x = x;
rect->y = y;
rect->w = w;
rect->h = h;
rects->active++;
return rect;
}
static inline int static inline int
evas_object_is_opaque(Evas_Object *obj) evas_object_is_opaque(Evas_Object *obj)
{ {

View File

@ -103,6 +103,7 @@ typedef struct _Evas_Intercept_Func_Color Evas_Intercept_Func_Color;
typedef struct _Evas_Key_Grab Evas_Key_Grab; typedef struct _Evas_Key_Grab Evas_Key_Grab;
typedef struct _Evas_Callbacks Evas_Callbacks; typedef struct _Evas_Callbacks Evas_Callbacks;
typedef struct _Evas_Format Evas_Format; typedef struct _Evas_Format Evas_Format;
typedef struct _Evas_Rectangles Evas_Rectangles;
#define MAGIC_EVAS 0x70777770 #define MAGIC_EVAS 0x70777770
#define MAGIC_OBJ 0x71777770 #define MAGIC_OBJ 0x71777770
@ -381,6 +382,13 @@ struct _Evas_Layer
unsigned char delete_me : 1; unsigned char delete_me : 1;
}; };
struct _Evas_Rectangles
{
unsigned int total;
unsigned int count;
Evas_Rectangle *array;
};
struct _Evas_Size struct _Evas_Size
{ {
Evas_Coord w, h; Evas_Coord w, h;
@ -696,11 +704,11 @@ void evas_object_free(Evas_Object *obj, int clean_layer);
void evas_object_inject(Evas_Object *obj, Evas *e); void evas_object_inject(Evas_Object *obj, Evas *e);
void evas_object_release(Evas_Object *obj, int clean_layer); void evas_object_release(Evas_Object *obj, int clean_layer);
void evas_object_change(Evas_Object *obj); void evas_object_change(Evas_Object *obj);
Evas_List *evas_object_render_pre_visible_change(Evas_List *updates, Evas_Object *obj, int is_v, int was_v); void evas_object_render_pre_visible_change(Evas_Rectangles *rects, Evas_Object *obj, int is_v, int was_v);
Evas_List *evas_object_render_pre_clipper_change(Evas_List *updates, Evas_Object *obj); void evas_object_render_pre_clipper_change(Evas_Rectangles *rects, Evas_Object *obj);
Evas_List *evas_object_render_pre_prev_cur_add(Evas_List *updates, Evas_Object *obj); void evas_object_render_pre_prev_cur_add(Evas_Rectangles *rects, Evas_Object *obj);
void evas_object_render_pre_effect_updates(Evas_List *updates, Evas_Object *obj, int is_v, int was_v); void evas_object_render_pre_effect_updates(Evas_Rectangles *rects, Evas_Object *obj, int is_v, int was_v);
Evas_List * evas_rects_return_difference_rects(int x, int y, int w, int h, int xx, int yy, int ww, int hh); void evas_rects_return_difference_rects(Evas_Rectangles *rects, int x, int y, int w, int h, int xx, int yy, int ww, int hh);
void evas_object_clip_dirty(Evas_Object *obj); void evas_object_clip_dirty(Evas_Object *obj);
void evas_object_recalc_clippees(Evas_Object *obj); void evas_object_recalc_clippees(Evas_Object *obj);