.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 <ja...@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 : roic...@gmail.com + * + * Modified by : Dennis Kasprzyk <onest...@opencompositing.org> + * Danny Baumann <man...@opencompositing.org> + * Robert Carr <rac...@beryl-project.org> + * Diogo Ferreira <di...@underdev.org> + * Kevin Lange <kla...@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 ); -- To UNSUBSCRIBE, email to debian-x-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/e1qoijd-0004nx...@vasks.debian.org