[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