2
* Animation plugin for compiz
6
* Copyright : (C) 2006 Erkin Bahceci
7
* E-mail : erkinbah@gmail.com
9
* Based on Wobbly and Minimize plugins by
11
* E-mail : davidr@novell.com>
13
* Particle system added by : (C) 2006 Dennis Kasprzyk
14
* E-mail : onestone@beryl-project.org
16
* Beam-Up added by : Florencio Guimaraes
17
* E-mail : florencio@nexcorp.com.br
19
* Hexagon tessellator added by : Mike Slegeir
20
* E-mail : mikeslegeir@mail.utexas.edu>
22
* This program is free software; you can redistribute it and/or
23
* modify it under the terms of the GNU General Public License
24
* as published by the Free Software Foundation; either version 2
25
* of the License, or (at your option) any later version.
27
* This program is distributed in the hope that it will be useful,
28
* but WITHOUT ANY WARRANTY; without even the implied warranty of
29
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
30
* GNU General Public License for more details.
32
* You should have received a copy of the GNU General Public License
33
* along with this program; if not, write to the Free Software
34
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
39
TransformAnim::TransformAnim (CompWindow *w,
40
WindowEvent curWindowEvent,
42
const AnimEffect info,
43
const CompRect &icon) :
44
Animation::Animation (w, curWindowEvent, duration, info, icon),
45
mTransformStartProgress (0.0f),
46
mTransformProgress (0.0f)
51
TransformAnim::init ()
57
TransformAnim::updateBB (CompOutput &output)
61
prepareTransform (output, wTransform, mTransform);
63
CompRect outRect (mAWindow->savedRectsValid () ?
64
mAWindow->savedOutRect () :
65
mWindow->outputRect ());
66
float corners[4*3] = {
67
outRect.x (), outRect.y (), 0,
68
outRect.x () + outRect.width (), outRect.y (), 0,
69
outRect.x (), outRect.y () + outRect.height (), 0,
70
outRect.x () + outRect.width (), outRect.y () + outRect.height (), 0
72
mAWindow->expandBBWithPoints3DTransform (output,
80
TransformAnim::step ()
87
TransformAnim::updateTransform (GLMatrix &wTransform)
89
wTransform *= mTransform;
92
/// Scales z by 0 and does perspective distortion so that it
93
/// looks the same wherever on the screen.
95
TransformAnim::perspectiveDistortAndResetZ (GLMatrix &transform)
97
float v = -1.0 / ::screen->width ();
100
transform = M * transform, where M is
107
transform[8] = v * transform[12];
108
transform[9] = v * transform[13];
109
transform[10] = v * transform[14];
110
transform[11] = v * transform[15];
114
TransformAnim::applyPerspectiveSkew (CompOutput &output,
118
GLfloat skewx = -(((center.x () - output.region ()->extents.x1) -
119
output.width () / 2) * 1.15);
120
GLfloat skewy = -(((center.y () - output.region ()->extents.y1) -
121
output.height () / 2) * 1.15);
123
/* transform = M * transform, where M is the skew matrix
130
transform[8] = skewx * transform[0] + skewy * transform[4] + transform[8];
131
transform[9] = skewx * transform[1] + skewy * transform[5] + transform[9];
132
transform[10] = skewx * transform[2] + skewy * transform[6] + transform[10];
133
transform[11] = skewx * transform[3] + skewy * transform[7] + transform[11];
137
TransformAnim::getCenter ()
139
CompRect inRect (mAWindow->savedRectsValid () ?
140
mAWindow->savedInRect () :
141
mWindow->borderRect ());
142
Point center (inRect.x () + inRect.width () / 2,
143
inRect.y () + inRect.height () / 2);