[fusion-commits] Animation plugin: Changes to 'master' (5658a14a98a1b2b98d38e7747f347d2579b9edda)

cornelius at server.opencompositing.org cornelius at server.opencompositing.org
Sun May 4 07:15:34 CEST 2008


New commits:
commit 5658a14a98a1b2b98d38e7747f347d2579b9edda
Author: Erkin Bahceci <erkinbah at gmail.com>
Date:   Sun May 4 00:14:25 2008 -0500

    Prevent dodging of nonmatching windows (like toolbars).


 animation.c |   32 +++++++++++++++++++++++++-------
 1 files changed, 25 insertions(+), 7 deletions(-)


Modified: fusion/plugins/animation/animation.c
===================================================================
--- fusion/plugins/animation/animation.c
+++ fusion/plugins/animation/animation.c
@@ -270,9 +270,6 @@ getMatchingAnimSelection (CompWindow *w,
     ANIM_SCREEN(w->screen);
     ANIM_WINDOW(w);
 
-    if (duration == NULL)
-	return AnimEffectNone;
-
     CompOptionValue *valMatch;
     CompOptionValue *valEffect;
     CompOptionValue *valDuration;
@@ -353,7 +350,8 @@ getMatchingAnimSelection (CompWindow *w,
 	aw->prevAnimSelectionRow = aw->curAnimSelectionRow;
 	aw->curAnimSelectionRow = i;
 
-	*duration = valDuration->list.value[i].i;
+	if (duration)
+	    *duration = valDuration->list.value[i].i;
 
 	return effects[valEffect->list.value[i].i];
     }
@@ -1725,6 +1723,12 @@ initiateFocusAnimation(CompWindow *w)
 		if (w == dw && chosenEffect == AnimEffectFocusFade)
 		    continue;
 
+		Bool nonMatching = FALSE;
+		if (chosenEffect == AnimEffectDodge &&
+		    getMatchingAnimSelection (dw, WindowEventFocus, NULL) !=
+		    chosenEffect)
+		    nonMatching = TRUE;
+
 		// Compute intersection of this (dw) with subject
 		rect.x = WIN_X(dw);
 		rect.y = WIN_Y(dw);
@@ -1750,6 +1754,8 @@ initiateFocusAnimation(CompWindow *w)
 
 		    numDodgingWins++;
 		    adw->dodgeOrder = numDodgingWins;
+		    if (nonMatching) // Use neg. values for non-matching windows
+			adw->dodgeOrder *= -1;
 		}
 	    }
 
@@ -1792,6 +1798,12 @@ initiateFocusAnimation(CompWindow *w)
 
 		    // Initiate dodge for this window
 
+		    Bool stationaryDodger = FALSE;
+		    if (adw->dodgeOrder < 0)
+		    {
+			adw->dodgeOrder *= -1; // Make it positive again
+			stationaryDodger = TRUE;
+		    }
 		    adw->dodgeSubjectWin = w;
 		    adw->curAnimEffect = AnimEffectDodge;
 
@@ -1809,17 +1821,23 @@ initiateFocusAnimation(CompWindow *w)
 		    float transformTotalProgress =
 			1 + adw->transformStartProgress;
 
+		    if (maxTransformTotalProgress < transformTotalProgress)
+			maxTransformTotalProgress = transformTotalProgress;
+
 		    // normalize
 		    adw->transformStartProgress /=
 			transformTotalProgress;
 
+		    if (stationaryDodger)
+		    {
+			adw->transformStartProgress = 0;
+			transformTotalProgress = 0;
+		    }
+
 		    adw->animTotalTime =
 			transformTotalProgress * duration;
 		    adw->animRemainingTime = adw->animTotalTime;
 
-		    if (maxTransformTotalProgress < transformTotalProgress)
-			maxTransformTotalProgress = transformTotalProgress;
-
 		    // Put window on dodge chain
 
 		    // if dodge chain was started before


More information about the commits mailing list