Enlightenment CVS committal

Author  : kwo
Project : e16
Module  : e

Dir     : e16/e/src


Modified Files:
        E.h areas.c borders.c desktops.c misc.c slideout.c startup.c 


Log Message:
Fix various animation effects.
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/E.h,v
retrieving revision 1.326
retrieving revision 1.327
diff -u -3 -r1.326 -r1.327
--- E.h 7 Sep 2004 19:36:33 -0000       1.326
+++ E.h 11 Sep 2004 10:45:21 -0000      1.327
@@ -2391,6 +2391,8 @@
 char               *EDirUserCache(void);
 void                Quicksort(void **a, int l, int r,
                              int (*CompareFunc) (void *d1, void *d2));
+void                ETimedLoopInit(int k1, int k2, int speed);
+int                 ETimedLoopNext(void);
 void __PRINTF__     Eprintf(const char *fmt, ...);
 
 /* moveresize.c */
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/areas.c,v
retrieving revision 1.73
retrieving revision 1.74
diff -u -3 -r1.73 -r1.74
--- areas.c     13 Aug 2004 20:41:25 -0000      1.73
+++ areas.c     11 Sep 2004 10:45:21 -0000      1.74
@@ -21,7 +21,6 @@
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
 #include "E.h"
-#include <sys/time.h>
 
 static int          area_w = 3;
 static int          area_h = 3;
@@ -186,10 +185,7 @@
 void
 SlideWindowsBy(Window * win, int num, int dx, int dy, int speed)
 {
-   int                 i, k, spd, x, y, min;
-   struct timeval      timev1, timev2;
-   int                 dsec, dusec;
-   double              tm;
+   int                 i, k, x, y;
    struct _xy
    {
       int                 x, y;
@@ -199,16 +195,14 @@
    if (num < 1)
       EDBUG_RETURN_;
 
-   spd = 16;
-   min = 2;
    xy = Emalloc(sizeof(struct _xy) * num);
 
    for (i = 0; i < num; i++)
       GetWinXY(win[i], &(xy[i].x), &(xy[i].y));
 
-   for (k = 0; k <= 1024; k += spd)
+   ETimedLoopInit(0, 1024, speed);
+   for (k = 0; k <= 1024;)
      {
-       gettimeofday(&timev1, NULL);
        for (i = 0; i < num; i++)
          {
             x = ((xy[i].x * (1024 - k)) + ((xy[i].x + dx) * k)) >> 10;
@@ -216,18 +210,8 @@
             EMoveWindow(disp, win[i], x, y);
          }
        XSync(disp, False);
-       gettimeofday(&timev2, NULL);
-       dsec = timev2.tv_sec - timev1.tv_sec;
-       dusec = timev2.tv_usec - timev1.tv_usec;
-       if (dusec < 0)
-         {
-            dsec--;
-            dusec += 1000000;
-         }
-       tm = (double)dsec + (((double)dusec) / 1000000);
-       spd = (int)((double)speed * tm);
-       if (spd < min)
-          spd = min;
+
+       k = ETimedLoopNext();
      }
 
    for (i = 0; i < num; i++)
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/borders.c,v
retrieving revision 1.227
retrieving revision 1.228
diff -u -3 -r1.227 -r1.228
--- borders.c   31 Aug 2004 17:24:39 -0000      1.227
+++ borders.c   11 Sep 2004 10:45:21 -0000      1.228
@@ -184,15 +184,11 @@
 void
 SlideEwinTo(EWin * ewin, int fx, int fy, int tx, int ty, int speed)
 {
-   int                 k, spd, x, y, min, tmpx, tmpy, tmpw, tmph;
-   struct timeval      timev1, timev2;
-   int                 dsec, dusec;
-   double              tm;
+   int                 k, x, y, tmpx, tmpy;
    char                firstlast;
 
    EDBUG(3, "SlideEwinTo");
-   spd = 16;
-   min = 2;
+
    firstlast = 0;
    Mode.doingslide = 1;
    SoundPlay("SOUND_WINDOW_SLIDE");
@@ -200,42 +196,33 @@
    if (Conf.slidemode > 0)
       GrabX();
 
-   for (k = 0; k <= 1024; k += spd)
+   ETimedLoopInit(0, 1024, speed);
+   for (k = 0; k <= 1024;)
      {
-       gettimeofday(&timev1, NULL);
        x = ((fx * (1024 - k)) + (tx * k)) >> 10;
        y = ((fy * (1024 - k)) + (ty * k)) >> 10;
        tmpx = x;
        tmpy = y;
-       tmpw = ewin->client.w;
-       tmph = ewin->client.h;
        if (Conf.slidemode == 0)
           EMoveWindow(disp, ewin->win, tmpx, tmpy);
        else
-          DrawEwinShape(ewin, Conf.slidemode, tmpx, tmpy, tmpw, tmph,
-                        firstlast);
+          DrawEwinShape(ewin, Conf.slidemode, tmpx, tmpy,
+                        ewin->client.w, ewin->client.h, firstlast);
        if (firstlast == 0)
           firstlast = 1;
        XSync(disp, False);
-       gettimeofday(&timev2, NULL);
-       dsec = timev2.tv_sec - timev1.tv_sec;
-       dusec = timev2.tv_usec - timev1.tv_usec;
-       if (dusec < 0)
-         {
-            dsec--;
-            dusec += 1000000;
-         }
-       tm = (double)dsec + (((double)dusec) / 1000000);
-       spd = (int)((double)speed * tm);
-       if (spd < min)
-          spd = min;
+
+       k = ETimedLoopNext();
      }
    DrawEwinShape(ewin, Conf.slidemode, x, y, ewin->client.w, ewin->client.h, 2);
    MoveEwin(ewin, tx, ty);
    Mode.doingslide = 0;
+
    if (Conf.slidemode > 0)
       UngrabX();
+
    SoundPlay("SOUND_WINDOW_SLIDE_END");
+
    EDBUG_RETURN_;
 }
 
@@ -243,11 +230,7 @@
 SlideEwinsTo(EWin ** ewin, int *fx, int *fy, int *tx, int *ty, int num_wins,
             int speed)
 {
-   int                 k, spd, *x = NULL, *y =
-      NULL, min, tmpx, tmpy, tmpw, tmph, i;
-   struct timeval      timev1, timev2;
-   int                 dsec, dusec;
-   double              tm;
+   int                 k, *x = NULL, *y = NULL, tmpx, tmpy, tmpw, tmph, i;
    char                firstlast;
 
    EDBUG(3, "SlideEwinsTo");
@@ -257,48 +240,38 @@
        x = Emalloc(sizeof(int) * num_wins);
        y = Emalloc(sizeof(int) * num_wins);
      }
-   spd = 16;
-   min = 2;
+
    firstlast = 0;
    Mode.doingslide = 1;
    SoundPlay("SOUND_WINDOW_SLIDE");
+
    if (Conf.slidemode > 0)
       GrabX();
-   for (k = 0; k <= 1024; k += spd)
+
+   ETimedLoopInit(0, 1024, speed);
+   for (k = 0; k <= 1024;)
      {
        for (i = 0; i < num_wins; i++)
          {
-            if (ewin[i])
-              {
-                 gettimeofday(&timev1, NULL);
-                 x[i] = ((fx[i] * (1024 - k)) + (tx[i] * k)) >> 10;
-                 y[i] = ((fy[i] * (1024 - k)) + (ty[i] * k)) >> 10;
-                 tmpx = x[i];
-                 tmpy = y[i];
-                 tmpw = ewin[i]->client.w;
-                 tmph = ewin[i]->client.h;
-                 if (ewin[i]->menu)
-                    EMoveWindow(disp, ewin[i]->win, tmpx, tmpy);
-                 else
-                    DrawEwinShape(ewin[i], 0, tmpx, tmpy, tmpw, tmph,
-                                  firstlast);
-                 if (firstlast == 0)
-                    firstlast = 1;
-                 XSync(disp, False);
-                 gettimeofday(&timev2, NULL);
-                 dsec = timev2.tv_sec - timev1.tv_sec;
-                 dusec = timev2.tv_usec - timev1.tv_usec;
-                 if (dusec < 0)
-                   {
-                      dsec--;
-                      dusec += 1000000;
-                   }
-                 tm = (double)dsec + (((double)dusec) / 1000000);
-                 spd = (int)((double)speed * tm);
-                 if (spd < min)
-                    spd = min;
-              }
+            if (!ewin[i])
+               continue;
+
+            x[i] = ((fx[i] * (1024 - k)) + (tx[i] * k)) >> 10;
+            y[i] = ((fy[i] * (1024 - k)) + (ty[i] * k)) >> 10;
+            tmpx = x[i];
+            tmpy = y[i];
+            tmpw = ewin[i]->client.w;
+            tmph = ewin[i]->client.h;
+            if (ewin[i]->menu)
+               EMoveWindow(disp, ewin[i]->win, tmpx, tmpy);
+            else
+               DrawEwinShape(ewin[i], 0, tmpx, tmpy, tmpw, tmph, firstlast);
+            if (firstlast == 0)
+               firstlast = 1;
+            XSync(disp, False);
          }
+       /* We may loop faster here than originally intended */
+       k = ETimedLoopNext();
      }
 
    for (i = 0; i < num_wins; i++)
@@ -314,11 +287,14 @@
    Mode.doingslide = 0;
    if (Conf.slidemode > 0)
       UngrabX();
+
    SoundPlay("SOUND_WINDOW_SLIDE_END");
+
    if (x)
       Efree(x);
    if (y)
       Efree(y);
+
    EDBUG_RETURN_;
 }
 
@@ -2694,11 +2670,7 @@
 EwinShade(EWin * ewin)
 {
    XSetWindowAttributes att;
-   int                 i, j, speed, a, b, c, d, ww, hh;
-   int                 k, spd, min;
-   struct timeval      timev1, timev2;
-   int                 dsec, dusec;
-   double              tm;
+   int                 i, j, k, speed, a, b, c, d, ww, hh;
    char                pq;
 
    EDBUG(4, "EwinShade");
@@ -2717,8 +2689,6 @@
    Mode.queue_up = 0;
 
    speed = Conf.shadespeed;
-   spd = 32;
-   min = 2;
 
    GrabX();
 
@@ -2730,43 +2700,35 @@
        MinShadeSize(ewin, &b, &d);
        a = ewin->w;
        if ((Conf.animate_shading) || (ewin->menu))
-          for (k = 0; k <= 1024; k += spd)
-            {
-               gettimeofday(&timev1, NULL);
-               i = ((a * (1024 - k)) + (b * k)) >> 10;
-               ewin->w = i;
-               if (ewin->w < 1)
-                  ewin->w = 1;
-               ww = ewin->w - ewin->border->border.left -
-                  ewin->border->border.right;
-               if (ww < 1)
-                  ww = 1;
-               hh = ewin->client.h;
-               EMoveResizeWindow(disp, ewin->win_container,
-                                 ewin->border->border.left,
-                                 ewin->border->border.top, ww, hh);
-               EMoveResizeWindow(disp, ewin->win, ewin->x, ewin->y, ewin->w,
-                                 ewin->h);
-               CalcEwinSizes(ewin);
-               if (ewin->client.shaped)
-                  EShapeCombineShape(disp, ewin->win_container,
-                                     ShapeBounding, -(ewin->client.w - ww),
-                                     0, ewin->client.win, ShapeBounding,
-                                     ShapeSet);
-               EwinPropagateShapes(ewin);
-               gettimeofday(&timev2, NULL);
-               dsec = timev2.tv_sec - timev1.tv_sec;
-               dusec = timev2.tv_usec - timev1.tv_usec;
-               if (dusec < 0)
-                 {
-                    dsec--;
-                    dusec += 1000000;
-                 }
-               tm = (double)dsec + (((double)dusec) / 1000000);
-               spd = (int)((double)speed * tm);
-               if (spd < min)
-                  spd = min;
-            }
+         {
+            ETimedLoopInit(0, 1024, speed);
+            for (k = 0; k <= 1024;)
+              {
+                 i = ((a * (1024 - k)) + (b * k)) >> 10;
+                 ewin->w = i;
+                 if (ewin->w < 1)
+                    ewin->w = 1;
+                 ww = ewin->w - ewin->border->border.left -
+                    ewin->border->border.right;
+                 if (ww < 1)
+                    ww = 1;
+                 hh = ewin->client.h;
+                 EMoveResizeWindow(disp, ewin->win_container,
+                                   ewin->border->border.left,
+                                   ewin->border->border.top, ww, hh);
+                 EMoveResizeWindow(disp, ewin->win, ewin->x, ewin->y, ewin->w,
+                                   ewin->h);
+                 CalcEwinSizes(ewin);
+                 if (ewin->client.shaped)
+                    EShapeCombineShape(disp, ewin->win_container,
+                                       ShapeBounding, -(ewin->client.w - ww),
+                                       0, ewin->client.win, ShapeBounding,
+                                       ShapeSet);
+                 EwinPropagateShapes(ewin);
+
+                 k = ETimedLoopNext();
+              }
+         }
        ewin->shaded = 2;
        ewin->w = b;
        EMoveResizeWindow(disp, ewin->win_container, -30, -30, 1, 1);
@@ -2782,44 +2744,36 @@
        c = ewin->x;
        d = ewin->x + ewin->w - b;
        if ((Conf.animate_shading) || (ewin->menu))
-          for (k = 0; k <= 1024; k += spd)
-            {
-               gettimeofday(&timev1, NULL);
-               i = ((a * (1024 - k)) + (b * k)) >> 10;
-               j = ((c * (1024 - k)) + (d * k)) >> 10;
-               ewin->w = i;
-               ewin->x = j;
-               if (ewin->w < 1)
-                  ewin->w = 1;
-               ww = ewin->w - ewin->border->border.left -
-                  ewin->border->border.right;
-               if (ww < 1)
-                  ww = 1;
-               hh = ewin->client.h;
-               EMoveResizeWindow(disp, ewin->win_container,
-                                 ewin->border->border.left,
-                                 ewin->border->border.top, ww, hh);
-               EMoveResizeWindow(disp, ewin->win, ewin->x, ewin->y, ewin->w,
-                                 ewin->h);
-               CalcEwinSizes(ewin);
-               if (ewin->client.shaped)
-                  EShapeCombineShape(disp, ewin->win_container,
-                                     ShapeBounding, 0, 0, ewin->client.win,
-                                     ShapeBounding, ShapeSet);
-               EwinPropagateShapes(ewin);
-               gettimeofday(&timev2, NULL);
-               dsec = timev2.tv_sec - timev1.tv_sec;
-               dusec = timev2.tv_usec - timev1.tv_usec;
-               if (dusec < 0)
-                 {
-                    dsec--;
-                    dusec += 1000000;
-                 }
-               tm = (double)dsec + (((double)dusec) / 1000000);
-               spd = (int)((double)speed * tm);
-               if (spd < min)
-                  spd = min;
-            }
+         {
+            ETimedLoopInit(0, 1024, speed);
+            for (k = 0; k <= 1024;)
+              {
+                 i = ((a * (1024 - k)) + (b * k)) >> 10;
+                 j = ((c * (1024 - k)) + (d * k)) >> 10;
+                 ewin->w = i;
+                 ewin->x = j;
+                 if (ewin->w < 1)
+                    ewin->w = 1;
+                 ww = ewin->w - ewin->border->border.left -
+                    ewin->border->border.right;
+                 if (ww < 1)
+                    ww = 1;
+                 hh = ewin->client.h;
+                 EMoveResizeWindow(disp, ewin->win_container,
+                                   ewin->border->border.left,
+                                   ewin->border->border.top, ww, hh);
+                 EMoveResizeWindow(disp, ewin->win, ewin->x, ewin->y, ewin->w,
+                                   ewin->h);
+                 CalcEwinSizes(ewin);
+                 if (ewin->client.shaped)
+                    EShapeCombineShape(disp, ewin->win_container,
+                                       ShapeBounding, 0, 0, ewin->client.win,
+                                       ShapeBounding, ShapeSet);
+                 EwinPropagateShapes(ewin);
+
+                 k = ETimedLoopNext();
+              }
+         }
        ewin->shaded = 2;
        ewin->w = b;
        ewin->x = d;
@@ -2835,44 +2789,36 @@
        MinShadeSize(ewin, &b, &d);
        b = d;
        if ((Conf.animate_shading) || (ewin->menu))
-          for (k = 0; k <= 1024; k += spd)
-            {
-               gettimeofday(&timev1, NULL);
-               i = ((a * (1024 - k)) + (b * k)) >> 10;
-               ewin->h = i;
-               if (ewin->h < 1)
-                  ewin->h = 1;
-               hh = ewin->h - ewin->border->border.top -
-                  ewin->border->border.bottom;
-               if (hh < 1)
-                  hh = 1;
-               ww = ewin->client.w;
-               EMoveResizeWindow(disp, ewin->win_container,
-                                 ewin->border->border.left,
-                                 ewin->border->border.top, ww, hh);
-               EMoveResizeWindow(disp, ewin->win, ewin->x, ewin->y, ewin->w,
-                                 ewin->h);
-               CalcEwinSizes(ewin);
-               if (ewin->client.shaped)
-                  EShapeCombineShape(disp, ewin->win_container,
-                                     ShapeBounding, 0,
-                                     -(ewin->client.h - hh),
-                                     ewin->client.win, ShapeBounding,
-                                     ShapeSet);
-               EwinPropagateShapes(ewin);
-               gettimeofday(&timev2, NULL);
-               dsec = timev2.tv_sec - timev1.tv_sec;
-               dusec = timev2.tv_usec - timev1.tv_usec;
-               if (dusec < 0)
-                 {
-                    dsec--;
-                    dusec += 1000000;
-                 }
-               tm = (double)dsec + (((double)dusec) / 1000000);
-               spd = (int)((double)speed * tm);
-               if (spd < min)
-                  spd = min;
-            }
+         {
+            ETimedLoopInit(0, 1024, speed);
+            for (k = 0; k <= 1024;)
+              {
+                 i = ((a * (1024 - k)) + (b * k)) >> 10;
+                 ewin->h = i;
+                 if (ewin->h < 1)
+                    ewin->h = 1;
+                 hh = ewin->h - ewin->border->border.top -
+                    ewin->border->border.bottom;
+                 if (hh < 1)
+                    hh = 1;
+                 ww = ewin->client.w;
+                 EMoveResizeWindow(disp, ewin->win_container,
+                                   ewin->border->border.left,
+                                   ewin->border->border.top, ww, hh);
+                 EMoveResizeWindow(disp, ewin->win, ewin->x, ewin->y, ewin->w,
+                                   ewin->h);
+                 CalcEwinSizes(ewin);
+                 if (ewin->client.shaped)
+                    EShapeCombineShape(disp, ewin->win_container,
+                                       ShapeBounding, 0,
+                                       -(ewin->client.h - hh),
+                                       ewin->client.win, ShapeBounding,
+                                       ShapeSet);
+                 EwinPropagateShapes(ewin);
+
+                 k = ETimedLoopNext();
+              }
+         }
        ewin->shaded = 2;
        ewin->h = b;
        EMoveResizeWindow(disp, ewin->win_container, -30, -30, 1, 1);
@@ -2889,44 +2835,35 @@
        c = ewin->y;
        d = ewin->y + ewin->h - b;
        if ((Conf.animate_shading) || (ewin->menu))
-          for (k = 0; k <= 1024; k += spd)
-            {
-               gettimeofday(&timev1, NULL);
-               i = ((a * (1024 - k)) + (b * k)) >> 10;
-               j = ((c * (1024 - k)) + (d * k)) >> 10;
-               ewin->h = i;
-               ewin->y = j;
-               if (ewin->h < 1)
-                  ewin->h = 1;
-               hh = ewin->h - ewin->border->border.top -
-                  ewin->border->border.bottom;
-               if (hh < 1)
-                  hh = 1;
-               ww = ewin->client.w;
-               EMoveResizeWindow(disp, ewin->win_container,
-                                 ewin->border->border.left,
-                                 ewin->border->border.top, ww, hh);
-               EMoveResizeWindow(disp, ewin->win, ewin->x, ewin->y, ewin->w,
-                                 ewin->h);
-               CalcEwinSizes(ewin);
-               if (ewin->client.shaped)
-                  EShapeCombineShape(disp, ewin->win_container,
-                                     ShapeBounding, 0, 0, ewin->client.win,
-                                     ShapeBounding, ShapeSet);
-               EwinPropagateShapes(ewin);
-               gettimeofday(&timev2, NULL);
-               dsec = timev2.tv_sec - timev1.tv_sec;
-               dusec = timev2.tv_usec - timev1.tv_usec;
-               if (dusec < 0)
-                 {
-                    dsec--;
-                    dusec += 1000000;
-                 }
-               tm = (double)dsec + (((double)dusec) / 1000000);
-               spd = (int)((double)speed * tm);
-               if (spd < min)
-                  spd = min;
-            }
+         {
+            ETimedLoopInit(0, 1024, speed);
+            for (k = 0; k <= 1024;)
+              {
+                 i = ((a * (1024 - k)) + (b * k)) >> 10;
+                 j = ((c * (1024 - k)) + (d * k)) >> 10;
+                 ewin->h = i;
+                 ewin->y = j;
+                 if (ewin->h < 1)
+                    ewin->h = 1;
+                 hh = ewin->h - ewin->border->border.top -
+                    ewin->border->border.bottom;
+                 if (hh < 1)
+                    hh = 1;
+                 ww = ewin->client.w;
+                 EMoveResizeWindow(disp, ewin->win_container,
+                                   ewin->border->border.left,
+                                   ewin->border->border.top, ww, hh);
+                 EMoveResizeWindow(disp, ewin->win, ewin->x, ewin->y, ewin->w,
+                                   ewin->h);
+                 CalcEwinSizes(ewin);
+                 if (ewin->client.shaped)
+                    EShapeCombineShape(disp, ewin->win_container,
+                                       ShapeBounding, 0, 0, ewin->client.win,
+                                       ShapeBounding, ShapeSet);
+                 EwinPropagateShapes(ewin);
+                 k = ETimedLoopNext();
+              }
+         }
        ewin->shaded = 2;
        ewin->h = b;
        ewin->y = d;
@@ -2963,14 +2900,11 @@
 EwinUnShade(EWin * ewin)
 {
    XSetWindowAttributes att;
-   int                 i, j, speed, a, b, c, d;
-   int                 k, spd, min;
-   struct timeval      timev1, timev2;
-   int                 dsec, dusec;
-   double              tm;
+   int                 i, j, k, speed, a, b, c, d;
    char                pq;
 
    EDBUG(4, "EwinUnShade");
+
    if (GetZoomEWin() == ewin)
       EDBUG_RETURN_;
    if (!ewin->shaded || ewin->iconified)
@@ -2980,8 +2914,6 @@
    Mode.queue_up = 0;
 
    speed = Conf.shadespeed;
-   spd = 32;
-   min = 2;
 
    GrabX();
 
@@ -3002,41 +2934,33 @@
        EMapWindow(disp, ewin->client.win);
        EMapWindow(disp, ewin->win_container);
        if ((Conf.animate_shading) || (ewin->menu))
-          for (k = 0; k <= 1024; k += spd)
-            {
-               gettimeofday(&timev1, NULL);
-               i = ((a * (1024 - k)) + (b * k)) >> 10;
-               ewin->w = i;
-               EMoveResizeWindow(disp, ewin->win_container,
-                                 ewin->border->border.left,
-                                 ewin->border->border.top,
-                                 ewin->w - ewin->border->border.left -
-                                 ewin->border->border.right, ewin->client.h);
-               EMoveResizeWindow(disp, ewin->win, ewin->x, ewin->y, ewin->w,
-                                 ewin->h);
-               CalcEwinSizes(ewin);
-               if (ewin->client.shaped)
-                  EShapeCombineShape(disp, ewin->win_container,
-                                     ShapeBounding,
-                                     -(ewin->client.w -
-                                       (ewin->w - ewin->border->border.left -
-                                        ewin->border->border.right)), 0,
-                                     ewin->client.win, ShapeBounding,
-                                     ShapeSet);
-               EwinPropagateShapes(ewin);
-               gettimeofday(&timev2, NULL);
-               dsec = timev2.tv_sec - timev1.tv_sec;
-               dusec = timev2.tv_usec - timev1.tv_usec;
-               if (dusec < 0)
-                 {
-                    dsec--;
-                    dusec += 1000000;
-                 }
-               tm = (double)dsec + (((double)dusec) / 1000000);
-               spd = (int)((double)speed * tm);
-               if (spd < min)
-                  spd = min;
-            }
+         {
+            ETimedLoopInit(0, 1024, speed);
+            for (k = 0; k <= 1024;)
+              {
+                 i = ((a * (1024 - k)) + (b * k)) >> 10;
+                 ewin->w = i;
+                 EMoveResizeWindow(disp, ewin->win_container,
+                                   ewin->border->border.left,
+                                   ewin->border->border.top,
+                                   ewin->w - ewin->border->border.left -
+                                   ewin->border->border.right, ewin->client.h);
+                 EMoveResizeWindow(disp, ewin->win, ewin->x, ewin->y, ewin->w,
+                                   ewin->h);
+                 CalcEwinSizes(ewin);
+                 if (ewin->client.shaped)
+                    EShapeCombineShape(disp, ewin->win_container,
+                                       ShapeBounding,
+                                       -(ewin->client.w -
+                                         (ewin->w - ewin->border->border.left -
+                                          ewin->border->border.right)), 0,
+                                       ewin->client.win, ShapeBounding,
+                                       ShapeSet);
+                 EwinPropagateShapes(ewin);
+
+                 k = ETimedLoopNext();
+              }
+         }
        ewin->w = b;
        MoveResizeEwin(ewin, ewin->x, ewin->y, ewin->client.w, ewin->client.h);
        XSync(disp, False);
@@ -3059,39 +2983,31 @@
        EMapWindow(disp, ewin->client.win);
        EMapWindow(disp, ewin->win_container);
        if ((Conf.animate_shading) || (ewin->menu))
-          for (k = 0; k <= 1024; k += spd)
-            {
-               gettimeofday(&timev1, NULL);
-               i = ((a * (1024 - k)) + (b * k)) >> 10;
-               j = ((c * (1024 - k)) + (d * k)) >> 10;
-               ewin->w = i;
-               ewin->x = j;
-               EMoveResizeWindow(disp, ewin->win_container,
-                                 ewin->border->border.left,
-                                 ewin->border->border.top,
-                                 ewin->w - ewin->border->border.left -
-                                 ewin->border->border.right, ewin->client.h);
-               EMoveResizeWindow(disp, ewin->win, ewin->x, ewin->y, ewin->w,
-                                 ewin->h);
-               CalcEwinSizes(ewin);
-               if (ewin->client.shaped)
-                  EShapeCombineShape(disp, ewin->win_container,
-                                     ShapeBounding, 0, 0, ewin->client.win,
-                                     ShapeBounding, ShapeSet);
-               EwinPropagateShapes(ewin);
-               gettimeofday(&timev2, NULL);
-               dsec = timev2.tv_sec - timev1.tv_sec;
-               dusec = timev2.tv_usec - timev1.tv_usec;
-               if (dusec < 0)
-                 {
-                    dsec--;
-                    dusec += 1000000;
-                 }
-               tm = (double)dsec + (((double)dusec) / 1000000);
-               spd = (int)((double)speed * tm);
-               if (spd < min)
-                  spd = min;
-            }
+         {
+            ETimedLoopInit(0, 1024, speed);
+            for (k = 0; k <= 1024;)
+              {
+                 i = ((a * (1024 - k)) + (b * k)) >> 10;
+                 j = ((c * (1024 - k)) + (d * k)) >> 10;
+                 ewin->w = i;
+                 ewin->x = j;
+                 EMoveResizeWindow(disp, ewin->win_container,
+                                   ewin->border->border.left,
+                                   ewin->border->border.top,
+                                   ewin->w - ewin->border->border.left -
+                                   ewin->border->border.right, ewin->client.h);
+                 EMoveResizeWindow(disp, ewin->win, ewin->x, ewin->y, ewin->w,
+                                   ewin->h);
+                 CalcEwinSizes(ewin);
+                 if (ewin->client.shaped)
+                    EShapeCombineShape(disp, ewin->win_container,
+                                       ShapeBounding, 0, 0, ewin->client.win,
+                                       ShapeBounding, ShapeSet);
+                 EwinPropagateShapes(ewin);
+
+                 k = ETimedLoopNext();
+              }
+         }
        ewin->w = b;
        ewin->x = d;
        MoveResizeEwin(ewin, ewin->x, ewin->y, ewin->client.w, ewin->client.h);
@@ -3112,41 +3028,33 @@
        EMapWindow(disp, ewin->client.win);
        EMapWindow(disp, ewin->win_container);
        if ((Conf.animate_shading) || (ewin->menu))
-          for (k = 0; k <= 1024; k += spd)
-            {
-               gettimeofday(&timev1, NULL);
-               i = ((a * (1024 - k)) + (b * k)) >> 10;
-               ewin->h = i;
-               EMoveResizeWindow(disp, ewin->win_container,
-                                 ewin->border->border.left,
-                                 ewin->border->border.top, ewin->client.w,
-                                 ewin->h - ewin->border->border.top -
-                                 ewin->border->border.bottom);
-               EMoveResizeWindow(disp, ewin->win, ewin->x, ewin->y, ewin->w,
-                                 ewin->h);
-               CalcEwinSizes(ewin);
-               if (ewin->client.shaped)
-                  EShapeCombineShape(disp, ewin->win_container,
-                                     ShapeBounding, 0,
-                                     -(ewin->client.h -
-                                       (ewin->h - ewin->border->border.top -
-                                        ewin->border->border.bottom)),
-                                     ewin->client.win, ShapeBounding,
-                                     ShapeSet);
-               EwinPropagateShapes(ewin);
-               gettimeofday(&timev2, NULL);
-               dsec = timev2.tv_sec - timev1.tv_sec;
-               dusec = timev2.tv_usec - timev1.tv_usec;
-               if (dusec < 0)
-                 {
-                    dsec--;
-                    dusec += 1000000;
-                 }
-               tm = (double)dsec + (((double)dusec) / 1000000);
-               spd = (int)((double)speed * tm);
-               if (spd < min)
-                  spd = min;
-            }
+         {
+            ETimedLoopInit(0, 1024, speed);
+            for (k = 0; k <= 1024;)
+              {
+                 i = ((a * (1024 - k)) + (b * k)) >> 10;
+                 ewin->h = i;
+                 EMoveResizeWindow(disp, ewin->win_container,
+                                   ewin->border->border.left,
+                                   ewin->border->border.top, ewin->client.w,
+                                   ewin->h - ewin->border->border.top -
+                                   ewin->border->border.bottom);
+                 EMoveResizeWindow(disp, ewin->win, ewin->x, ewin->y, ewin->w,
+                                   ewin->h);
+                 CalcEwinSizes(ewin);
+                 if (ewin->client.shaped)
+                    EShapeCombineShape(disp, ewin->win_container,
+                                       ShapeBounding, 0,
+                                       -(ewin->client.h -
+                                         (ewin->h - ewin->border->border.top -
+                                          ewin->border->border.bottom)),
+                                       ewin->client.win, ShapeBounding,
+                                       ShapeSet);
+                 EwinPropagateShapes(ewin);
+
+                 k = ETimedLoopNext();
+              }
+         }
        ewin->h = b;
        MoveResizeEwin(ewin, ewin->x, ewin->y, ewin->client.w, ewin->client.h);
        XSync(disp, False);
@@ -3169,39 +3077,31 @@
        EMapWindow(disp, ewin->client.win);
        EMapWindow(disp, ewin->win_container);
        if ((Conf.animate_shading) || (ewin->menu))
-          for (k = 0; k <= 1024; k += spd)
-            {
-               gettimeofday(&timev1, NULL);
-               i = ((a * (1024 - k)) + (b * k)) >> 10;
-               j = ((c * (1024 - k)) + (d * k)) >> 10;
-               ewin->h = i;
-               ewin->y = j;
-               EMoveResizeWindow(disp, ewin->win_container,
-                                 ewin->border->border.left,
-                                 ewin->border->border.top, ewin->client.w,
-                                 ewin->h - ewin->border->border.top -
-                                 ewin->border->border.bottom);
-               EMoveResizeWindow(disp, ewin->win, ewin->x, ewin->y, ewin->w,
-                                 ewin->h);
-               CalcEwinSizes(ewin);
-               if (ewin->client.shaped)
-                  EShapeCombineShape(disp, ewin->win_container,
-                                     ShapeBounding, 0, 0, ewin->client.win,
-                                     ShapeBounding, ShapeSet);
-               EwinPropagateShapes(ewin);
-               gettimeofday(&timev2, NULL);
-               dsec = timev2.tv_sec - timev1.tv_sec;
-               dusec = timev2.tv_usec - timev1.tv_usec;
-               if (dusec < 0)
-                 {
-                    dsec--;
-                    dusec += 1000000;
-                 }
-               tm = (double)dsec + (((double)dusec) / 1000000);
-               spd = (int)((double)speed * tm);
-               if (spd < min)
-                  spd = min;
-            }
+         {
+            ETimedLoopInit(0, 1024, speed);
+            for (k = 0; k <= 1024;)
+              {
+                 i = ((a * (1024 - k)) + (b * k)) >> 10;
+                 j = ((c * (1024 - k)) + (d * k)) >> 10;
+                 ewin->h = i;
+                 ewin->y = j;
+                 EMoveResizeWindow(disp, ewin->win_container,
+                                   ewin->border->border.left,
+                                   ewin->border->border.top, ewin->client.w,
+                                   ewin->h - ewin->border->border.top -
+                                   ewin->border->border.bottom);
+                 EMoveResizeWindow(disp, ewin->win, ewin->x, ewin->y, ewin->w,
+                                   ewin->h);
+                 CalcEwinSizes(ewin);
+                 if (ewin->client.shaped)
+                    EShapeCombineShape(disp, ewin->win_container,
+                                       ShapeBounding, 0, 0, ewin->client.win,
+                                       ShapeBounding, ShapeSet);
+                 EwinPropagateShapes(ewin);
+
+                 k = ETimedLoopNext();
+              }
+         }
        ewin->h = b;
        ewin->y = d;
        MoveResizeEwin(ewin, ewin->x, ewin->y, ewin->client.w, ewin->client.h);
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/desktops.c,v
retrieving revision 1.100
retrieving revision 1.101
diff -u -3 -r1.100 -r1.101
--- desktops.c  13 Aug 2004 20:54:53 -0000      1.100
+++ desktops.c  11 Sep 2004 10:45:21 -0000      1.101
@@ -23,7 +23,6 @@
 #define DECLARE_STRUCT_BUTTON
 #include "E.h"
 #include <time.h>
-#include <sys/time.h>
 
 #define EDESK_EVENT_MASK \
   (KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask | \
@@ -188,37 +187,25 @@
 void
 SlideWindowTo(Window win, int fx, int fy, int tx, int ty, int speed)
 {
-   int                 k, spd, x, y, min;
-   struct timeval      timev1, timev2;
-   int                 dsec, dusec;
-   double              tm;
+   int                 k, x, y;
 
    EDBUG(5, "SlideWindowTo");
-   spd = 16;
-   min = 2;
+
    GrabX();
-   for (k = 0; k <= 1024; k += spd)
+
+   ETimedLoopInit(0, 1024, speed);
+   for (k = 0; k <= 1024;)
      {
-       gettimeofday(&timev1, NULL);
        x = ((fx * (1024 - k)) + (tx * k)) >> 10;
        y = ((fy * (1024 - k)) + (ty * k)) >> 10;
        EMoveWindow(disp, win, x, y);
        XSync(disp, False);
-       gettimeofday(&timev2, NULL);
-       dsec = timev2.tv_sec - timev1.tv_sec;
-       dusec = timev2.tv_usec - timev1.tv_usec;
-       if (dusec < 0)
-         {
-            dsec--;
-            dusec += 1000000;
-         }
-       tm = (double)dsec + (((double)dusec) / 1000000);
-       spd = (int)((double)speed * tm);
-       if (spd < min)
-          spd = min;
+
+       k = ETimedLoopNext();
      }
    EMoveWindow(disp, win, tx, ty);
    UngrabX();
+
    EDBUG_RETURN_;
 }
 
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/misc.c,v
retrieving revision 1.58
retrieving revision 1.59
diff -u -3 -r1.58 -r1.59
--- misc.c      2 Jun 2004 22:44:33 -0000       1.58
+++ misc.c      11 Sep 2004 10:45:21 -0000      1.59
@@ -21,6 +21,7 @@
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
 #include "E.h"
+#include <sys/time.h>
 
 static char        *userDir = NULL;
 static char        *cacheDir = NULL;
@@ -180,6 +181,61 @@
      }
 }
 
+/*
+ * Stuff to make loops for animated effects.
+ */
+struct timeval      etl_tv_last;
+static int          etl_speed;
+static int          etl_k1, etl_k2, etl_ki;
+static double       etl_k;
+
+void
+ETimedLoopInit(int k1, int k2, int speed)
+{
+   etl_k1 = k1;
+   etl_k2 = k2;
+   etl_speed = speed;
+
+   etl_k = 1.0 * etl_k1;
+   gettimeofday(&etl_tv_last, NULL);
+}
+
+int
+ETimedLoopNext(void)
+{
+   struct timeval      tv;
+   int                 dsec, dusec;
+   double              spd, tm;
+
+   etl_ki++;                   /* Increment iteration count */
+
+   /* Find elapsed time since loop start */
+   gettimeofday(&tv, NULL);
+   dsec = tv.tv_sec - etl_tv_last.tv_sec;
+   dusec = tv.tv_usec - etl_tv_last.tv_usec;
+   etl_tv_last.tv_sec = tv.tv_sec;
+   etl_tv_last.tv_usec = tv.tv_usec;
+   if (dusec < 0)
+     {
+       dsec--;
+       dusec += 1000000;
+     }
+   tm = (double)dsec + (((double)dusec) / 1000000);
+
+   spd = ((double)etl_speed * tm);
+   if (spd < 0.001)            /* More or less arbitrary limit */
+      spd = 0.001;
+#if 0
+   Eprintf("SlideEwinTo k=%4f tm=%.3f spd=%f\n", etl_k, 1e3 * tm, spd);
+#endif
+   etl_k += spd;
+
+   return (int)etl_k;
+}
+
+/*
+ * Debug/error message printing.
+ */
 void
 Eprintf(const char *fmt, ...)
 {
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/slideout.c,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -3 -r1.22 -r1.23
--- slideout.c  7 Jun 2004 16:46:08 -0000       1.22
+++ slideout.c  11 Sep 2004 10:45:21 -0000      1.23
@@ -22,7 +22,6 @@
  */
 #define DECLARE_STRUCT_BUTTON
 #include "E.h"
-#include <sys/time.h>
 
 struct _slideout
 {
@@ -42,39 +41,27 @@
 SlideWindowSizeTo(Window win, int fx, int fy, int tx, int ty, int fw, int fh,
                  int tw, int th, int speed)
 {
-   int                 k, spd, x, y, min, w, h;
-   struct timeval      timev1, timev2;
-   int                 dsec, dusec;
-   double              tm;
+   int                 k, x, y, w, h;
 
    EDBUG(5, "SlideWindowTo");
-   spd = 16;
-   min = 2;
+
    GrabX();
-   for (k = 0; k <= 1024; k += spd)
+
+   ETimedLoopInit(0, 1024, speed);
+   for (k = 0; k <= 1024;)
      {
-       gettimeofday(&timev1, NULL);
        x = ((fx * (1024 - k)) + (tx * k)) >> 10;
        y = ((fy * (1024 - k)) + (ty * k)) >> 10;
        w = ((fw * (1024 - k)) + (tw * k)) >> 10;
        h = ((fh * (1024 - k)) + (th * k)) >> 10;
        EMoveResizeWindow(disp, win, x, y, w, h);
        XSync(disp, False);
-       gettimeofday(&timev2, NULL);
-       dsec = timev2.tv_sec - timev1.tv_sec;
-       dusec = timev2.tv_usec - timev1.tv_usec;
-       if (dusec < 0)
-         {
-            dsec--;
-            dusec += 1000000;
-         }
-       tm = (double)dsec + (((double)dusec) / 1000000);
-       spd = (int)((double)speed * tm);
-       if (spd < min)
-          spd = min;
+
+       k = ETimedLoopNext();
      }
    EMoveResizeWindow(disp, win, tx, ty, tw, th);
    UngrabX();
+
    EDBUG_RETURN_;
 }
 
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/startup.c,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -3 -r1.44 -r1.45
--- startup.c   3 Jun 2004 18:04:46 -0000       1.44
+++ startup.c   11 Sep 2004 10:45:21 -0000      1.45
@@ -21,7 +21,6 @@
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
 #include "E.h"
-#include <sys/time.h>
 #include <time.h>
 
 static int
@@ -234,23 +233,15 @@
      }
    else
      {
-       int                 k, spd, x, y, xOffset, yOffset, ty, fy;
-       int                 min, speed;
-
-       /* we have this many so that we save on lines o code - eAndroid */
-       struct timeval      timev1, timev2;
-       int                 dsec, dusec;
-       double              tm;
+       int                 k, x, y, xOffset, yOffset, ty, fy;
 
        if ((!ic) || (!bg))
           EDBUG_RETURN_;
 
-       speed = Conf.slidespeedcleanup / 2;
-       spd = 16;
-       min = 2;
        fy = 0;
 
-       for (k = 0; k <= 1024; k += spd)
+       ETimedLoopInit(0, 1024, Conf.slidespeedcleanup / 2);
+       for (k = 0; k <= 1024;)
          {
             if (bg_sideways)
               {                /* so we can have two different slide methods */
@@ -268,22 +259,12 @@
                  yOffset = ((fy * (1024 - k)) + (ty * k)) >> 10;
                  y = ty;
               }
-            gettimeofday(&timev1, NULL);
+
             EMoveWindow(disp, w1, x + xOffset, -y - yOffset);
             EMoveWindow(disp, w2, -x - xOffset, y + yOffset);
             XSync(disp, False);
-            gettimeofday(&timev2, NULL);
-            dsec = timev2.tv_sec - timev1.tv_sec;
-            dusec = timev2.tv_usec - timev1.tv_usec;
-            if (dusec < 0)
-              {
-                 dsec--;
-                 dusec += 1000000;
-              }
-            tm = (double)dsec + (((double)dusec) / 1000000);
-            spd = (int)((double)speed * tm);
-            if (spd < min)
-               spd = min;
+
+            k = ETimedLoopNext();
          }
 
        EDestroyWindow(disp, w1);




-------------------------------------------------------
This SF.Net email is sponsored by: YOU BE THE JUDGE. Be one of 170
Project Admins to receive an Apple iPod Mini FREE for your judgement on
who ports your project to Linux PPC the best. Sponsored by IBM. 
Deadline: Sept. 13. Go here: http://sf.net/ppc_contest.php
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to