Enlightenment CVS committal

Author  : raster
Project : e17
Module  : libs/evas

Dir     : e17/libs/evas/src/lib/canvas


Modified Files:
        evas_object_gradient.c evas_object_image.c evas_object_line.c 
        evas_object_main.c evas_object_polygon.c 
        evas_object_rectangle.c evas_object_text.c 
        evas_object_textblock.c evas_rectangle.c 


Log Message:


cedric rect + arrays patch for reducing allocs

===================================================================
RCS file: /cvs/e/e17/libs/evas/src/lib/canvas/evas_object_gradient.c,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -3 -r1.22 -r1.23
--- evas_object_gradient.c      4 Jun 2008 16:41:16 -0000       1.22
+++ evas_object_gradient.c      7 Jul 2008 21:29:29 -0000       1.23
@@ -902,7 +902,7 @@
 static void
 evas_object_gradient_render_pre(Evas_Object *obj)
 {
-   Evas_List *updates = NULL;
+   Evas_Rectangles rects = { 0, 0, NULL };
    Evas_Object_Gradient *o;
    int is_v, was_v;
 
@@ -993,17 +993,17 @@
    was_v = evas_object_was_visible(obj);
    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;
      }
    /* 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 */
-   updates = evas_object_render_pre_clipper_change(updates, obj);
+   evas_object_render_pre_clipper_change(&rects, obj);
    /* gradient changed */
    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;
      }
    /* if it changed geometry */
@@ -1012,7 +1012,7 @@
        (obj->cur.geometry.w != obj->prev.geometry.w) ||
        (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;
      }
    /* it obviously didn't change - add a NO obscure - this "unupdates"  this */
@@ -1028,7 +1028,7 @@
                                                            
obj->cur.cache.clip.h);
    
    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
===================================================================
RCS file: /cvs/e/e17/libs/evas/src/lib/canvas/evas_object_image.c,v
retrieving revision 1.64
retrieving revision 1.65
diff -u -3 -r1.64 -r1.65
--- evas_object_image.c 19 May 2008 03:13:16 -0000      1.64
+++ evas_object_image.c 7 Jul 2008 21:29:29 -0000       1.65
@@ -2074,7 +2074,7 @@
 static void
 evas_object_image_render_pre(Evas_Object *obj)
 {
-   Evas_List *updates = NULL;
+   Evas_Rectangles rects = { 0, 0, NULL };
    Evas_Object_Image *o;
    int is_v, was_v;
 
@@ -2100,17 +2100,17 @@
    was_v = evas_object_was_visible(obj);
    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;
      }
    /* 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 */
-   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 (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 it changed color */
@@ -2119,19 +2119,19 @@
        (obj->cur.color.b != obj->prev.color.b) ||
        (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 it changed 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 it changed 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->changed)
@@ -2142,7 +2142,7 @@
            ((!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->cur.image.w != o->prev.image.w) ||
@@ -2151,7 +2151,7 @@
            (o->cur.cspace != o->prev.cspace) ||
            (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->cur.border.l != o->prev.border.l) ||
@@ -2159,12 +2159,12 @@
            (o->cur.border.t != o->prev.border.t) ||
            (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->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;
          }
      }
@@ -2182,23 +2182,15 @@
        (!o->pixel_updates)
        )
      {
-       Evas_Rectangle *r;
-       Evas_List *rl;
-
-       rl = evas_rects_return_difference_rects(obj->cur.geometry.x,
-                                               obj->cur.geometry.y,
-                                               obj->cur.geometry.w,
-                                               obj->cur.geometry.h,
-                                               obj->prev.geometry.x,
-                                               obj->prev.geometry.y,
-                                               obj->prev.geometry.w,
-                                               obj->prev.geometry.h);
-       while (rl)
-         {
-            r = rl->data;
-            rl = evas_list_remove(rl, r);
-            updates = evas_list_append(updates, r);
-         }
+       evas_rects_return_difference_rects(&rects,
+                                          obj->cur.geometry.x,
+                                          obj->cur.geometry.y,
+                                          obj->cur.geometry.w,
+                                          obj->cur.geometry.h,
+                                          obj->prev.geometry.x,
+                                          obj->prev.geometry.y,
+                                          obj->prev.geometry.w,
+                                          obj->prev.geometry.h);
        if (!o->pixel_updates) goto done;
      }
    if (((obj->cur.geometry.x != obj->prev.geometry.x) ||
@@ -2207,7 +2199,7 @@
        (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->changed)
@@ -2217,7 +2209,7 @@
            (o->cur.fill.w != o->prev.fill.w) ||
            (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->cur.border.l == 0) &&
@@ -2227,7 +2219,7 @@
          {
             while (o->pixel_updates)
               {
-                 Evas_Rectangle *r, *rr;
+                 Evas_Rectangle *rr;
                  Evas_Coord idw, idh, idx, idy;
                  int x, y, w, h;
 
@@ -2251,16 +2243,18 @@
                       w = ((int)(idx + idw)) - x;
                       while (idy < obj->cur.geometry.h)
                         {
+                           Evas_Rectangle r;
+
                            y = idy;
                            h = ((int)(idy + idh)) - y;
-                           NEW_RECT(r, x, y, w, h);
-                           r->x = ((rr->x - 1) * r->w) / o->cur.image.w;
-                           r->y = ((rr->y - 1) * r->h) / o->cur.image.h;
-                           r->w = ((rr->w + 2) * r->w) / o->cur.image.w;
-                           r->h = ((rr->h + 2) * r->h) / o->cur.image.h;
-                           r->x += obj->cur.geometry.x + x;
-                           r->y += obj->cur.geometry.y + y;
-                           if (r) updates = evas_list_append(updates, r);
+
+                           r.x = ((rr->x - 1) * w) / o->cur.image.w;
+                           r.y = ((rr->y - 1) * h) / o->cur.image.h;
+                           r.w = ((rr->w + 2) * w) / o->cur.image.w;
+                           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);
                            idy += h;
                         }
                       idx += idw;
@@ -2283,7 +2277,7 @@
                       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);
-                 updates = evas_object_render_pre_prev_cur_add(updates, obj);
+                 evas_object_render_pre_prev_cur_add(&rects, obj);
                  goto done;
               }
          }
@@ -2299,7 +2293,7 @@
                                                            
obj->cur.cache.clip.w,
                                                            
obj->cur.cache.clip.h);
    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
===================================================================
RCS file: /cvs/e/e17/libs/evas/src/lib/canvas/evas_object_line.c,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -3 -r1.24 -r1.25
--- evas_object_line.c  8 Feb 2008 22:35:19 -0000       1.24
+++ evas_object_line.c  7 Jul 2008 21:29:29 -0000       1.25
@@ -298,7 +298,7 @@
 static void
 evas_object_line_render_pre(Evas_Object *obj)
 {
-   Evas_List *updates = NULL;
+   Evas_Rectangles rects = { 0, 0, NULL };
    Evas_Object_Line *o;
    int is_v, was_v;
 
@@ -324,29 +324,29 @@
    was_v = evas_object_was_visible(obj);
    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;
      }
    /* 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 */
-   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 (obj->restack)
      {
-       updates = evas_object_render_pre_prev_cur_add(updates, obj);
+       evas_object_render_pre_prev_cur_add(&rects, obj);
        goto done;
      }
    /* if it changed 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;
      }
    /* if it changed 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;
      }
    /* if it changed color */
@@ -355,7 +355,7 @@
        (obj->cur.color.b != obj->prev.color.b) ||
        (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;
      }
    /* if it changed geometry - and obviously not visibility or color */
@@ -372,11 +372,11 @@
         (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;
      }
    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
===================================================================
RCS file: /cvs/e/e17/libs/evas/src/lib/canvas/evas_object_main.c,v
retrieving revision 1.72
retrieving revision 1.73
diff -u -3 -r1.72 -r1.73
--- evas_object_main.c  19 Jun 2008 04:09:33 -0000      1.72
+++ evas_object_main.c  7 Jul 2008 21:29:29 -0000       1.73
@@ -85,153 +85,127 @@
    if (obj->smart.parent) evas_object_change(obj->smart.parent);
 }
 
-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_Rectangle *r;
-
-   if (obj->smart.smart) return updates;
-   if (is_v == was_v) return updates;
+   if (obj->smart.smart) return ;
+   if (is_v == was_v) return ;
    if (is_v)
      {
-       NEW_RECT(r,
-                obj->cur.cache.clip.x,
-                obj->cur.cache.clip.y,
-                obj->cur.cache.clip.w,
-                obj->cur.cache.clip.h);
-       if (r) updates = evas_list_append(updates, r);
+       evas_add_rect(rects,
+                     obj->cur.cache.clip.x,
+                     obj->cur.cache.clip.y,
+                     obj->cur.cache.clip.w,
+                     obj->cur.cache.clip.h);
      }
    else
      {
-       NEW_RECT(r,
-                obj->prev.cache.clip.x,
-                obj->prev.cache.clip.y,
-                obj->prev.cache.clip.w,
-                obj->prev.cache.clip.h);
-       if (r) updates = evas_list_append(updates, r);
+       evas_add_rect(rects,
+                     obj->prev.cache.clip.x,
+                     obj->prev.cache.clip.y,
+                     obj->prev.cache.clip.w,
+                     obj->prev.cache.clip.h);
      }
-   return updates;
 }
 
-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_Rectangle *r;
-   Evas_List *rl;
+   unsigned int i;
 
-   if (obj->smart.smart) return updates;
-   if (obj->cur.clipper == obj->prev.clipper) return updates;
+   if (obj->smart.smart) return ;
+   if (obj->cur.clipper == obj->prev.clipper) return ;
    if ((obj->cur.clipper) && (obj->prev.clipper))
      {
        /* get difference rects between clippers */
-       rl = 
evas_rects_return_difference_rects(obj->cur.clipper->cur.cache.clip.x,
-                                               
obj->cur.clipper->cur.cache.clip.y,
-                                               
obj->cur.clipper->cur.cache.clip.w,
-                                               
obj->cur.clipper->cur.cache.clip.h,
-                                               
obj->prev.clipper->prev.cache.clip.x,
-                                               
obj->prev.clipper->prev.cache.clip.y,
-                                               
obj->prev.clipper->prev.cache.clip.w,
-                                               
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);
-         }
+       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.w,
+                                          obj->cur.clipper->cur.cache.clip.h,
+                                          obj->prev.clipper->prev.cache.clip.x,
+                                          obj->prev.clipper->prev.cache.clip.y,
+                                          obj->prev.clipper->prev.cache.clip.w,
+                                          
obj->prev.clipper->prev.cache.clip.h);
      }
    else if (obj->cur.clipper)
      {
-       rl = evas_rects_return_difference_rects(obj->cur.geometry.x,
-                                               obj->cur.geometry.y,
-                                               obj->cur.geometry.w,
-                                               obj->cur.geometry.h,
+       evas_rects_return_difference_rects(rects,
+                                          obj->cur.geometry.x,
+                                          obj->cur.geometry.y,
+                                          obj->cur.geometry.w,
+                                          obj->cur.geometry.h,
 ////   rl = evas_rects_return_difference_rects(obj->cur.cache.geometry.x,
 ////                                           obj->cur.cache.geometry.y,
 ////                                           obj->cur.cache.geometry.w,
 ////                                           obj->cur.cache.geometry.h,
-                                               
obj->cur.clipper->cur.cache.clip.x,
-                                               
obj->cur.clipper->cur.cache.clip.y,
-                                               
obj->cur.clipper->cur.cache.clip.w,
-                                               
obj->cur.clipper->cur.cache.clip.h);
-       while (rl)
-         {
-            r = rl->data;
-            rl = evas_list_remove(rl, r);
-            updates = evas_list_append(updates, r);
-         }
+                                          obj->cur.clipper->cur.cache.clip.x,
+                                          obj->cur.clipper->cur.cache.clip.y,
+                                          obj->cur.clipper->cur.cache.clip.w,
+                                          obj->cur.clipper->cur.cache.clip.h);
      }
    else if (obj->prev.clipper)
      {
-       rl = evas_rects_return_difference_rects(obj->prev.geometry.x,
-                                               obj->prev.geometry.y,
-                                               obj->prev.geometry.w,
-                                               obj->prev.geometry.h,
+       evas_rects_return_difference_rects(rects,
+                                          obj->prev.geometry.x,
+                                          obj->prev.geometry.y,
+                                          obj->prev.geometry.w,
+                                          obj->prev.geometry.h,
 ////   rl = evas_rects_return_difference_rects(obj->prev.cache.geometry.x,
 ////                                           obj->prev.cache.geometry.y,
 ////                                           obj->prev.cache.geometry.w,
 ////                                           obj->prev.cache.geometry.h,
-                                               
obj->prev.clipper->prev.cache.clip.x,
-                                               
obj->prev.clipper->prev.cache.clip.y,
-                                               
obj->prev.clipper->prev.cache.clip.w,
-                                               
obj->prev.clipper->prev.cache.clip.h);
-       while (rl)
-         {
-            r = rl->data;
-            rl = evas_list_remove(rl, r);
-            updates = evas_list_append(updates, r);
-         }
+                                          obj->prev.clipper->prev.cache.clip.x,
+                                          obj->prev.clipper->prev.cache.clip.y,
+                                          obj->prev.clipper->prev.cache.clip.w,
+                                          
obj->prev.clipper->prev.cache.clip.h);
      }
-   return updates;
 }
 
-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)
 {
-   Evas_Rectangle *r;
-
-   NEW_RECT(r,
-           obj->cur.geometry.x,
-           obj->cur.geometry.y,
-           obj->cur.geometry.w,
-           obj->cur.geometry.h);
+   evas_add_rect(rects,
+                obj->cur.geometry.x,
+                obj->cur.geometry.y,
+                obj->cur.geometry.w,
+                obj->cur.geometry.h);
 ////       obj->cur.cache.geometry.x,
 ////       obj->cur.cache.geometry.y,
 ////       obj->cur.cache.geometry.w,
 ////       obj->cur.cache.geometry.h);
-   if (r) updates = evas_list_append(updates, r);
-   NEW_RECT(r,
-           obj->prev.geometry.x,
-           obj->prev.geometry.y,
-           obj->prev.geometry.w,
-           obj->prev.geometry.h);
+   evas_add_rect(rects,
+                obj->prev.geometry.x,
+                obj->prev.geometry.y,
+                obj->prev.geometry.w,
+                obj->prev.geometry.h);
 ////       obj->prev.cache.geometry.x,
 ////       obj->prev.cache.geometry.y,
 ////       obj->prev.cache.geometry.w,
 ////       obj->prev.cache.geometry.h);
-   if (r) updates = evas_list_append(updates, r);
-   return updates;
 }
 
 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;
-   int x, y, w, h;
    Evas_Object *clipper;
    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? */
    was_v = 0;
    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 */
-            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,
                                obj->cur.cache.clip.x,
                                obj->cur.cache.clip.y,
@@ -241,7 +215,10 @@
               
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 = 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,
                                obj->prev.cache.clip.x,
                                obj->prev.cache.clip.y,
@@ -250,8 +227,6 @@
             if ((w > 0) && (h > 0))
               
obj->layer->evas->engine.func->output_redraws_rect_add(obj->layer->evas->engine.data.output,
                                                                      x, y, w, 
h);
-            free(r);
-            r = NULL;
          }
        /* if the object is actually visible, take any parent clip changes */
        if (is_v)
@@ -294,8 +269,21 @@
             free(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
===================================================================
RCS file: /cvs/e/e17/libs/evas/src/lib/canvas/evas_object_polygon.c,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -3 -r1.22 -r1.23
--- evas_object_polygon.c       28 Jun 2007 23:22:20 -0000      1.22
+++ evas_object_polygon.c       7 Jul 2008 21:29:29 -0000       1.23
@@ -316,7 +316,7 @@
 static void
 evas_object_polygon_render_pre(Evas_Object *obj)
 {
-   Evas_List *updates = NULL;
+   Evas_Rectangles rects = { 0, 0, NULL };
    Evas_Object_Polygon *o;
    int is_v, was_v;
 
@@ -342,23 +342,23 @@
    was_v = evas_object_was_visible(obj);
    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;
      }
    /* 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 */
-   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 (obj->restack)
      {
-       updates = evas_object_render_pre_prev_cur_add(updates, obj);
+       evas_object_render_pre_prev_cur_add(&rects, obj);
        goto done;
      }
    /* if it changed 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;
      }
    /* if it changed color */
@@ -367,7 +367,7 @@
        (obj->cur.color.b != obj->prev.color.b) ||
        (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;
      }
    /* if it changed geometry - and obviously not visibility or color */
@@ -379,11 +379,11 @@
        (obj->cur.geometry.h != obj->prev.geometry.h) ||
        (o->changed))
      {
-       updates = evas_object_render_pre_prev_cur_add(updates, obj);
+       evas_object_render_pre_prev_cur_add(&rects, obj);
        goto 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
===================================================================
RCS file: /cvs/e/e17/libs/evas/src/lib/canvas/evas_object_rectangle.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -3 -r1.14 -r1.15
--- evas_object_rectangle.c     4 Jun 2008 16:41:16 -0000       1.14
+++ evas_object_rectangle.c     7 Jul 2008 21:29:29 -0000       1.15
@@ -162,7 +162,7 @@
 static void
 evas_object_rectangle_render_pre(Evas_Object *obj)
 {
-   Evas_List *updates = NULL;
+   Evas_Rectangles rects = { 0, 0, NULL };
    Evas_Object_Rectangle *o;
    int is_v, was_v;
 
@@ -188,23 +188,23 @@
    was_v = evas_object_was_visible(obj);
    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;
      }
    /* 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 */
-   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 ((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;
      }
    /* if it changed 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;
      }
    /* if it changed color */
@@ -213,7 +213,7 @@
        (obj->cur.color.b != obj->prev.color.b) ||
        (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;
      }
    /* if it changed geometry - and obviously not visibility or color */
@@ -224,17 +224,15 @@
        (obj->cur.geometry.w != obj->prev.geometry.w) ||
        (obj->cur.geometry.h != obj->prev.geometry.h))
      {
-       Evas_Rectangle *r;
-       Evas_List *rl;
-       
-       rl = evas_rects_return_difference_rects(obj->cur.geometry.x,
-                                               obj->cur.geometry.y,
-                                               obj->cur.geometry.w,
-                                               obj->cur.geometry.h,
-                                               obj->prev.geometry.x,
-                                               obj->prev.geometry.y,
-                                               obj->prev.geometry.w,
-                                               obj->prev.geometry.h);
+       evas_rects_return_difference_rects(&rects,
+                                          obj->cur.geometry.x,
+                                          obj->cur.geometry.y,
+                                          obj->cur.geometry.w,
+                                          obj->cur.geometry.h,
+                                          obj->prev.geometry.x,
+                                          obj->prev.geometry.y,
+                                          obj->prev.geometry.w,
+                                          obj->prev.geometry.h);
 ////   rl = evas_rects_return_difference_rects(obj->cur.cache.geometry.x,
 ////                                           obj->cur.cache.geometry.y,
 ////                                           obj->cur.cache.geometry.w,
@@ -243,12 +241,6 @@
 ////                                           obj->prev.cache.geometry.y,
 ////                                           obj->prev.cache.geometry.w,
 ////                                           obj->prev.cache.geometry.h);
-       while (rl)
-         {
-            r = rl->data;
-            rl = evas_list_remove(rl, r);
-            updates = evas_list_append(updates, r);
-         }
        goto done;
      }
    /* it obviously didn't change - add a NO obscure - this "unupdates"  this */
@@ -265,7 +257,7 @@
                                                            
obj->cur.cache.clip.h);
   */
    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
===================================================================
RCS file: /cvs/e/e17/libs/evas/src/lib/canvas/evas_object_text.c,v
retrieving revision 1.69
retrieving revision 1.70
diff -u -3 -r1.69 -r1.70
--- evas_object_text.c  1 May 2008 05:48:03 -0000       1.69
+++ evas_object_text.c  7 Jul 2008 21:29:29 -0000       1.70
@@ -1541,7 +1541,7 @@
 static void
 evas_object_text_render_pre(Evas_Object *obj)
 {
-   Evas_List *updates = NULL;
+   Evas_Rectangles rects = { 0, 0, NULL };
    Evas_Object_Text *o;
    int is_v, was_v;
 
@@ -1567,17 +1567,17 @@
    was_v = evas_object_was_visible(obj);
    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;
      }
    /* 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 */
-   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 (obj->restack)
      {
-       updates = evas_object_render_pre_prev_cur_add(updates, obj);
+       evas_object_render_pre_prev_cur_add(&rects, obj);
        goto done;
      }
    /* if it changed color */
@@ -1586,7 +1586,7 @@
        (obj->cur.color.b != obj->prev.color.b) ||
        (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;
      }
    /* if it changed geometry - and obviously not visibility or color */
@@ -1597,12 +1597,12 @@
        (obj->cur.geometry.w != obj->prev.geometry.w) ||
        (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;
      }
    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;
      }
    if (o->changed)
@@ -1632,12 +1632,12 @@
            ((o->cur.glow2.b != o->prev.glow2.b)) ||
            ((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;
          }
      }
    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
===================================================================
RCS file: /cvs/e/e17/libs/evas/src/lib/canvas/evas_object_textblock.c,v
retrieving revision 1.151
retrieving revision 1.152
diff -u -3 -r1.151 -r1.152
--- evas_object_textblock.c     28 Jun 2008 10:55:58 -0000      1.151
+++ evas_object_textblock.c     7 Jul 2008 21:29:29 -0000       1.152
@@ -4740,7 +4740,7 @@
 static void
 evas_object_textblock_render_pre(Evas_Object *obj)
 {
-   Evas_List *updates = NULL;
+   Evas_Rectangles rects = { 0, 0, NULL };
    Evas_Object_Textblock *o;
    int is_v, was_v;
 
@@ -4770,7 +4770,7 @@
        if (lines) _lines_clear(obj, lines);
        o->last_w = obj->cur.geometry.w;
        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;
        is_v = evas_object_is_visible(obj);
        was_v = evas_object_was_visible(obj);
@@ -4779,7 +4779,7 @@
    if (o->redraw)
      {
        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;
        is_v = evas_object_is_visible(obj);
        was_v = evas_object_was_visible(obj);
@@ -4798,17 +4798,17 @@
    was_v = evas_object_was_visible(obj);
    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;
      }
    /* 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 */
-   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 (obj->restack)
      {
-       updates = evas_object_render_pre_prev_cur_add(updates, obj);
+       evas_object_render_pre_prev_cur_add(&rects, obj);
        goto done;
      }
    /* if it changed color */
@@ -4817,7 +4817,7 @@
        (obj->cur.color.b != obj->prev.color.b) ||
        (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;
      }
    /* if it changed geometry - and obviously not visibility or color */
@@ -4828,7 +4828,7 @@
        (obj->cur.geometry.w != obj->prev.geometry.w) ||
        (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;
      }
    if (o->changed)
@@ -4842,11 +4842,11 @@
        r->h = obj->cur.geometry.h;
        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;
      }
    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
===================================================================
RCS file: /cvs/e/e17/libs/evas/src/lib/canvas/evas_rectangle.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- evas_rectangle.c    18 Jun 2005 01:00:30 -0000      1.3
+++ evas_rectangle.c    7 Jul 2008 21:29:29 -0000       1.4
@@ -1,23 +1,20 @@
 #include "evas_common.h"
 #include "evas_private.h"
 
-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)
 {
-   Evas_List *rects = NULL;
-   Evas_Rectangle *r;
+   unsigned int available = 0;
 
    if (!RECTS_INTERSECT(x, y, w, h, xx, yy, ww, hh))
      {
-       NEW_RECT(r, x, y, w, h);
-       if (r) rects = evas_list_append(rects, r);
-       NEW_RECT(r, xx, yy, ww, hh);
-       if (r) rects = evas_list_append(rects, r);
+       evas_add_rect(rects, x, y, w, h);
+       evas_add_rect(rects, xx, yy, ww, hh);
      }
    else
      {
        int x1[4], y1[4], i, j;
-       Evas_List *rl = NULL, *rll;
+       Evas_Rectangles tmp = { 0, 0, NULL };
 
        if (x < xx)
          {
@@ -63,32 +60,42 @@
          {
             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));
-                      intsec2 = (RECTS_INTERSECT(r->x, r->y, r->w, r->h, xx, 
yy, ww, hh));
-                      if (intsec1 ^ intsec2)
-                        rects = evas_list_append(rects, r);
-                      else
-                        free(r);
+                 tx = x1[i];
+                 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)
+                   {
+                      evas_add_rect(rects, tx, ty, tw, th);
                    }
-                 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;
 }



-------------------------------------------------------------------------
Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW!
Studies have shown that voting for your favorite open source project,
along with a healthy diet, reduces your potential for chronic lameness
and boredom. Vote Now at http://www.sourceforge.net/community/cca08
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to