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