[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

compiz-fusion-plugins-extra: Changes to 'upstream-unstable'



 .gitmodules                                            |    3 
 3d                                                     |    1 
 3d/CMakeLists.txt                                      |    5 
 3d/VERSION                                             |    1 
 3d/src/3d.cpp                                          |  615 
 3d/src/3d.h                                            |  156 
 3d/td.xml.in                                           |  111 
 AUTHORS                                                |   58 
 CMakeLists.txt                                         |   13 
 ChangeLog                                              |  711 
 NEWS                                                   |   13 
 VERSION                                                |    1 
 addhelper                                              |    1 
 addhelper/CMakeLists.txt                               |    5 
 addhelper/Makefile                                     |  533 
 addhelper/VERSION                                      |    1 
 addhelper/addhelper.xml.in                             |   63 
 addhelper/src/addhelper.cpp                            |  272 
 addhelper/src/addhelper.h                              |  125 
 animationaddon                                         |    1 
 animationaddon/CMakeLists.txt                          |    7 
 animationaddon/VERSION                                 |    1 
 animationaddon/animationaddon.xml.in                   |  529 
 animationaddon/compiz-animationaddon.pc.in             |   12 
 animationaddon/include/animationaddon/animationaddon.h |  341 
 animationaddon/src/airplane.cpp                        |  769 
 animationaddon/src/animation_tex.h                     |  222 
 animationaddon/src/animationaddon.cpp                  |  287 
 animationaddon/src/beamup.cpp                          |  235 
 animationaddon/src/burn.cpp                            |  424 
 animationaddon/src/dissolve.cpp                        |   66 
 animationaddon/src/domino.cpp                          |  281 
 animationaddon/src/explode.cpp                         |  113 
 animationaddon/src/fold.cpp                            |  253 
 animationaddon/src/glide3.cpp                          |   84 
 animationaddon/src/leafspread.cpp                      |  107 
 animationaddon/src/particle.cpp                        |  327 
 animationaddon/src/polygon.cpp                         | 1995 +
 animationaddon/src/private.h                           |  370 
 animationaddon/src/skewer.cpp                          |  228 
 bench                                                  |    1 
 bench/CMakeLists.txt                                   |    6 
 bench/VERSION                                          |    1 
 bench/bench.xml.in                                     |   83 
 bench/src/bench.cpp                                    |  455 
 bench/src/bench.h                                      |  117 
 bench/src/bench_tex.h                                  |21764 +++++++++++++++++
 bicubic                                                |    1 
 bicubic/CMakeLists.txt                                 |    5 
 bicubic/VERSION                                        |    1 
 bicubic/bicubic.xml.in                                 |   20 
 bicubic/src/bicubic.cpp                                |  316 
 bicubic/src/bicubic.h                                  |   94 
 crashhandler                                           |    1 
 crashhandler/CMakeLists.txt                            |    5 
 crashhandler/VERSION                                   |    1 
 crashhandler/crashhandler.xml.in                       |   35 
 crashhandler/src/crashhandler.cpp                      |  150 
 crashhandler/src/crashhandler.h                        |   48 
 cubeaddon                                              |    1 
 cubeaddon/CMakeLists.txt                               |    6 
 cubeaddon/VERSION                                      |    1 
 cubeaddon/cubeaddon.xml.in                             |  280 
 cubeaddon/images/compizcap.png                         |binary
 cubeaddon/images/cubecap_release.png                   |binary
 cubeaddon/images/fusioncap.png                         |binary
 cubeaddon/src/cubeaddon.cpp                            | 1476 +
 cubeaddon/src/cubeaddon.h                              |  187 
 extrawm                                                |    1 
 extrawm/CMakeLists.txt                                 |    5 
 extrawm/VERSION                                        |    1 
 extrawm/extrawm.xml.in                                 |   41 
 extrawm/src/extrawm.cpp                                |  327 
 extrawm/src/extrawm.h                                  |  116 
 fadedesktop                                            |    1 
 fadedesktop/CMakeLists.txt                             |    5 
 fadedesktop/VERSION                                    |    1 
 fadedesktop/fadedesktop.xml.in                         |   36 
 fadedesktop/src/fadedesktop.cpp                        |  265 
 fadedesktop/src/fadedesktop.h                          |  102 
 firepaint                                              |    1 
 firepaint/CMakeLists.txt                               |    5 
 firepaint/VERSION                                      |    1 
 firepaint/firepaint.xml.in                             |   96 
 firepaint/src/firepaint.cpp                            |  765 
 firepaint/src/firepaint.h                              |  254 
 firepaint/src/firepaint_tex.h                          |  223 
 gears                                                  |    1 
 gears/CMakeLists.txt                                   |    5 
 gears/VERSION                                          |    1 
 gears/gears.xml.in                                     |   19 
 gears/src/gears.cpp                                    |  393 
 gears/src/gears.h                                      |   98 
 grid                                                   |    1 
 group                                                  |    1 
 group/CMakeLists.txt                                   |    5 
 group/VERSION                                          |    1 
 group/group.xml.in                                     |  493 
 group/src/cairo.cpp                                    |  878 
 group/src/glow.cpp                                     |  485 
 group/src/glow.h                                       |   68 
 group/src/group.cpp                                    | 2378 +
 group/src/group.h                                      |  804 
 group/src/group_glow.h                                 |  402 
 group/src/init.cpp                                     |  711 
 group/src/layers.h                                     |  214 
 group/src/paint.cpp                                    | 1300 +
 group/src/queues.cpp                                   |  252 
 group/src/selection.cpp                                |  490 
 group/src/tab.cpp                                      | 3215 ++
 group/src/tabbar.h                                     |  233 
 loginout                                               |    1 
 loginout/CMakeLists.txt                                |    5 
 loginout/VERSION                                       |    1 
 loginout/loginout.xml.in                               |  101 
 loginout/src/loginout.cpp                              |  320 
 loginout/src/loginout.h                                |  115 
 maximumize                                             |    1 
 maximumize/CMakeLists.txt                              |    5 
 maximumize/VERSION                                     |    1 
 maximumize/maximumize.xml.in                           |  157 
 maximumize/src/maximumize.cpp                          |  580 
 maximumize/src/maximumize.h                            |  160 
 mblur                                                  |    1 
 mblur/CMakeLists.txt                                   |    5 
 mblur/VERSION                                          |    1 
 mblur/mblur.xml.in                                     |   68 
 mblur/src/mblur.cpp                                    |  313 
 mblur/src/mblur.h                                      |  100 
 notification                                           |    1 
 notification/CMakeLists.txt                            |    9 
 notification/images/compiz.png                         |binary
 notification/notification.xml.in                       |   50 
 notification/src/notification.cpp                      |   99 
 notification/src/notification.h                        |   57 
 reflex                                                 |    1 
 reflex/CMakeLists.txt                                  |    5 
 reflex/VERSION                                         |    1 
 reflex/images/reflection.png                           |binary
 reflex/reflex.xml.in                                   |   59 
 reflex/src/reflex.cpp                                  |  382 
 reflex/src/reflex.h                                    |  112 
 scalefilter                                            |    1 
 scalefilter/CMakeLists.txt                             |    5 
 scalefilter/VERSION                                    |    1 
 scalefilter/scalefilter.xml.in                         |   85 
 scalefilter/src/scalefilter.cpp                        |  604 
 scalefilter/src/scalefilter.h                          |  158 
 shelf                                                  |    1 
 shelf/CMakeLists.txt                                   |    5 
 shelf/VERSION                                          |    1 
 shelf/shelf.xml.in                                     |   63 
 shelf/src/shelf.cpp                                    |  833 
 shelf/src/shelf.h                                      |  232 
 showdesktop                                            |    1 
 showdesktop/CMakeLists.txt                             |    5 
 showdesktop/VERSION                                    |    1 
 showdesktop/showdesktop.xml.in                         |   99 
 showdesktop/src/showdesktop.cpp                        |  618 
 showdesktop/src/showdesktop.h                          |  195 
 showmouse                                              |    1 
 showmouse/CMakeLists.txt                               |    5 
 showmouse/VERSION                                      |    1 
 showmouse/images/Star.png                              |binary
 showmouse/showmouse.xml.in                             |  127 
 showmouse/src/showmouse.cpp                            |  719 
 showmouse/src/showmouse.h                              |  225 
 showmouse/src/showmouse_tex.h                          |  216 
 splash                                                 |    1 
 splash/CMakeLists.txt                                  |    5 
 splash/VERSION                                         |    1 
 splash/images/splash_background.png                    |binary
 splash/images/splash_logo.png                          |binary
 splash/splash.xml.in                                   |   86 
 splash/src/splash.cpp                                  |  514 
 splash/src/splash.h                                    |  123 
 trailfocus                                             |    1 
 trailfocus/CMakeLists.txt                              |    5 
 trailfocus/VERSION                                     |    1 
 trailfocus/src/trailfocus.cpp                          |  427 
 trailfocus/src/trailfocus.h                            |   97 
 trailfocus/trailfocus.xml.in                           |   97 
 wallpaper                                              |    1 
 wallpaper/CMakeLists.txt                               |    5 
 wallpaper/VERSION                                      |    1 
 wallpaper/src/wallpaper.cpp                            |  699 
 wallpaper/src/wallpaper.h                              |  158 
 wallpaper/wallpaper.xml.in                             |  113 
 widget                                                 |    1 
 widget/CMakeLists.txt                                  |    5 
 widget/VERSION                                         |    1 
 widget/plugin.info                                     |    1 
 widget/src/widget.cpp                                  |  741 
 widget/src/widget.h                                    |  179 
 widget/widget.xml.in                                   |   77 
 195 files changed, 59246 insertions(+), 96 deletions(-)

New commits:
commit f8c8a183d0e2aa005650816bea09e6ba407ce593
Author: Janos Guljas <janos@resenje.org>
Date:   Tue Aug 2 21:31:35 2011 +0200

    Imported Upstream version 0.9.5.0

diff --git a/.gitmodules b/.gitmodules
index 5d9e8d4..5b3d7f3 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -31,9 +31,6 @@
 [submodule "gears"]
 	path = gears
 	url = git://git.compiz.org/compiz/plugins/gears
-[submodule "grid"]
-	path = grid
-	url = git://git.compiz.org/compiz/plugins/grid
 [submodule "group"]
 	path = group
 	url = git://git.compiz.org/compiz/plugins/group
diff --git a/3d b/3d
deleted file mode 160000
index f7d0ff9..0000000
--- a/3d
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit f7d0ff9195ff276491e45972c0af1c58eed163c6
diff --git a/3d/CMakeLists.txt b/3d/CMakeLists.txt
new file mode 100644
index 0000000..9740db0
--- /dev/null
+++ b/3d/CMakeLists.txt
@@ -0,0 +1,5 @@
+find_package (Compiz REQUIRED)
+
+include (CompizPlugin)
+
+compiz_plugin (td PLUGINDEPS composite opengl cube)
diff --git a/3d/VERSION b/3d/VERSION
new file mode 100644
index 0000000..719a233
--- /dev/null
+++ b/3d/VERSION
@@ -0,0 +1 @@
+0.9.5.0
diff --git a/3d/src/3d.cpp b/3d/src/3d.cpp
new file mode 100644
index 0000000..6a3f7ee
--- /dev/null
+++ b/3d/src/3d.cpp
@@ -0,0 +1,615 @@
+#include "3d.h"
+
+COMPIZ_PLUGIN_20090315 (td, TdPluginVTable);
+
+void
+setFunctions (bool enabled)
+{
+    TD_SCREEN (screen);
+
+    tds->gScreen->glPaintOutputSetEnabled (tds, enabled);
+    tds->gScreen->glApplyTransformSetEnabled (tds, enabled);
+    tds->cScreen->donePaintSetEnabled (tds, enabled);
+    tds->cubeScreen->cubePaintViewportSetEnabled (tds, enabled);
+    tds->cubeScreen->cubeShouldPaintViewportSetEnabled (tds, enabled);
+    tds->cubeScreen->cubeShouldPaintAllViewportsSetEnabled (tds, enabled);
+
+    foreach (CompWindow *w, screen->windows ())
+    {
+	TD_WINDOW (w);
+
+	tdw->gWindow->glPaintSetEnabled (tdw, enabled);
+    }
+}
+
+bool
+TdWindow::is3D ()
+{
+    if (window->overrideRedirect ())
+	return false;
+
+    if (!window->isViewable () || window->shaded ())
+	return false;
+
+    if (window->state () & (CompWindowStateSkipPagerMask |
+		    CompWindowStateSkipTaskbarMask))
+	return false;
+
+    if (!TdScreen::get (screen)->optionGetWindowMatch ().evaluate (window))
+	return false;
+
+    return true;
+}
+
+void
+TdScreen::preparePaint (int msSinceLastPaint)
+{
+    bool       active;
+
+    CUBE_SCREEN (screen);
+
+    active = (cs->rotationState () != CubeScreen::RotationNone) && screen->vpSize ().width () > 2 &&
+	     !(optionGetManualOnly () && (cs->rotationState () != CubeScreen::RotationManual));
+
+    if (active || mBasicScale != 1.0)
+    {
+	float maxDiv = (float) optionGetMaxWindowSpace () / 100;
+	float minScale = (float) optionGetMinCubeSize () / 100;
+	float x, progress;
+
+	cs->cubeGetRotation (x, x, progress);
+
+	mMaxDepth = 0;
+	foreach (CompWindow *w, screen->windows ())
+	{
+	    TD_WINDOW (w);
+	    tdw->mIs3D = false;
+	    tdw->mDepth = 0;
+
+	    if (!tdw->is3D ())
+		continue;
+
+	    tdw->mIs3D = true;
+	    mMaxDepth++;
+	    tdw->mDepth = mMaxDepth;
+
+	}
+
+	minScale =  MAX (minScale, 1.0 - (mMaxDepth * maxDiv));
+	mBasicScale = 1.0 - ((1.0 - minScale) * progress);
+	mDamage = (progress != 0.0 && progress != 1.0);
+    }
+    else
+    {
+	mBasicScale = 1.0;
+    }
+
+    /* comparing float values with != is error prone, so better cache
+       the comparison and allow a small difference */
+    mActive       = (fabs (mBasicScale - 1.0f) > 1e-4);
+    mCurrentScale = mBasicScale;
+
+    cScreen->preparePaint (msSinceLastPaint);
+
+    setFunctions (mActive);
+}
+
+#define DOBEVEL(corner) (tds->optionGetBevel##corner () ? bevel : 0)
+
+#define SET_V								       \
+    for (int i = 0; i < 4; i++)						       \
+	v[i] = tPoint[i];
+
+#define ADDQUAD(x1,y1,x2,y2)                                      \
+	point[GLVector::x] = x1; point[GLVector::y] = y1;                               \
+	tPoint = transform * point;       \
+	SET_V \
+	glVertex4fv (v);                                  \
+	point[GLVector::x] = x2; point[GLVector::y] = y2;                               \
+	tPoint = transform * point;        \
+	SET_V \
+	glVertex4fv (v);                                   \
+	tPoint = tds->mBTransform * point; \
+	SET_V \
+	glVertex4fv (v);                                \
+	point[GLVector::x] = x1; point[GLVector::y] = y1;                               \
+	tPoint = tds->mBTransform * point; \
+	SET_V \
+	glVertex4fv (v);                                   \
+
+#define ADDBEVELQUAD(x1,y1,x2,y2,m1,m2)             \
+	point[GLVector::x] = x1; point[GLVector::y] = y1;                 \
+	tPoint = m1 * point; \
+	SET_V \
+	glVertex4fv (v);                     \
+	tPoint = m2 * point; \
+	SET_V \
+	glVertex4fv (v);                     \
+	point[GLVector::x] = x2; point[GLVector::y] = y2;                 \
+	tPoint = m2 * point; \
+	SET_V \
+	glVertex4fv (v);                     \
+	tPoint = m1 * point; \
+	SET_V \
+	glVertex4fv (v);                     \
+
+bool
+TdWindow::glPaintWithDepth (const GLWindowPaintAttrib &attrib,
+			    const GLMatrix	      &transform,
+			    const CompRegion	      &region,
+			    unsigned int	      mask)
+{
+    bool status;
+    int            wx, wy, ww, wh;
+    int            bevel, cull, cullInv;
+    GLVector       point, tPoint;
+    unsigned short *c;
+
+    TD_SCREEN (screen);
+    CUBE_SCREEN (screen);
+
+    glIsEnabled (GL_CULL_FACE);
+
+    wx = window->x () - window->input ().left;
+    wy = window->y () - window->input ().top;
+
+    ww = window->width () + window->input ().left + window->input ().right;
+    wh = window->height () + window->input ().top + window->input ().bottom;
+
+    bevel = tds->optionGetBevel ();
+
+    glGetIntegerv (GL_CULL_FACE_MODE, &cull);
+    cullInv = (cull == GL_BACK)? GL_FRONT : GL_BACK;
+
+    if (ww && wh && !(mask & PAINT_WINDOW_OCCLUSION_DETECTION_MASK) &&
+	((cs->paintOrder () == FTB && mFtb) ||
+	(cs->paintOrder () == BTF && !mFtb)))
+    {
+        float v[4];
+	int   temp;
+
+	/* Paint window depth. */
+	glPushMatrix ();
+	glLoadIdentity ();
+
+	if (cs->paintOrder () == BTF)
+	    glCullFace (cullInv);
+
+	glEnable (GL_BLEND);
+	glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+
+	if (window->id () == screen->activeWindow ())
+	    c = tds->optionGetWidthColor ();
+	else
+	    c = tds->optionGetWidthColorInactive ();
+
+	temp = c[3] * gWindow->paintAttrib ().opacity;
+	temp /= 0xffff;
+	glColor4us (c[0], c[1], c[2], temp);
+
+	point[GLVector::z] = 0.0f;
+	point[GLVector::w] = 1.0f;
+
+	glBegin (GL_QUADS);
+
+	/* Top */
+	ADDQUAD (wx + ww - DOBEVEL (Topleft), wy + 0.01,
+		 wx + DOBEVEL (Topright), wy + 0.01);
+
+	/* Bottom */
+	ADDQUAD (wx + DOBEVEL (Bottomleft), wy + wh - 0.01,
+		 wx + ww - DOBEVEL (Bottomright), wy + wh - 0.01);
+
+	/* Left */
+	ADDQUAD (wx + 0.01, wy + DOBEVEL (Topleft),
+		 wx + 0.01, wy + wh - DOBEVEL (Bottomleft));
+
+	/* Right */
+	ADDQUAD (wx + ww - 0.01, wy + wh - DOBEVEL (Topright),
+		 wx + ww - 0.01, wy + DOBEVEL (Bottomright));
+
+	/* Top left bevel */
+	if (tds->optionGetBevelTopleft ())
+	{
+	    ADDBEVELQUAD (wx + bevel / 2.0f,
+			  wy + bevel - bevel / 1.2f,
+			  wx, wy + bevel,
+			  tds->mBTransform, transform);
+
+	    ADDBEVELQUAD (wx + bevel / 2.0f,
+			  wy + bevel - bevel / 1.2f,
+			  wx + bevel, wy,
+			  transform, tds->mBTransform);
+
+	}
+
+	/* Bottom left bevel */
+	if (tds->optionGetBevelBottomleft ())
+	{
+	    ADDBEVELQUAD (wx + bevel / 2.0f,
+			  wy + wh - bevel + bevel / 1.2f,
+			  wx, wy + wh - bevel,
+			  transform, tds->mBTransform);
+
+	    ADDBEVELQUAD (wx + bevel / 2.0f,
+			  wy + wh - bevel + bevel / 1.2f,
+			  wx + bevel, wy + wh,
+			  tds->mBTransform, transform);
+	}
+
+	/* Bottom right bevel */
+	if (tds->optionGetBevelBottomright ())
+	{
+	    ADDBEVELQUAD (wx + ww - bevel / 2.0f,
+			  wy + wh - bevel + bevel / 1.2f,
+			  wx + ww - bevel, wy + wh,
+			  transform, tds->mBTransform);
+
+	    ADDBEVELQUAD (wx + ww - bevel / 2.0f,
+			  wy + wh - bevel + bevel / 1.2f,
+			  wx + ww, wy + wh - bevel,
+			  tds->mBTransform, transform);
+
+
+	}
+
+	/* Top right bevel */
+	if (tds->optionGetBevelTopright ())
+	{
+	    ADDBEVELQUAD (wx + ww - bevel, wy,
+			  wx + ww - bevel / 2.0f,
+			  wy + bevel - bevel / 1.2f,
+			  transform, tds->mBTransform);
+
+	    ADDBEVELQUAD (wx + ww, wy + bevel,
+			  wx + ww - bevel / 2.0f,
+			  wy + bevel - bevel / 1.2f,
+			  tds->mBTransform, transform);
+	}
+	glEnd ();
+
+	glColor4usv (defaultColor);
+	glBlendFunc (GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
+	glPopMatrix ();
+
+	if (cs->paintOrder () == BTF)
+	    glCullFace (cull);
+    }
+
+    if (cs->paintOrder () == BTF)
+	status = gWindow->glPaint (attrib, transform, region, mask);
+    else
+	status = gWindow->glPaint (attrib, tds->mBTransform, region,
+				   mask | PAINT_WINDOW_TRANSFORMED_MASK);
+
+    return status;
+}
+
+bool
+TdWindow::glPaint (const GLWindowPaintAttrib &attrib,
+		   const GLMatrix	     &transform,
+		   const CompRegion	     &region,
+		   unsigned int		     mask)
+{
+    bool           status;
+
+    TD_SCREEN (screen);
+
+    if (mDepth != 0.0f && !tds->mPainting3D && tds->mActive)
+	mask |= PAINT_WINDOW_NO_CORE_INSTANCE_MASK;
+
+    if (tds->mPainting3D && tds->optionGetWidth () && (mDepth != 0.0f) &&
+	tds->mWithDepth)
+    {
+	status = glPaintWithDepth (attrib, transform, region, mask);
+    }
+    else
+    {
+	status = gWindow->glPaint (attrib, transform, region, mask);
+    }
+
+    return status;
+}
+
+void
+TdScreen::glApplyTransform (const GLScreenPaintAttrib &attrib,
+			    CompOutput *output,
+			    GLMatrix *transform)
+{
+
+    gScreen->glApplyTransform (attrib, output, transform);
+
+    transform->scale (mCurrentScale, mCurrentScale, mCurrentScale);
+}
+
+
+void
+TdScreen::cubePaintViewport (const GLScreenPaintAttrib &attrib,
+			     const GLMatrix	       &transform,
+			     const CompRegion	       &region,
+			     CompOutput		       *output,
+			     unsigned int	       mask)
+{
+    CUBE_SCREEN (screen);
+
+    if (cs->paintOrder () == BTF)
+    {
+        cs->cubePaintViewport (attrib, transform,region, output, mask);
+    }
+
+    if (mActive)
+    {
+	GLMatrix      mTransform; // NOT a member variable
+	GLMatrix      screenSpace;
+	GLMatrix      screenSpaceOffset;
+	TdWindow      *tdw;
+	CompWindowList                   pl;
+	CompWindowList::iterator it;
+	float         wDepth = 0.0;
+	float         pointZ = cs->invert () * cs->distance ();
+	unsigned int  newMask;
+
+	std::vector<GLVector> vPoints;
+	vPoints.push_back (GLVector (-0.5, 0.0, pointZ, 1.0));
+	vPoints.push_back (GLVector (0.0, 0.5, pointZ, 1.0));
+	vPoints.push_back (GLVector (0.0, 0.0, pointZ, 1.0));
+
+	if (mWithDepth)
+	    wDepth = -MIN((optionGetWidth ()) / 30, (1.0 - mBasicScale) /
+			  mMaxDepth);
+
+	if (wDepth != 0.0)
+	{
+	    /* all BTF windows in normal order */
+	    foreach (CompWindow *w, screen->windows ())
+	    {
+		tdw = TdWindow::get (w);
+
+		if (!tdw->mIs3D)
+		    continue;
+
+		mCurrentScale = mBasicScale +
+		                    (tdw->mDepth * ((1.0 - mBasicScale) /
+				    mMaxDepth));
+
+		tdw->mFtb = cs->cubeCheckOrientation (attrib, transform, output,
+						  vPoints);
+	    }
+	}
+
+	mCurrentScale = mBasicScale;
+	mPainting3D   = true;
+
+	gScreen->setLighting (true);
+
+	screenSpace.reset ();
+	screenSpace.toScreenSpace (output, -attrib.zTranslate);
+
+	glPushMatrix ();
+
+	pl = cScreen->getWindowPaintList ();
+
+	/* paint all windows from bottom to top */
+	for (it = pl.begin (); it != pl.end (); it++)
+	{
+	    CompWindow *w = (*it);
+	    tdw = TdWindow::get (w);
+
+	    if (w->destroyed ())
+		continue;
+
+	    if (!w->shaded () || !w->isViewable ())
+	    {
+		if (!tdw->cWindow->damaged ())
+		    continue;
+	    }
+
+	    mTransform = transform;
+	    newMask = PAINT_WINDOW_ON_TRANSFORMED_SCREEN_MASK;
+
+	    if (tdw->mDepth != 0.0f)
+	    {
+		mCurrentScale = mBasicScale +
+		                    (tdw->mDepth * ((1.0 - mBasicScale) /
+						   mMaxDepth));
+
+		if (wDepth != 0.0)
+		{
+		    mCurrentScale += wDepth;
+		    mBTransform   = transform;
+		    gScreen->glApplyTransform (attrib, output, &mBTransform);
+		    mCurrentScale -= wDepth;
+		}
+
+		gScreen->glApplyTransform (attrib, output, &mTransform);
+
+		gScreen->glEnableOutputClipping (mTransform, region, output);
+
+		if ((cScreen->windowPaintOffset ().x () != 0 ||
+		     cScreen->windowPaintOffset ().y () != 0) &&
+		    !w->onAllViewports ())
+		{
+		    CompPoint moveOffset;
+		    moveOffset = w->getMovementForOffset (
+		    			cScreen->windowPaintOffset ());
+
+		    screenSpaceOffset = screenSpace;
+		    screenSpaceOffset.translate (moveOffset.x (),
+		    				 moveOffset.y (), 0);
+
+		    if (wDepth != 0.0)
+		        mBTransform = mBTransform * screenSpaceOffset;
+		    mTransform = mTransform * screenSpaceOffset;
+
+		    newMask |= PAINT_WINDOW_WITH_OFFSET_MASK;
+		}
+		else
+		{
+		    if (wDepth != 0.0)
+			mBTransform = mBTransform * screenSpace;
+		    mTransform = mTransform * screenSpace;
+		}
+
+		glLoadMatrixf (mTransform.getMatrix ());
+
+		tdw->gWindow->glPaint (tdw->gWindow->paintAttrib (), mTransform,
+				  infiniteRegion, newMask);
+
+		gScreen->glDisableOutputClipping ();
+
+	    }
+	}
+
+	glPopMatrix ();
+
+	mPainting3D   = false;
+	mCurrentScale = mBasicScale;
+
+    }
+
+
+    if (cs->paintOrder () == FTB)
+    {
+        cs->cubePaintViewport (attrib, transform, region, output, mask);
+    }
+}
+
+bool
+TdScreen::cubeShouldPaintAllViewports ()
+{
+    return true;
+}
+
+bool
+TdScreen::cubeShouldPaintViewport (const GLScreenPaintAttrib &attrib,
+				   const GLMatrix	     &transform,
+				   CompOutput		     *outputPtr,
+				   PaintOrder		     order)
+{
+    bool rv = false;
+
+    CUBE_SCREEN (screen);
+
+    rv = cs->cubeShouldPaintViewport (attrib, transform, outputPtr, order);
+
+    if (mActive)
+    {
+	float pointZ = cs->invert () * cs->distance ();
+	bool  ftb1, ftb2;
+
+	std::vector<GLVector> vPoints;
+
+	vPoints.push_back (GLVector (-0.5, 0.0, pointZ, 1.0));
+	vPoints.push_back (GLVector (0.0, 0.5, pointZ, 1.0));
+	vPoints.push_back (GLVector (0.0, 0.0, pointZ, 1.0));
+
+	mCurrentScale = 1.0;
+
+	ftb1 = cs->cubeCheckOrientation (attrib, transform, outputPtr, vPoints);
+
+	mCurrentScale = mBasicScale;
+
+	ftb2 = cs->cubeCheckOrientation (attrib, transform, outputPtr, vPoints);
+
+	return (order == FTB && (ftb1 || ftb2)) ||
+	       (order == BTF && (!ftb1 || !ftb2)) || rv;
+    }
+
+    return true;
+}
+
+bool
+TdScreen::glPaintOutput (const GLScreenPaintAttrib &attrib,
+			 const GLMatrix		   &transform,
+			 const CompRegion	   &region,
+			 CompOutput		   *output,
+			 unsigned int		   mask)
+{
+    bool status;
+
+    if (mActive)
+    {
+	CompPlugin *p;
+
+	mask |= PAINT_SCREEN_TRANSFORMED_MASK |
+	        PAINT_SCREEN_WITH_TRANSFORMED_WINDOWS_MASK |
+		PAINT_SCREEN_NO_OCCLUSION_DETECTION_MASK;
+
+	mWithDepth = true;
+
+	p = CompPlugin::find ("cubeaddon");
+	if (p)
+	{
+	    CompOption::Vector &options = p->vTable->getOptions ();
+	    CompOption option;
+
+	    mWithDepth = (CompOption::getIntOptionNamed
+					      (options, "deformation", 0) == 0);
+	}
+    }
+
+
+    status = gScreen->glPaintOutput (attrib, transform, region, output, mask);
+
+    return status;
+}
+
+void
+TdScreen::donePaint ()
+{
+    if (mActive && mDamage)
+    {
+	mDamage = false;
+	cScreen->damageScreen ();
+    }
+
+    cScreen->donePaint ();
+}
+
+TdScreen::TdScreen (CompScreen *screen) :
+    PluginClassHandler <TdScreen, CompScreen> (screen),
+    cScreen (CompositeScreen::get (screen)),
+    gScreen (GLScreen::get (screen)),
+    cubeScreen (CubeScreen::get (screen)),
+    mActive (false),
+    mPainting3D (false),
+    mCurrentScale (1.0f),
+    mBasicScale (1.0f)
+{
+    CompositeScreenInterface::setHandler (cScreen, false);
+    GLScreenInterface::setHandler (gScreen, false);
+    CubeScreenInterface::setHandler (cubeScreen, false);
+
+    cScreen->preparePaintSetEnabled (this, true);
+}
+
+TdScreen::~TdScreen ()
+{
+}
+
+TdWindow::TdWindow (CompWindow *window) :
+    PluginClassHandler <TdWindow, CompWindow> (window),
+    window (window),
+    cWindow (CompositeWindow::get (window)),
+    gWindow (GLWindow::get (window)),
+    mIs3D (false),
+    mDepth (0.0f)
+{
+    GLWindowInterface::setHandler (gWindow, false);
+}
+
+TdWindow::~TdWindow ()
+{
+}
+
+bool
+TdPluginVTable::init ()
+{
+    if (!CompPlugin::checkPluginABI ("core", CORE_ABIVERSION) ||
+    	!CompPlugin::checkPluginABI ("cube", COMPIZ_CUBE_ABI) ||
+        !CompPlugin::checkPluginABI ("composite", COMPIZ_COMPOSITE_ABI) ||
+        !CompPlugin::checkPluginABI ("opengl", COMPIZ_OPENGL_ABI))
+        return false;
+
+    return true;
+}
diff --git a/3d/src/3d.h b/3d/src/3d.h
new file mode 100644
index 0000000..a0614c5
--- /dev/null
+++ b/3d/src/3d.h
@@ -0,0 +1,156 @@
+/*
+ *
+ * Compiz 3d plugin
+ *
+ * 3d.c
+ *
+ * Copyright : (C) 2006 by Roi Cohen
+ * E-mail    : roico12@gmail.com
+ *
+ * Modified by : Dennis Kasprzyk <onestone@opencompositing.org>
+ *               Danny Baumann <maniac@opencompositing.org>
+ *               Robert Carr <racarr@beryl-project.org>
+ *               Diogo Ferreira <diogo@underdev.org>
+ *		 Kevin Lange <klange@ogunderground.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+/** TODO:
+  1. Add 3d shadows / projections.
+  2. Add an option to select z-order of windows not only by viewports,
+     but also by screens.
+*/
+
+#include <core/core.h>
+#include <core/pluginclasshandler.h>
+
+#include <composite/composite.h>
+#include <opengl/opengl.h>
+
+#include <cube/cube.h>
+
+#include <cmath>
+
+#include "td_options.h"
+
+#define PI 3.14159265359f
+
+class TdScreen :
+    public PluginClassHandler <TdScreen, CompScreen>,
+    public CompositeScreenInterface,
+    public GLScreenInterface,
+    public CubeScreenInterface,
+    public TdOptions
+{
+    public:
+    
+	TdScreen (CompScreen *);
+	~TdScreen ();
+	
+	CompositeScreen *cScreen;
+	GLScreen	*gScreen;
+	CubeScreen	*cubeScreen;
+	
+	void
+	preparePaint (int);
+	
+	bool
+	glPaintOutput (const GLScreenPaintAttrib &,
+		       const GLMatrix		 &,
+		       const CompRegion		 &,
+		       CompOutput		 *,
+		       unsigned int		   );
+	
+	void
+	donePaint ();
+	
+	void
+	glApplyTransform (const GLScreenPaintAttrib &,
+			  CompOutput		    *,
+			  GLMatrix		    *);
+	
+	void
+	cubePaintViewport (const GLScreenPaintAttrib &,
+			   const GLMatrix	     &,
+			   const CompRegion	     &,
+			   CompOutput		     *,
+			   unsigned int			);
+			   
+	bool
+	cubeShouldPaintViewport (const GLScreenPaintAttrib &,
+				 const GLMatrix		   &,
+				 CompOutput		   *,
+				 PaintOrder		    );
+	
+	bool
+	cubeShouldPaintAllViewports ();
+				 
+	bool mActive;
+	bool mPainting3D;
+	float mCurrentScale;
+	float mBasicScale;
+	float mMaxDepth;
+	bool mDamage;
+	
+	bool mWithDepth;
+	
+	GLMatrix mBTransform;
+};
+
+#define TD_SCREEN(s)							       \
+    TdScreen *tds = TdScreen::get (s)
+
+class TdWindow :
+    public PluginClassHandler <TdWindow, CompWindow>,
+    public GLWindowInterface
+{
+    public:
+    
+	TdWindow (CompWindow *);
+	~TdWindow ();
+	
+	CompWindow *window;
+	CompositeWindow *cWindow;
+	GLWindow   *gWindow;
+	
+	bool
+	glPaint (const GLWindowPaintAttrib &,
+		 const GLMatrix		   &,
+		 const CompRegion	   &,
+		 unsigned int		     );


Reply to: