Enlightenment CVS committal

Author  : raster
Project : e17
Module  : libs/evas

Dir     : e17/libs/evas/src/lib/engines/common


Modified Files:
        evas_tiler.c 


Log Message:


cedric's patches.

===================================================================
RCS file: /cvs/e/e17/libs/evas/src/lib/engines/common/evas_tiler.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -3 -r1.8 -r1.9
--- evas_tiler.c        6 Sep 2006 07:33:40 -0000       1.8
+++ evas_tiler.c        4 Apr 2007 13:25:55 -0000       1.9
@@ -81,16 +81,24 @@
    if (tilebuf_x_intersect(tb, x, w, &tx1, &tx2, &tfx1, &tfx2) &&
        tilebuf_y_intersect(tb, y, h, &ty1, &ty2, &tfy1, &tfy2))
      {
-       for (yy = ty1; yy <= ty2; yy++)
+        Tilebuf_Tile    *tbt;
+        int             delta_x;
+        int             delta_y;
+
+        tbt = &(TILE(tb, tx1, ty1));
+        delta_x = tx2 - tx1 + 1;
+        delta_y = ty2 - ty1 + 1;
+       for (yy = delta_y; yy > 0; yy--)
          {
-            Tilebuf_Tile *tbt;
+            Tilebuf_Tile *tbti;
 
-            tbt = &(TILE(tb, tx1, yy));
-            for (xx = tx1; xx <= tx2; xx++)
+            tbti = tbt;
+            for (xx = delta_x; xx > 0; xx--)
               {
-                 tbt->redraw = 1;
-                 tbt++;
+                 tbti->redraw = 1;
+                 tbti++;
               }
+             tbt += tb->tiles.w;
          }
        num = (tx2 - tx1 + 1) * (ty2 - ty1 + 1);
      }
@@ -115,20 +123,29 @@
    if (tilebuf_x_intersect(tb, x, w, &tx1, &tx2, &tfx1, &tfx2) &&
        tilebuf_y_intersect(tb, y, h, &ty1, &ty2, &tfy1, &tfy2))
      {
-       if (!tfx1) tx1++;
+        Tilebuf_Tile    *tbt;
+        int             delta_y;
+        int             delta_x;
+
+        if (!tfx1) tx1++;
        if (!tfx2) tx2--;
        if (!tfy1) ty1++;
        if (!tfy2) ty2--;
-       for (yy = ty1; yy <= ty2; yy++)
+
+        tbt = &(TILE(tb, tx1, ty1));
+        delta_x = tx2 - tx1 + 1;
+        delta_y = ty2 - ty1 + 1;
+       for (yy = delta_y; yy > 0; yy--)
          {
-            Tilebuf_Tile *tbt;
+            Tilebuf_Tile       *tbti;
 
-            tbt = &(TILE(tb, tx1, yy));
-            for (xx = tx1; xx <= tx2; xx++)
+            tbti = tbt;
+            for (xx = delta_x; xx > 0; xx--)
               {
-                 tbt->redraw = 0;
-                 tbt++;
+                 tbti->redraw = 0;
+                 tbti++;
               }
+             tbt += tb->tiles.w;
          }
        num = (tx2 - tx1 + 1) * (ty2 - ty1 + 1);
      }
@@ -166,42 +183,56 @@
    return evas_common_regionbuf_rects_get(tb->rb);
 #else
    Tilebuf_Rect *rects = NULL;
+   Tilebuf_Tile *tbt;
    int x, y;
 
+   tbt = &(TILE(tb, 0, 0));
    for (y = 0; y < tb->tiles.h; y++)
      {
-       for (x = 0; x < tb->tiles.w; x++)
+       for (x = 0; x < tb->tiles.w; x++, tbt++)
          {
-            if (TILE(tb, x, y).redraw)
+            if (tbt->redraw)
               {
+                  Tilebuf_Tile *tbti;
                  int can_expand_x = 1, can_expand_y = 1;
                  Tilebuf_Rect *r = NULL;
                  int xx = 0, yy = 0;
-                 r = calloc(1, sizeof(Tilebuf_Rect));
+                 r = malloc(sizeof(Tilebuf_Rect));
+                  r->_list_data.next = NULL;
+                  r->_list_data.prev = NULL;
+                  r->_list_data.last = NULL;
+
 /* amalgamate tiles */
 #if 1
+                  tbti = tbt;
                  while (can_expand_x)
                    {
+                       tbti++;
                       xx++;
                       if ((x + xx) >= tb->tiles.w)
                         can_expand_x = 0;
-                      else if (!(TILE(tb, x + xx, y).redraw))
+                      else if (!(tbti->redraw))
                         can_expand_x = 0;
                       if (can_expand_x)
-                        TILE(tb, x + xx, y).redraw = 0;
+                        tbti->redraw = 0;
                    }
+                  tbti = tbt;
                  while (can_expand_y)
                    {
                       int i;
 
+                       tbti += tb->tiles.w;
                       yy++;
                       if ((y + yy) >= tb->tiles.h)
                         can_expand_y = 0;
                       if (can_expand_y)
                         {
-                           for (i = x; i < x + xx; i++)
+                            Tilebuf_Tile *tbtj;
+
+                            tbtj = tbti;
+                           for (i = x; i < x + xx; i++, tbtj++)
                              {
-                                if (!(TILE(tb, i, y + yy).redraw))
+                                if (!(tbtj->redraw))
                                   {
                                      can_expand_y = 0;
                                      break;
@@ -210,11 +241,14 @@
                         }
                       if (can_expand_y)
                         {
-                           for (i = x; i < x + xx; i++)
-                             TILE(tb, i, y + yy).redraw = 0;
+                            Tilebuf_Tile *tbtj;
+
+                            tbtj = tbti;
+                           for (i = x; i < x + xx; i++, tbtj++)
+                             tbtj->redraw = 0;
                         }
                    }
-                 TILE(tb, x, y).redraw = 0;
+                 tbt->redraw = 0;
 #else
                  xx = 1;
                  yy = 1;
@@ -225,6 +259,7 @@
                  r->h = (yy) * tb->tile_size.h;
                  rects = evas_object_list_append(rects, r);
                  x = x + (xx - 1);
+                  tbt += xx - 1;
               }
          }
      }



-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to