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 ®ion,
+ 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 ®ion,
+ 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 ®ion,
+ 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 ®ion,
+ 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: