eina_array_step_set(&e->obscuring_objects, 16);
eina_array_step_set(&e->temporary_objects, 16);
eina_array_step_set(&e->calculate_objects, 16);
+ eina_array_step_set(&e->clip_changes, 16);
return e;
}
eina_array_flush(&e->obscuring_objects);
eina_array_flush(&e->temporary_objects);
eina_array_flush(&e->calculate_objects);
+ eina_array_flush(&e->clip_changes);
e->magic = 0;
free(e);
static void
evas_object_gradient_render_pre(Evas_Object *obj)
{
- Evas_Rectangles rects = { 0, 0, NULL };
Evas_Object_Gradient *o;
int is_v, was_v;
was_v = evas_object_was_visible(obj);
if (is_v != was_v)
{
- evas_object_render_pre_visible_change(&rects, obj, is_v, was_v);
+ evas_object_render_pre_visible_change(&obj->layer->evas->clip_changes, obj, is_v, was_v);
goto done;
}
/* its not visible - we accounted for it appearing or not so just abort */
if (!is_v) goto done;
/* clipper changed this is in addition to anything else for obj */
- evas_object_render_pre_clipper_change(&rects, obj);
+ evas_object_render_pre_clipper_change(&obj->layer->evas->clip_changes, obj);
/* gradient changed */
if (o->changed || obj->restack)
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
goto done;
}
/* if it changed geometry */
(obj->cur.geometry.w != obj->prev.geometry.w) ||
(obj->cur.geometry.h != obj->prev.geometry.h))
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
goto done;
}
/* it obviously didn't change - add a NO obscure - this "unupdates" this */
obj->cur.cache.clip.h);
done:
- evas_object_render_pre_effect_updates(&rects, obj, is_v, was_v);
+ evas_object_render_pre_effect_updates(&obj->layer->evas->clip_changes, obj, is_v, was_v);
}
static void
static void
evas_object_gradient2_linear_render_pre(Evas_Object *obj)
{
- Evas_Rectangles rects = { 0, 0, NULL };
Evas_Object_Gradient2_Linear *o;
Evas_Object_Gradient2 *og;
int is_v, was_v;
was_v = evas_object_was_visible(obj);
if (is_v != was_v)
{
- evas_object_render_pre_visible_change(&rects, obj, is_v, was_v);
+ evas_object_render_pre_visible_change(&obj->layer->evas->clip_changes, obj, is_v, was_v);
goto done;
}
/* its not visible - we accounted for it appearing or not so just abort */
if (!is_v) goto done;
/* clipper changed this is in addition to anything else for obj */
- evas_object_render_pre_clipper_change(&rects, obj);
+ evas_object_render_pre_clipper_change(&obj->layer->evas->clip_changes, obj);
/* gradient changed */
if (o->changed || obj->restack)
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
goto done;
}
/* if it changed geometry */
(obj->cur.geometry.w != obj->prev.geometry.w) ||
(obj->cur.geometry.h != obj->prev.geometry.h))
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
goto done;
}
/* it obviously didn't change - add a NO obscure - this "unupdates" this */
obj->cur.cache.clip.h);
done:
- evas_object_render_pre_effect_updates(&rects, obj, is_v, was_v);
+ evas_object_render_pre_effect_updates(&obj->layer->evas->clip_changes, obj, is_v, was_v);
}
static void
static void
evas_object_gradient2_radial_render_pre(Evas_Object *obj)
{
- Evas_Rectangles rects = { 0, 0, NULL };
Evas_Object_Gradient2_Radial *o;
Evas_Object_Gradient2 *og;
int is_v, was_v;
was_v = evas_object_was_visible(obj);
if (is_v != was_v)
{
- evas_object_render_pre_visible_change(&rects, obj, is_v, was_v);
+ evas_object_render_pre_visible_change(&obj->layer->evas->clip_changes, obj, is_v, was_v);
goto done;
}
/* its not visible - we accounted for it appearing or not so just abort */
if (!is_v) goto done;
/* clipper changed this is in addition to anything else for obj */
- evas_object_render_pre_clipper_change(&rects, obj);
+ evas_object_render_pre_clipper_change(&obj->layer->evas->clip_changes, obj);
/* gradient changed */
if (o->changed || obj->restack)
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
goto done;
}
/* if it changed geometry */
(obj->cur.geometry.w != obj->prev.geometry.w) ||
(obj->cur.geometry.h != obj->prev.geometry.h))
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
goto done;
}
/* it obviously didn't change - add a NO obscure - this "unupdates" this */
obj->cur.cache.clip.h);
done:
- evas_object_render_pre_effect_updates(&rects, obj, is_v, was_v);
+ evas_object_render_pre_effect_updates(&obj->layer->evas->clip_changes, obj, is_v, was_v);
}
static void
static void
evas_object_image_render_pre(Evas_Object *obj)
{
- Evas_Rectangles rects = { 0, 0, NULL };
Evas_Object_Image *o;
int is_v, was_v;
was_v = evas_object_was_visible(obj);
if (is_v != was_v)
{
- evas_object_render_pre_visible_change(&rects, obj, is_v, was_v);
+ evas_object_render_pre_visible_change(&obj->layer->evas->clip_changes, obj, is_v, was_v);
if (!o->pixel_updates) goto done;
}
/* it's not visible - we accounted for it appearing or not so just abort */
if (!is_v) goto done;
/* clipper changed this is in addition to anything else for obj */
- evas_object_render_pre_clipper_change(&rects, obj);
+ evas_object_render_pre_clipper_change(&obj->layer->evas->clip_changes, obj);
/* if we restacked (layer or just within a layer) and don't clip anyone */
if (obj->restack)
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
if (!o->pixel_updates) goto done;
}
/* if it changed color */
(obj->cur.color.b != obj->prev.color.b) ||
(obj->cur.color.a != obj->prev.color.a))
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
if (!o->pixel_updates) goto done;
}
/* if it changed render op */
if (obj->cur.render_op != obj->prev.render_op)
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
if (!o->pixel_updates) goto done;
}
/* if it changed anti_alias */
if (obj->cur.anti_alias != obj->prev.anti_alias)
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
if (!o->pixel_updates) goto done;
}
if (o->changed)
((!o->cur.key) && (o->prev.key))
)
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
if (!o->pixel_updates) goto done;
}
if ((o->cur.image.w != o->prev.image.w) ||
(o->cur.cspace != o->prev.cspace) ||
(o->cur.smooth_scale != o->prev.smooth_scale))
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
if (!o->pixel_updates) goto done;
}
if ((o->cur.border.l != o->prev.border.l) ||
(o->cur.border.t != o->prev.border.t) ||
(o->cur.border.b != o->prev.border.b))
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
if (!o->pixel_updates) goto done;
}
if (o->dirty_pixels)
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
if (!o->pixel_updates) goto done;
}
}
(!o->pixel_updates)
)
{
- evas_rects_return_difference_rects(&rects,
+ evas_rects_return_difference_rects(&obj->layer->evas->clip_changes,
obj->cur.geometry.x,
obj->cur.geometry.y,
obj->cur.geometry.w,
(obj->cur.geometry.h != obj->prev.geometry.h))
)
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
if (!o->pixel_updates) goto done;
}
if (o->changed)
(o->cur.fill.w != o->prev.fill.w) ||
(o->cur.fill.h != o->prev.fill.h))
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
if (!o->pixel_updates) goto done;
}
if ((o->cur.border.l == 0) &&
r.h = ((rr->h + 2) * h) / o->cur.image.h;
r.x += obj->cur.geometry.x + x;
r.y += obj->cur.geometry.y + y;
- evas_add_rect(&rects, r.x, r.y, r.w, r.h);
+ evas_add_rect(&obj->layer->evas->clip_changes, r.x, r.y, r.w, r.h);
idy += h;
}
idx += idw;
EINA_LIST_FREE(o->pixel_updates, r)
eina_mempool_free(_evas_rectangle_mp, 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);
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
goto done;
}
}
obj->cur.cache.clip.w,
obj->cur.cache.clip.h);
done:
- evas_object_render_pre_effect_updates(&rects, obj, is_v, was_v);
+ evas_object_render_pre_effect_updates(&obj->layer->evas->clip_changes, obj, is_v, was_v);
}
static void
static void
evas_object_line_render_pre(Evas_Object *obj)
{
- Evas_Rectangles rects = { 0, 0, NULL };
Evas_Object_Line *o;
int is_v, was_v;
was_v = evas_object_was_visible(obj);
if (is_v != was_v)
{
- evas_object_render_pre_visible_change(&rects, obj, is_v, was_v);
+ evas_object_render_pre_visible_change(&obj->layer->evas->clip_changes, obj, is_v, was_v);
goto done;
}
/* it's not visible - we accounted for it appearing or not so just abort */
if (!is_v) goto done;
/* clipper changed this is in addition to anything else for obj */
- evas_object_render_pre_clipper_change(&rects, obj);
+ evas_object_render_pre_clipper_change(&obj->layer->evas->clip_changes, obj);
/* if we restacked (layer or just within a layer) */
if (obj->restack)
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
goto done;
}
/* if it changed anti_alias */
if (obj->cur.anti_alias != obj->prev.anti_alias)
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
goto done;
}
/* if it changed render op */
if (obj->cur.render_op != obj->prev.render_op)
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
goto done;
}
/* if it changed color */
(obj->cur.color.b != obj->prev.color.b) ||
(obj->cur.color.a != obj->prev.color.a))
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
goto done;
}
/* if it changed geometry - and obviously not visibility or color */
(o->cur.y2 != o->prev.y2)))
)
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
goto done;
}
done:
- evas_object_render_pre_effect_updates(&rects, obj, is_v, was_v);
+ evas_object_render_pre_effect_updates(&obj->layer->evas->clip_changes, obj, is_v, was_v);
}
static void
}
void
-evas_object_render_pre_visible_change(Evas_Rectangles *rects, Evas_Object *obj, int is_v, int was_v)
+evas_object_render_pre_visible_change(Eina_Array *rects, Evas_Object *obj, int is_v, int was_v)
{
if (obj->smart.smart) return ;
if (is_v == was_v) return ;
}
void
-evas_object_render_pre_clipper_change(Evas_Rectangles *rects, Evas_Object *obj)
+evas_object_render_pre_clipper_change(Eina_Array *rects, Evas_Object *obj)
{
if (obj->smart.smart) return ;
if (obj->cur.clipper == obj->prev.clipper) return ;
}
void
-evas_object_render_pre_prev_cur_add(Evas_Rectangles *rects, Evas_Object *obj)
+evas_object_render_pre_prev_cur_add(Eina_Array *rects, Evas_Object *obj)
{
evas_add_rect(rects,
obj->cur.geometry.x,
void
-evas_object_render_pre_effect_updates(Evas_Rectangles *rects, Evas_Object *obj, int is_v, int was_v)
+evas_object_render_pre_effect_updates(Eina_Array *rects, Evas_Object *obj, int is_v, int was_v)
{
Evas_Rectangle *r;
Evas_Object *clipper;
Eina_List *l;
unsigned int i;
+ Eina_Array_Iterator it;
int x, y, w, h;
if (obj->smart.smart) goto end;
was_v = 0;
if (!obj->clip.clipees)
{
- for (i = 0; i < rects->count; ++i)
+ EINA_ARRAY_ITER_NEXT(rects, i, r, it)
{
/* get updates and clip to current clip */
- x = rects->array[i].x;
- y = rects->array[i].y;
- w = rects->array[i].w;
- h = rects->array[i].h;
+ x = r->x;
+ y = r->y;
+ w = r->w;
+ h = r->h;
RECTS_CLIP_TO_RECT(x, y, w, h,
obj->cur.cache.clip.x,
obj->cur.cache.clip.y,
obj->layer->evas->engine.func->output_redraws_rect_add(obj->layer->evas->engine.data.output,
x, y, w, h);
/* get updates and clip to previous clip */
- x = rects->array[i].x;
- y = rects->array[i].y;
- w = rects->array[i].w;
- h = rects->array[i].h;
+ x = r->x;
+ y = r->y;
+ w = r->w;
+ h = r->h;
RECTS_CLIP_TO_RECT(x, y, w, h,
obj->prev.cache.clip.x,
obj->prev.cache.clip.y,
else
{
evas_object_clip_changes_clean(obj);
- for (i = 0; i < rects->count; ++i)
- {
- r = eina_mempool_alloc(_evas_rectangle_mp, sizeof (Evas_Rectangle));
- if (!r) goto end;
-
- *r = rects->array[i];
- obj->clip.changes = eina_list_append(obj->clip.changes, r);
- }
+ EINA_ARRAY_ITER_NEXT(rects, i, r, it)
+ obj->clip.changes = eina_list_append(obj->clip.changes, r);
+ eina_array_clean(rects);
}
end:
- free(rects->array);
- rects->array = NULL;
- rects->count = 0;
- rects->total = 0;
+ EINA_ARRAY_ITER_NEXT(rects, i, r, it)
+ eina_mempool_free(_evas_rectangle_mp, r);
+ eina_array_clean(rects);
}
int
static void
evas_object_polygon_render_pre(Evas_Object *obj)
{
- Evas_Rectangles rects = { 0, 0, NULL };
Evas_Object_Polygon *o;
int is_v, was_v;
was_v = evas_object_was_visible(obj);
if (is_v != was_v)
{
- evas_object_render_pre_visible_change(&rects, obj, is_v, was_v);
+ evas_object_render_pre_visible_change(&obj->layer->evas->clip_changes, obj, is_v, was_v);
goto done;
}
/* it's not visible - we accounted for it appearing or not so just abort */
if (!is_v) goto done;
/* clipper changed this is in addition to anything else for obj */
- evas_object_render_pre_clipper_change(&rects, obj);
+ evas_object_render_pre_clipper_change(&obj->layer->evas->clip_changes, obj);
/* if we restacked (layer or just within a layer) */
if (obj->restack)
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
goto done;
}
/* if it changed render op */
if (obj->cur.render_op != obj->prev.render_op)
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
goto done;
}
/* if it changed color */
(obj->cur.color.b != obj->prev.color.b) ||
(obj->cur.color.a != obj->prev.color.a))
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
goto done;
}
/* if it changed geometry - and obviously not visibility or color */
(obj->cur.geometry.h != obj->prev.geometry.h) ||
(o->changed))
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
goto done;
}
done:
- evas_object_render_pre_effect_updates(&rects, obj, is_v, was_v);
+ evas_object_render_pre_effect_updates(&obj->layer->evas->clip_changes, obj, is_v, was_v);
}
static void
static void
evas_object_rectangle_render_pre(Evas_Object *obj)
{
- Evas_Rectangles rects = { 0, 0, NULL };
Evas_Object_Rectangle *o;
int is_v, was_v;
was_v = evas_object_was_visible(obj);
if (is_v != was_v)
{
- evas_object_render_pre_visible_change(&rects, obj, is_v, was_v);
+ evas_object_render_pre_visible_change(&obj->layer->evas->clip_changes, obj, is_v, was_v);
goto done;
}
/* it's not visible - we accounted for it appearing or not so just abort */
if (!is_v) goto done;
/* clipper changed this is in addition to anything else for obj */
- evas_object_render_pre_clipper_change(&rects, obj);
+ evas_object_render_pre_clipper_change(&obj->layer->evas->clip_changes, obj);
/* if we restacked (layer or just within a layer) and don't clip anyone */
if ((obj->restack) && (!obj->clip.clipees))
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
goto done;
}
/* if it changed render op */
if (obj->cur.render_op != obj->prev.render_op)
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
goto done;
}
/* if it changed color */
(obj->cur.color.b != obj->prev.color.b) ||
(obj->cur.color.a != obj->prev.color.a))
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
goto done;
}
/* if it changed geometry - and obviously not visibility or color */
(obj->cur.geometry.w != obj->prev.geometry.w) ||
(obj->cur.geometry.h != obj->prev.geometry.h))
{
- evas_rects_return_difference_rects(&rects,
+ evas_rects_return_difference_rects(&obj->layer->evas->clip_changes,
obj->cur.geometry.x,
obj->cur.geometry.y,
obj->cur.geometry.w,
obj->cur.cache.clip.h);
*/
done:
- evas_object_render_pre_effect_updates(&rects, obj, is_v, was_v);
+ evas_object_render_pre_effect_updates(&obj->layer->evas->clip_changes, obj, is_v, was_v);
}
static void
static void
evas_object_text_render_pre(Evas_Object *obj)
{
- Evas_Rectangles rects = { 0, 0, NULL };
Evas_Object_Text *o;
int is_v, was_v;
was_v = evas_object_was_visible(obj);
if (is_v != was_v)
{
- evas_object_render_pre_visible_change(&rects, obj, is_v, was_v);
+ evas_object_render_pre_visible_change(&obj->layer->evas->clip_changes, obj, is_v, was_v);
goto done;
}
/* its not visible - we accounted for it appearing or not so just abort */
if (!is_v) goto done;
/* clipper changed this is in addition to anything else for obj */
- evas_object_render_pre_clipper_change(&rects, obj);
+ evas_object_render_pre_clipper_change(&obj->layer->evas->clip_changes, obj);
/* if we restacked (layer or just within a layer) and dont clip anyone */
if (obj->restack)
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
goto done;
}
/* if it changed color */
(obj->cur.color.b != obj->prev.color.b) ||
(obj->cur.color.a != obj->prev.color.a))
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
goto done;
}
/* if it changed geometry - and obviously not visibility or color */
(obj->cur.geometry.w != obj->prev.geometry.w) ||
(obj->cur.geometry.h != obj->prev.geometry.h))
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
goto done;
}
if (obj->cur.render_op != obj->prev.render_op)
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
goto done;
}
if (obj->cur.scale != obj->prev.scale)
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
goto done;
}
if (o->changed)
((o->cur.glow2.b != o->prev.glow2.b)) ||
((o->cur.glow2.a != o->prev.glow2.a)))
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
goto done;
}
}
done:
- evas_object_render_pre_effect_updates(&rects, obj, is_v, was_v);
+ evas_object_render_pre_effect_updates(&obj->layer->evas->clip_changes, obj, is_v, was_v);
}
static void
static void
evas_object_textblock_render_pre(Evas_Object *obj)
{
- Evas_Rectangles rects = { 0, 0, NULL };
Evas_Object_Textblock *o;
int is_v, was_v;
if (lines) _lines_clear(obj, lines);
o->last_w = obj->cur.geometry.w;
o->redraw = 0;
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
o->changed = 0;
is_v = evas_object_is_visible(obj);
was_v = evas_object_was_visible(obj);
if (o->redraw)
{
o->redraw = 0;
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
o->changed = 0;
is_v = evas_object_is_visible(obj);
was_v = evas_object_was_visible(obj);
was_v = evas_object_was_visible(obj);
if (is_v != was_v)
{
- evas_object_render_pre_visible_change(&rects, obj, is_v, was_v);
+ evas_object_render_pre_visible_change(&obj->layer->evas->clip_changes, obj, is_v, was_v);
goto done;
}
/* it's not visible - we accounted for it appearing or not so just abort */
if (!is_v) goto done;
/* clipper changed this is in addition to anything else for obj */
- evas_object_render_pre_clipper_change(&rects, obj);
+ evas_object_render_pre_clipper_change(&obj->layer->evas->clip_changes, obj);
/* if we restacked (layer or just within a layer) and don't clip anyone */
if (obj->restack)
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
goto done;
}
/* if it changed color */
(obj->cur.color.b != obj->prev.color.b) ||
(obj->cur.color.a != obj->prev.color.a))
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
goto done;
}
/* if it changed geometry - and obviously not visibility or color */
(obj->cur.geometry.w != obj->prev.geometry.w) ||
(obj->cur.geometry.h != obj->prev.geometry.h))
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
goto done;
}
if (o->changed)
{
- evas_object_render_pre_prev_cur_add(&rects, obj);
+ evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
o->changed = 0;
}
done:
- evas_object_render_pre_effect_updates(&rects, obj, is_v, was_v);
+ evas_object_render_pre_effect_updates(&obj->layer->evas->clip_changes, obj, is_v, was_v);
}
static void
evas_object_textblock_render_post(Evas_Object *obj)
{
Evas_Object_Textblock *o;
- Evas_Rectangle *r;
/* this moves the current data to the previous state parts of the object */
/* in whatever way is safest for the object. also if we don't need object */
#include "evas_private.h"
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)
+evas_rects_return_difference_rects(Eina_Array *rects, int x, int y, int w, int h, int xx, int yy, int ww, int hh)
{
if (!RECTS_INTERSECT(x, y, w, h, xx, yy, ww, hh))
{
eina_array_flush(&e->active_objects);
eina_array_flush(&e->restack_objects);
eina_array_flush(&e->render_objects);
+ eina_array_flush(&e->clip_changes);
e->invalidate = 1;
}
}
static inline void
-evas_add_rect(Evas_Rectangles *rects, int x, int y, int w, int h)
+evas_add_rect(Eina_Array *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 = (Evas_Rectangle *)realloc(rects->array, sizeof(Evas_Rectangle) * _tmp_total);
- if (!_add_rect) return ;
+ Evas_Rectangle *r;
- 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;
+ NEW_RECT(r, x, y, w, h);
+ if (r) eina_array_push(rects, r);
}
static inline Cutout_Rect*
Eina_Array obscuring_objects;
Eina_Array temporary_objects;
Eina_Array calculate_objects;
+ Eina_Array clip_changes;
int delete_grabs;
int walking_grabs;
void evas_object_release(Evas_Object *obj, int clean_layer);
void evas_object_change(Evas_Object *obj);
void evas_object_clip_changes_clean(Evas_Object *obj);
-void evas_object_render_pre_visible_change(Evas_Rectangles *rects, Evas_Object *obj, int is_v, int was_v);
-void evas_object_render_pre_clipper_change(Evas_Rectangles *rects, 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_Rectangles *rects, Evas_Object *obj, int is_v, int was_v);
-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_render_pre_visible_change(Eina_Array *rects, Evas_Object *obj, int is_v, int was_v);
+void evas_object_render_pre_clipper_change(Eina_Array *rects, Evas_Object *obj);
+void evas_object_render_pre_prev_cur_add(Eina_Array *rects, Evas_Object *obj);
+void evas_object_render_pre_effect_updates(Eina_Array *rects, Evas_Object *obj, int is_v, int was_v);
+void evas_rects_return_difference_rects(Eina_Array *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_recalc_clippees(Evas_Object *obj);