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)
49
TransformAnim::init ()
55
TransformAnim::updateBB (CompOutput &output)
59
prepareTransform (output, wTransform, mTransform);
61
CompRect outRect (mAWindow->savedRectsValid () ?
62
mAWindow->savedOutRect () :
63
mWindow->outputRect ());
64
float corners[4*3] = {
65
outRect.x (), outRect.y (), 0,
66
outRect.x () + outRect.width (), outRect.y (), 0,
67
outRect.x (), outRect.y () + outRect.height (), 0,
68
outRect.x () + outRect.width (), outRect.y () + outRect.height (), 0
70
mAWindow->expandBBWithPoints3DTransform (output,
78
TransformAnim::step ()
85
TransformAnim::updateTransform (GLMatrix &wTransform)
87
wTransform *= mTransform;
90
/// Scales z by 0 and does perspective distortion so that it
91
/// looks the same wherever on the screen.
93
TransformAnim::perspectiveDistortAndResetZ (GLMatrix &transform)
95
float v = -1.0 / ::screen->width ();
98
transform = M * transform, where M is
105
transform[8] = v * transform[12];
106
transform[9] = v * transform[13];
107
transform[10] = v * transform[14];
108
transform[11] = v * transform[15];
112
TransformAnim::applyPerspectiveSkew (CompOutput &output,
116
GLfloat skewx = -(((center.x () - output.region ()->extents.x1) -
117
output.width () / 2) * 1.15);
118
GLfloat skewy = -(((center.y () - output.region ()->extents.y1) -
119
output.height () / 2) * 1.15);
121
/* transform = M * transform, where M is the skew matrix
128
transform[8] = skewx * transform[0] + skewy * transform[4] + transform[8];
129
transform[9] = skewx * transform[1] + skewy * transform[5] + transform[9];
130
transform[10] = skewx * transform[2] + skewy * transform[6] + transform[10];
131
transform[11] = skewx * transform[3] + skewy * transform[7] + transform[11];
135
TransformAnim::getCenter ()
137
CompRect inRect (mAWindow->savedRectsValid () ?
138
mAWindow->savedInRect () :
139
mWindow->inputRect ());
140
Point center (inRect.x () + inRect.width () / 2,
141
inRect.y () + inRect.height () / 2);