34
34
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
37
#include "animation-internal.h"
39
39
// ===================== Effect: Horizontal Folds =========================
42
getObjectZ (Model *model,
43
float forwardProgress,
45
float relDistToFoldCenter,
41
HorizontalFoldsAnim::HorizontalFoldsAnim (CompWindow *w,
42
WindowEvent curWindowEvent,
44
const AnimEffect info,
45
const CompRect &icon) :
46
Animation::Animation (w, curWindowEvent, duration, info, icon),
47
TransformAnim::TransformAnim (w, curWindowEvent, duration, info, icon),
48
FoldAnim::FoldAnim (w, curWindowEvent, duration, info, icon)
53
HorizontalFoldsAnim::initGrid ()
56
if (mCurWindowEvent == WindowEventShade ||
57
mCurWindowEvent == WindowEventUnshade)
59
optValI (AnimationOptions::HorizontalFoldsNumFolds);
62
optValI (AnimationOptions::HorizontalFoldsNumFolds);
66
HorizontalFoldsAnim::getObjectZ (GridAnim::GridModel *mModel,
67
float forwardProgress,
69
float relDistToFoldCenter,
48
72
return -(sinForProg *
74
mModel->scale ().x () *
51
75
2 * (0.5 - relDistToFoldCenter));
55
fxHorizontalFoldsInitGrid(CompWindow *w,
56
int *gridWidth, int *gridHeight)
61
if (aw->com.curWindowEvent == WindowEventShade ||
62
aw->com.curWindowEvent == WindowEventUnshade)
64
animGetI (w, ANIM_SCREEN_OPTION_HORIZONTAL_FOLDS_NUM_FOLDS);
67
animGetI (w, ANIM_SCREEN_OPTION_HORIZONTAL_FOLDS_NUM_FOLDS);
71
fxHorizontalFoldsModelStepObject(CompWindow * w,
74
float forwardProgress,
76
float foldMaxAmp, int rowNo)
80
float origx = w->attrib.x + (WIN_W(w) * object->gridPosition.x -
81
w->output.left) * model->scale.x;
82
float origy = w->attrib.y + (WIN_H(w) * object->gridPosition.y -
83
w->output.top) * model->scale.y;
85
object->position.x = origx;
87
if (aw->com.curWindowEvent == WindowEventShade ||
88
aw->com.curWindowEvent == WindowEventUnshade)
92
float relDistToFoldCenter = (rowNo % 2 == 1 ? 0.5 : 0);
94
if (object->gridPosition.y == 0)
96
object->position.y = WIN_Y(w);
97
object->position.z = 0;
99
else if (object->gridPosition.y == 1)
102
(1 - forwardProgress) * origy +
104
(WIN_Y(w) + model->topHeight + model->bottomHeight);
105
object->position.z = 0;
110
(1 - forwardProgress) * origy +
111
forwardProgress * (WIN_Y(w) + model->topHeight);
113
getObjectZ (model, forwardProgress, sinForProg,
114
relDistToFoldCenter, foldMaxAmp);
119
// Execute normal mode
121
float relDistToFoldCenter;
123
relDistToFoldCenter = (rowNo % 2 == 0 ? 0.5 : 0);
126
(1 - forwardProgress) * origy +
127
forwardProgress * (BORDER_Y(w) + BORDER_H(w) / 2.0);
129
getObjectZ (model, forwardProgress, sinForProg,
130
relDistToFoldCenter, foldMaxAmp);
135
fxHorizontalFoldsModelStep (CompWindow *w, float time)
137
defaultAnimStep (w, time);
141
Model *model = aw->com.model;
79
HorizontalFoldsAnim::step ()
81
GridZoomAnim::step ();
83
CompRect winRect (mAWindow->savedRectsValid () ?
84
mAWindow->saveWinRect () :
85
mWindow->geometry ());
86
CompRect inRect (mAWindow->savedRectsValid () ?
87
mAWindow->savedInRect () :
88
mWindow->inputRect ());
89
CompRect outRect (mAWindow->savedRectsValid () ?
90
mAWindow->savedOutRect () :
91
mWindow->outputRect ());
92
CompWindowExtents outExtents (mAWindow->savedRectsValid () ?
93
mAWindow->savedOutExtents () :
143
95
float winHeight = 0;
144
if (aw->com.curWindowEvent == WindowEventShade ||
145
aw->com.curWindowEvent == WindowEventUnshade)
96
if (mCurWindowEvent == WindowEventShade ||
97
mCurWindowEvent == WindowEventUnshade)
147
winHeight = (w)->height;
99
winHeight = winRect.height ();
151
winHeight = BORDER_H (w);
103
winHeight = inRect.height ();
154
2.0 * animGetI (w, ANIM_SCREEN_OPTION_HORIZONTAL_FOLDS_NUM_FOLDS);
106
2.0 * optValI (AnimationOptions::HorizontalFoldsNumFolds);
155
107
float foldMaxAmp =
156
0.3 * pow ((winHeight / nHalfFolds) / w->screen->height, 0.3) *
157
animGetF (w, ANIM_SCREEN_OPTION_HORIZONTAL_FOLDS_AMP_MULT);
108
0.3 * pow ((winHeight / nHalfFolds) / ::screen->height (), 0.3) *
109
optValF (AnimationOptions::HorizontalFoldsAmpMult);
159
float forwardProgress = getProgressAndCenter (w, NULL);
111
float forwardProgress = getActualProgress ();
161
113
float sinForProg = sin (forwardProgress * M_PI / 2);
163
Object *object = model->objects;
165
for (i = 0; i < model->numObjects; i++, object++)
166
fxHorizontalFoldsModelStepObject(w,
172
i / model->gridWidth);
115
GridModel::GridObject *object = mModel->objects ();
116
for (int i = 0; i < mModel->numObjects (); i++, object++)
118
int rowNo = i / mGridWidth;
119
float origx = (winRect.x () +
120
(outRect.width () * object->gridPosition ().x () -
121
outExtents.left) * mModel->scale ().x ());
122
float origy = (winRect.y () +
123
(outRect.height () * object->gridPosition ().y () -
124
outExtents.top) * mModel->scale ().y ());
126
object->position ().setX (origx);
128
if (mCurWindowEvent == WindowEventShade ||
129
mCurWindowEvent == WindowEventUnshade)
131
// Execute shade mode
133
float relDistToFoldCenter = (rowNo % 2 == 1 ? 0.5 : 0);
135
if (object->gridPosition ().y () == 0)
137
object->position ().setY (outRect.y ());
138
object->position ().setZ (0);
140
else if (object->gridPosition ().y () == 1)
142
object->position ().setY (
143
(1 - forwardProgress) * origy +
145
(outRect.y () + mDecorTopHeight + mDecorBottomHeight));
146
object->position ().setZ (0);
150
object->position ().setY (
151
(1 - forwardProgress) * origy +
152
forwardProgress * (outRect.y () + mDecorTopHeight));
153
object->position ().setZ (
154
getObjectZ (mModel, forwardProgress, sinForProg,
155
relDistToFoldCenter, foldMaxAmp));
160
// Execute normal mode
162
float relDistToFoldCenter = (rowNo % 2 == 0 ? 0.5 : 0);
164
object->position ().setY (
165
(1 - forwardProgress) * origy +
166
forwardProgress * (inRect.y () + inRect.height () / 2.0));
167
object->position ().setZ (
168
getObjectZ (mModel, forwardProgress, sinForProg,
169
relDistToFoldCenter, foldMaxAmp));
176
fxHorizontalFoldsZoomToIcon (CompWindow *w)
175
HorizontalFoldsAnim::zoomToIcon ()
179
return ((aw->com.curWindowEvent == WindowEventMinimize ||
180
aw->com.curWindowEvent == WindowEventUnminimize) &&
181
animGetB (w, ANIM_SCREEN_OPTION_HORIZONTAL_FOLDS_Z2TOM));
177
return ((mCurWindowEvent == WindowEventMinimize ||
178
mCurWindowEvent == WindowEventUnminimize) &&
179
optValB (AnimationOptions::HorizontalFoldsZoomToTaskbar));