Enlightenment CVS committal

Author  : kwo
Project : e16
Module  : e

Dir     : e16/e/src


Modified Files:
        E.h ecompmgr.c magwin.c 


Log Message:
Magnifier tweaks.

===================================================================
RCS file: /cvs/e/e16/e/src/E.h,v
retrieving revision 1.581
retrieving revision 1.582
diff -u -3 -r1.581 -r1.582
--- E.h 7 Apr 2007 13:19:30 -0000       1.581
+++ E.h 19 Apr 2007 22:25:25 -0000      1.582
@@ -473,6 +473,9 @@
       unsigned int        last_keycode;
       char                double_click;
       char                on_screen;
+#if USE_COMPOSITE
+      unsigned int        damage_count;
+#endif
    } events;
    struct
    {
===================================================================
RCS file: /cvs/e/e16/e/src/ecompmgr.c,v
retrieving revision 1.144
retrieving revision 1.145
diff -u -3 -r1.144 -r1.145
--- ecompmgr.c  8 Apr 2007 19:30:47 -0000       1.144
+++ ecompmgr.c  19 Apr 2007 22:25:25 -0000      1.145
@@ -687,6 +687,8 @@
    if (cw->clip != None && eo->type != EOBJ_TYPE_DESK)
       ERegionSubtract(damage, cw->clip);
 #endif
+   if (!eo->ghost)
+      Mode.events.damage_count++;
 
    ECompMgrDamageMerge(damage, 1);
 }
===================================================================
RCS file: /cvs/e/e16/e/src/magwin.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- magwin.c    7 Apr 2007 13:19:30 -0000       1.1
+++ magwin.c    19 Apr 2007 22:25:25 -0000      1.2
@@ -39,6 +39,9 @@
 #include <stdlib.h>
 #include <X11/keysym.h>
 
+#define USE_TIMER    0
+#define USE_ANIMATOR 1
+
 /* Magnifier window */
 typedef struct
 {
@@ -46,11 +49,14 @@
    EImage             *im;
    int                 cx, cy; /* Center */
    int                 scale;  /* Zoom level */
+   int                 sx, sy; /* Scene x,y */
    int                 sw, sh; /* Scene wxh */
    char                mode;
    char                bpress;
    char                filter;
    char                grabbing;
+   unsigned int        damage_count;
+   char                update;
 } MagWindow;
 
 static void         MagwinDestroy(MagWindow * mw);
@@ -110,6 +116,9 @@
       sy = 0;
    else if (sy + sh > VRoot.h)
       sy = VRoot.h - sh;
+
+   mw->sx = sx;
+   mw->sy = sy;
    mw->sw = sw;
    mw->sh = sh;
 
@@ -154,23 +163,51 @@
    MagwinDrawText(mw, 10, 20, buf);
 }
 
-static void
-_MagwinTimeout(int val, void *data)
+static int
+_MagwinUpdate(MagWindow * mw)
 {
-   MagWindow          *mw = (MagWindow *) data;
-
-   if (val && mw != MagWin)
-      return;
+   if (mw != MagWin)
+      return 0;
 
    /* Validate ewin */
    if (!EwinFindByPtr(mw->ewin))
-      return;
+      return 0;
 
-   DoIn("magwin", .050, _MagwinTimeout, 0, data);
+   if (!mw->update && Mode.events.damage_count == mw->damage_count)
+      return 1;
+   mw->damage_count = Mode.events.damage_count;
 
    /* FIXME - Check damage */
+
    MagwinRedraw(mw, 1);
+
+   mw->update = 0;
+
+   return 1;
+}
+
+#if USE_TIMER
+static void
+_MagwinTimeout(int val __UNUSED__, void *data)
+{
+   MagWindow          *mw = (MagWindow *) data;
+   int                 again;
+
+   again = _MagwinUpdate(mw);
+   if (!again)
+      return;
+
+   DoIn("magwin", .050, _MagwinTimeout, 0, data);
+}
+#elif USE_ANIMATOR
+static int
+_MagwinAnimator(void *data)
+{
+   MagWindow          *mw = (MagWindow *) data;
+
+   return _MagwinUpdate(mw);
 }
+#endif
 
 static int
 MagwinKeyPress(MagWindow * mw, KeySym key)
@@ -249,7 +286,7 @@
      case KeyPress:
        key = XLookupKeysym(&ev->xkey, 0);
        done = MagwinKeyPress(mw, key);
-       MagwinRedraw(mw, 1);
+       mw->update = 1;
        break;
 
      case ButtonPress:
@@ -271,6 +308,7 @@
             break;
          }
        mw->bpress = 1;
+       mw->update = 1;
        break;
      case ButtonRelease:
        mw->bpress = 0;
@@ -281,17 +319,22 @@
          {
             mw->cx = Mode.events.x;
             mw->cy = Mode.events.y;
-            MagwinRedraw(mw, 1);
+            mw->update = 1;
          }
        else
          {
-            MagwinRedraw(mw, 0);
+            mw->update = 1;
          }
        break;
 
      case MapNotify:
        MagwinKeyPress(mw, XK_g);
+#if USE_TIMER
        _MagwinTimeout(1, mw);
+#elif USE_ANIMATOR
+       AnimatorAdd(_MagwinAnimator, mw);
+#endif
+       mw->update = 1;
        break;
      }
 
@@ -372,7 +415,9 @@
 static void
 MagwinDestroy(MagWindow * mw)
 {
+#if USE_TIMER
    RemoveTimerEvent("magwin");
+#endif
    EventCallbackUnregister(EwinGetClientWin(mw->ewin), 0, MagwinEvent, mw);
    EDestroyWindow(EwinGetClientWin(mw->ewin));
    if (mw->im)
@@ -396,6 +441,7 @@
    EwinShow(MagWin->ewin);
 }
 
+#if 0                          /* FIXME - Remove? */
 static void
 MagwinHide(void)
 {
@@ -404,6 +450,7 @@
 
    EwinHide(MagWin->ewin);
 }
+#endif
 
 /*
  * MagWin Module
@@ -425,15 +472,11 @@
        p += len;
      }
 
-   if (!p || cmd[0] == '?')
-     {
-       IpcPrintf("Magwin: ???\n");
-     }
-   else if (!strcmp(cmd, "show"))
+   if (!p || !strcmp(cmd, "show"))
      {
        MagwinShow();
      }
-#if 1                          /* FIXME - Remove? */
+#if 0                          /* FIXME - Remove? */
    else if (!strcmp(cmd, "hide"))
      {
        MagwinHide();



-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to