Enlightenment CVS committal Author : kwo Project : e16 Module : e
Dir : e16/e/src Modified Files: ecompmgr.c Log Message: Do fading using animators. =================================================================== RCS file: /cvs/e/e16/e/src/ecompmgr.c,v retrieving revision 1.135 retrieving revision 1.136 diff -u -3 -r1.135 -r1.136 --- ecompmgr.c 17 Jan 2007 01:10:42 -0000 1.135 +++ ecompmgr.c 4 Feb 2007 04:22:30 -0000 1.136 @@ -113,6 +113,9 @@ unsigned int opacity; unsigned long damage_sequence; /* sequence when damage was created */ + + Animator *anim_fade; + unsigned int opacity_to; }; /* @@ -205,10 +208,10 @@ static void ECompMgrDamageAll(void); static void ECompMgrHandleRootEvent(Win win, XEvent * ev, void *prm); static void ECompMgrHandleWindowEvent(Win win, XEvent * ev, void *prm); -static void doECompMgrWinFade(int val, void *data); +static int doECompMgrWinFade(void *data); static void ECompMgrWinInvalidate(EObj * eo, int what); static void ECompMgrWinSetPicts(EObj * eo); -static void ECompMgrWinFadeOutEnd(EObj * eo); +static void ECompMgrWinFadeEnd(EObj * eo, int done); static int ECompMgrDetermineOrder(EObj * const *lst, int num, EObj ** first, EObj ** last, Desk * dsk, XserverRegion clip); @@ -1201,52 +1204,35 @@ cw->mode = mode; } -static void -ECompMgrWinFadeDoIn(EObj * eo, unsigned int op) -{ - char s[128]; - - Esnprintf(s, sizeof(s), "Fade-%#lx", EobjGetXwin(eo)); - DoIn(s, 1e-6 * Conf_compmgr.fading.dt_us, doECompMgrWinFade, op, eo); -} - -static void -ECompMgrWinFadeCancel(EObj * eo) -{ - char s[128]; - - Esnprintf(s, sizeof(s), "Fade-%#lx", EobjGetXwin(eo)); - RemoveTimerEvent(s); -} - -static void -doECompMgrWinFade(int val, void *data) +static int +doECompMgrWinFade(void *data) { - EObj *eo = (EObj *) data; + EObj *eo; ECmWinInfo *cw; - unsigned int op = (unsigned int)val; + unsigned int op; + + eo = (EObj *) data; /* May be gone */ if (EobjListStackCheck(eo) < 0) - return; + return 0; cw = eo->cmhook; + op = cw->opacity_to; #if DEBUG_OPACITY Eprintf("doECompMgrWinFade %#lx, %d/%d, %#x->%#x\n", EobjGetXwin(eo), cw->fading, cw->fadeout, cw->opacity, op); #endif if (!cw->fading) - return; + goto done; cw->fading = cw->fadeout; if (op == cw->opacity) { op = eo->opacity; - if (cw->fadeout) - ECompMgrWinFadeOutEnd(eo); - cw->fading = 0; + ECompMgrWinFadeEnd(eo, 0); } else if (op > cw->opacity) { @@ -1268,11 +1254,17 @@ #if DEBUG_OPACITY Eprintf("doECompMgrWinFade %#lx, %#x\n", EobjGetXwin(eo), op); #endif + ECompMgrWinSetOpacity(eo, op); + if (cw->fading) - ECompMgrWinFadeDoIn(eo, (unsigned int)val); - else if (eo->type == EOBJ_TYPE_EWIN) + return 1; + + if (eo->type == EOBJ_TYPE_EWIN) ModulesSignal(eo->shown ? ESIGNAL_EWIN_CHANGE : ESIGNAL_EWIN_UNMAP, eo); - ECompMgrWinSetOpacity(eo, op); + + done: + cw->anim_fade = NULL; + return 0; } static void @@ -1280,8 +1272,11 @@ { ECmWinInfo *cw = eo->cmhook; + if (!cw->anim_fade) + cw->anim_fade = AnimatorAdd(doECompMgrWinFade, eo); + cw->opacity_to = op_to; + cw->fading = 1; - ECompMgrWinFadeDoIn(eo, op_to); ECompMgrWinSetOpacity(eo, op_from); } @@ -1294,8 +1289,9 @@ Eprintf("ECompMgrWinFadeIn %#lx %#x -> %#x\n", EobjGetXwin(eo), 0x10000000, eo->opacity); #endif - if (cw->fadeout) - ECompMgrWinFadeOutEnd(eo); + if (cw->fading) + ECompMgrWinFadeEnd(eo, 0); + ECompMgrWinFade(eo, 0x10000000, eo->opacity); } @@ -1316,17 +1312,26 @@ } static void -ECompMgrWinFadeOutEnd(EObj * eo) +ECompMgrWinFadeEnd(EObj * eo, int done) { ECmWinInfo *cw = eo->cmhook; #if DEBUG_OPACITY - Eprintf("ECompMgrWinFadeOutEnd %#lx\n", EobjGetXwin(eo)); + Eprintf("ECompMgrWinFadeEnd %#lx\n", EobjGetXwin(eo)); #endif - cw->fadeout = 0; - ECompMgrWinInvalidate(eo, INV_PIXMAP | INV_PICTURE); - ECompMgrDamageMergeObject(eo, cw->extents, 0); - _ECM_SET_CLIP_CHANGED(); + if (cw->fadeout) + { + cw->fadeout = 0; + ECompMgrWinInvalidate(eo, INV_PIXMAP | INV_PICTURE); + ECompMgrDamageMergeObject(eo, cw->extents, 0); + _ECM_SET_CLIP_CHANGED(); + } + cw->fading = 0; + if (done) + { + AnimatorDel(cw->anim_fade); + cw->anim_fade = NULL; + } } void @@ -1508,11 +1513,7 @@ return; if (cw->fadeout) - { - ECompMgrWinFadeCancel(eo); - ECompMgrWinFadeOutEnd(eo); - cw->fading = 0; - } + ECompMgrWinFadeEnd(eo, 1); if (!eo->shown) { @@ -1650,11 +1651,7 @@ D1printf("ECompMgrWinDel %#lx\n", EobjGetXwin(eo)); if (cw->fading) - { - ECompMgrWinFadeCancel(eo); - if (cw->fadeout) - ECompMgrWinFadeOutEnd(eo); - } + ECompMgrWinFadeEnd(eo, 1); EventCallbackUnregister(eo->win, 0, ECompMgrHandleWindowEvent, eo); ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier. Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs