diff --git a/legacy/evas/src/lib/canvas/evas_object_gradient.c b/legacy/evas/src/lib/canvas/evas_object_gradient.c index f20daf9195..0971457027 100644 --- a/legacy/evas/src/lib/canvas/evas_object_gradient.c +++ b/legacy/evas/src/lib/canvas/evas_object_gradient.c @@ -1040,14 +1040,7 @@ evas_object_gradient_render_post(Evas_Object *obj) /* data anymore we can free it if the object deems this is a good idea */ o = (Evas_Object_Gradient *)(obj->object_data); /* remove those pesky changes */ - while (obj->clip.changes) - { - Evas_Rectangle *r; - - r = (Evas_Rectangle *)obj->clip.changes->data; - obj->clip.changes = eina_list_remove(obj->clip.changes, r); - free(r); - } + evas_object_clip_changes_clean(obj); /* move cur to prev safely for object data */ obj->prev = obj->cur; if (o->prev.type.name && (o->prev.type.name != o->cur.type.name)) diff --git a/legacy/evas/src/lib/canvas/evas_object_gradient2_linear.c b/legacy/evas/src/lib/canvas/evas_object_gradient2_linear.c index 72404c719e..31005568f4 100644 --- a/legacy/evas/src/lib/canvas/evas_object_gradient2_linear.c +++ b/legacy/evas/src/lib/canvas/evas_object_gradient2_linear.c @@ -398,14 +398,7 @@ evas_object_gradient2_linear_render_post(Evas_Object *obj) o = (Evas_Object_Gradient2_Linear *)(obj->object_data); og = (Evas_Object_Gradient2 *)(o); /* remove those pesky changes */ - while (obj->clip.changes) - { - Evas_Rectangle *r; - - r = (Evas_Rectangle *)obj->clip.changes->data; - obj->clip.changes = eina_list_remove(obj->clip.changes, r); - free(r); - } + evas_object_clip_changes_clean(obj); /* move cur to prev safely for object data */ obj->prev = obj->cur; obj->changed = 0; diff --git a/legacy/evas/src/lib/canvas/evas_object_gradient2_radial.c b/legacy/evas/src/lib/canvas/evas_object_gradient2_radial.c index 6cc236bc0d..9ca682dd46 100644 --- a/legacy/evas/src/lib/canvas/evas_object_gradient2_radial.c +++ b/legacy/evas/src/lib/canvas/evas_object_gradient2_radial.c @@ -396,14 +396,7 @@ evas_object_gradient2_radial_render_post(Evas_Object *obj) o = (Evas_Object_Gradient2_Radial *)(obj->object_data); og = (Evas_Object_Gradient2 *)(o); /* remove those pesky changes */ - while (obj->clip.changes) - { - Evas_Rectangle *r; - - r = (Evas_Rectangle *)obj->clip.changes->data; - obj->clip.changes = eina_list_remove(obj->clip.changes, r); - free(r); - } + evas_object_clip_changes_clean(obj); /* move cur to prev safely for object data */ obj->prev = obj->cur; obj->changed = 0; diff --git a/legacy/evas/src/lib/canvas/evas_object_image.c b/legacy/evas/src/lib/canvas/evas_object_image.c index 9ce1ce29ad..3c588b1ff2 100644 --- a/legacy/evas/src/lib/canvas/evas_object_image.c +++ b/legacy/evas/src/lib/canvas/evas_object_image.c @@ -2537,8 +2537,7 @@ evas_object_image_render_post(Evas_Object *obj) /* data anymore we can free it if the object deems this is a good idea */ o = (Evas_Object_Image *)(obj->object_data); /* remove those pesky changes */ - EINA_LIST_FREE(obj->clip.changes, r) - eina_mempool_free(_evas_rectangle_mp, r); + evas_object_clip_changes_clean(obj); EINA_LIST_FREE(o->pixel_updates, r) eina_mempool_free(_evas_rectangle_mp, r); /* move cur to prev safely for object data */ diff --git a/legacy/evas/src/lib/canvas/evas_object_line.c b/legacy/evas/src/lib/canvas/evas_object_line.c index 0432c1d9d0..d8e810afd0 100644 --- a/legacy/evas/src/lib/canvas/evas_object_line.c +++ b/legacy/evas/src/lib/canvas/evas_object_line.c @@ -405,14 +405,7 @@ evas_object_line_render_post(Evas_Object *obj) /* data anymore we can free it if the object deems this is a good idea */ o = (Evas_Object_Line *)(obj->object_data); /* remove those pesky changes */ - while (obj->clip.changes) - { - Evas_Rectangle *r; - - r = (Evas_Rectangle *)obj->clip.changes->data; - obj->clip.changes = eina_list_remove(obj->clip.changes, r); - free(r); - } + evas_object_clip_changes_clean(obj); /* move cur to prev safely for object data */ obj->prev = obj->cur; o->prev = o->cur; diff --git a/legacy/evas/src/lib/canvas/evas_object_main.c b/legacy/evas/src/lib/canvas/evas_object_main.c index 4a2999412b..3e2aa0765d 100644 --- a/legacy/evas/src/lib/canvas/evas_object_main.c +++ b/legacy/evas/src/lib/canvas/evas_object_main.c @@ -198,6 +198,16 @@ evas_object_render_pre_prev_cur_add(Evas_Rectangles *rects, Evas_Object *obj) //// obj->prev.cache.geometry.h); } +void +evas_object_clip_changes_clean(Evas_Object *obj) +{ + Evas_Rectangle *r; + + EINA_LIST_FREE(obj->clip.changes, r) + eina_mempool_free(_evas_rectangle_mp, r); +} + + void evas_object_render_pre_effect_updates(Evas_Rectangles *rects, Evas_Object *obj, int is_v, int was_v) { @@ -276,14 +286,10 @@ evas_object_render_pre_effect_updates(Evas_Rectangles *rects, Evas_Object *obj, } else { - while (obj->clip.changes) - { - free(obj->clip.changes->data); - obj->clip.changes = eina_list_remove(obj->clip.changes, obj->clip.changes->data); - } + evas_object_clip_changes_clean(obj); for (i = 0; i < rects->count; ++i) { - r = malloc(sizeof(Evas_Rectangle)); + r = eina_mempool_alloc(_evas_rectangle_mp, sizeof (Evas_Rectangle)); if (!r) goto end; *r = rects->array[i]; diff --git a/legacy/evas/src/lib/canvas/evas_object_polygon.c b/legacy/evas/src/lib/canvas/evas_object_polygon.c index 7f651d63b2..a323054532 100644 --- a/legacy/evas/src/lib/canvas/evas_object_polygon.c +++ b/legacy/evas/src/lib/canvas/evas_object_polygon.c @@ -409,14 +409,7 @@ evas_object_polygon_render_post(Evas_Object *obj) /* data anymore we can free it if the object deems this is a good idea */ o = (Evas_Object_Polygon *)(obj->object_data); /* remove those pesky changes */ - while (obj->clip.changes) - { - Evas_Rectangle *r; - - r = (Evas_Rectangle *)obj->clip.changes->data; - obj->clip.changes = eina_list_remove(obj->clip.changes, r); - free(r); - } + evas_object_clip_changes_clean(obj); /* move cur to prev safely for object data */ obj->prev = obj->cur; o->changed = 0; diff --git a/legacy/evas/src/lib/canvas/evas_object_rectangle.c b/legacy/evas/src/lib/canvas/evas_object_rectangle.c index fb352a2579..7594d80e24 100644 --- a/legacy/evas/src/lib/canvas/evas_object_rectangle.c +++ b/legacy/evas/src/lib/canvas/evas_object_rectangle.c @@ -291,14 +291,7 @@ evas_object_rectangle_render_post(Evas_Object *obj) /* data anymore we can free it if the object deems this is a good idea */ o = (Evas_Object_Rectangle *)(obj->object_data); /* remove those pesky changes */ - while (obj->clip.changes) - { - Evas_Rectangle *r; - - r = (Evas_Rectangle *)obj->clip.changes->data; - obj->clip.changes = eina_list_remove(obj->clip.changes, r); - free(r); - } + evas_object_clip_changes_clean(obj); /* move cur to prev safely for object data */ obj->prev = obj->cur; } diff --git a/legacy/evas/src/lib/canvas/evas_object_text.c b/legacy/evas/src/lib/canvas/evas_object_text.c index ec7c3c65d3..d303e8ce3a 100644 --- a/legacy/evas/src/lib/canvas/evas_object_text.c +++ b/legacy/evas/src/lib/canvas/evas_object_text.c @@ -1685,14 +1685,7 @@ evas_object_text_render_post(Evas_Object *obj) /* data anymore we can free it if the object deems this is a good idea */ o = (Evas_Object_Text *)(obj->object_data); /* remove those pesky changes */ - while (obj->clip.changes) - { - Evas_Rectangle *r; - - r = (Evas_Rectangle *)obj->clip.changes->data; - obj->clip.changes = eina_list_remove(obj->clip.changes, r); - free(r); - } + evas_object_clip_changes_clean(obj); /* move cur to prev safely for object data */ obj->prev = obj->cur; o->prev = o->cur; diff --git a/legacy/evas/src/lib/canvas/evas_object_textblock.c b/legacy/evas/src/lib/canvas/evas_object_textblock.c index dd60dea1e6..7184465afa 100644 --- a/legacy/evas/src/lib/canvas/evas_object_textblock.c +++ b/legacy/evas/src/lib/canvas/evas_object_textblock.c @@ -5529,8 +5529,7 @@ evas_object_textblock_render_post(Evas_Object *obj) /* data anymore we can free it if the object deems this is a good idea */ o = (Evas_Object_Textblock *)(obj->object_data); /* remove those pesky changes */ - EINA_LIST_FREE(obj->clip.changes, r) - eina_mempool_free(_evas_rectangle_mp, r); + evas_object_clip_changes_clean(obj); /* move cur to prev safely for object data */ obj->prev = obj->cur; // o->prev = o->cur; diff --git a/legacy/evas/src/lib/canvas/evas_render.c b/legacy/evas/src/lib/canvas/evas_render.c index 05f1bc1a37..645ad7cd84 100644 --- a/legacy/evas/src/lib/canvas/evas_render.c +++ b/legacy/evas/src/lib/canvas/evas_render.c @@ -423,12 +423,9 @@ evas_render_updates_internal(Evas *e, unsigned char make_updates, unsigned char { Evas_Rectangle *rect; - rect = malloc(sizeof(Evas_Rectangle)); + NEW_RECT(rect, ux, uy, uw, uh); if (rect) - { - rect->x = ux; rect->y = uy; rect->w = uw; rect->h = uh; - updates = eina_list_append(updates, rect); - } + updates = eina_list_append(updates, rect); } off_x = cx - ux; off_y = cy - uy; @@ -600,11 +597,10 @@ evas_render_updates_internal(Evas *e, unsigned char make_updates, unsigned char EAPI void evas_render_updates_free(Eina_List *updates) { - while (updates) - { - free(updates->data); - updates = eina_list_remove(updates, updates->data); - } + Evas_Rectangle *r; + + EINA_LIST_FREE(updates, r) + eina_mempool_free(_evas_rectangle_mp, r); } /** diff --git a/legacy/evas/src/lib/include/evas_private.h b/legacy/evas/src/lib/include/evas_private.h index 13ea78feb0..126b55161e 100644 --- a/legacy/evas/src/lib/include/evas_private.h +++ b/legacy/evas/src/lib/include/evas_private.h @@ -703,6 +703,7 @@ void evas_object_free(Evas_Object *obj, int clean_layer); void evas_object_inject(Evas_Object *obj, Evas *e); 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);