Author: rodo
Date: Fri Feb 15 11:57:09 2008
New Revision: 11592
URL: http://svn.gnome.org/viewvc/ooo-build?rev=11592&view=rev

Log:
2008-02-15  Radek Doulik  <[EMAIL PROTECTED]>

        * 
build/ooh680-m6/slideshow/source/engine/OGLTrans/OGLTrans_TransitionImpl.cxx: 
          impelemented some new transitions, 3D venetian blinds -
          horizontal/vertical, 2D replacements for better peformance
          which was poot on cairo/nvidia drivers - these are Fade Smoothly
          and Shape Diamond - more to come
        * 
build/ooh680-m6/slideshow/source/engine/OGLTrans/OGLTrans_TransitionImpl.cxx: 
          use sharp textures for static slides in some of the transitions
        * 
build/ooh680-m6/slideshow/source/engine/OGLTrans/OGLTrans_TransitionImpl.cxx: 
          imroved the framework, so that we can have prepare method
          in transitions to be called before display (see Shape Diamond
          as an example) and also displaySlides method per transition
          in case we need to do more complex things (see FadeSmoothly as
          an example)
        * 
build/ooh680-m6/slideshow/source/engine/OGLTrans/OGLTrans_TransitionerImpl.cxx:
          check for ATI/fglrx to avoid the bug in their drivers which
          corrupts memory and eats 100% CPU in X server, use it when
          preparing the slides textures
        * 
build/ooh680-m6/slideshow/source/engine/OGLTrans/OGLTrans_TransitionerImpl.cxx:
          make it possible to use non mipmapped textures with nearest
          interpolation to get sharp static slides in some transitions
          (doesn't work on ATI, see above)
        * 
build/ooh680-m6/slideshow/source/engine/OGLTrans/OGLTrans_TransitionerImpl.cxx:
          added new transitions to the factory
        * patches/src680/transogl-transitions-officecfg.diff:
          added new 3D transitions
        * build/ooh680-m6/sd/xml/transitions-ogl: 
          added new 3D transitions



Added:
   trunk/patches/src680/transogl-more-transitions.diff
Modified:
   trunk/ChangeLog
   trunk/patches/src680/apply
   trunk/patches/src680/transogl-transitions-officecfg.diff

Modified: trunk/patches/src680/apply
==============================================================================
--- trunk/patches/src680/apply  (original)
+++ trunk/patches/src680/apply  Fri Feb 15 11:57:09 2008
@@ -1703,6 +1703,7 @@
 transogl-transitions-sd.diff
 transogl-transitions-officecfg.diff
 transogl-transitions-scp2.diff
+transogl-more-transitions.diff
 
 [ Experimental ]
 # sal_uInt32 -> sal_uIntPtr for events on some places

Added: trunk/patches/src680/transogl-more-transitions.diff
==============================================================================
--- (empty file)
+++ trunk/patches/src680/transogl-more-transitions.diff Fri Feb 15 11:57:09 2008
@@ -0,0 +1,660 @@
+diff -rup 
../ooh680-m5.orig/slideshow/source/engine/OGLTrans/OGLTrans_TransitionerImpl.cxx
 slideshow/source/engine/OGLTrans/OGLTrans_TransitionerImpl.cxx
+--- 
../ooh680-m5.orig/slideshow/source/engine/OGLTrans/OGLTrans_TransitionerImpl.cxx
   2008-01-18 14:03:44.000000000 +0100
++++ slideshow/source/engine/OGLTrans/OGLTrans_TransitionerImpl.cxx     
2008-02-11 15:57:57.000000000 +0100
+@@ -146,6 +146,10 @@ private:    
+     /** Our Transition to be used.
+     */    
+     OGLTransitionImpl* pTransition;
++
++    /** whether we are running on ATI fglrx with bug related to textures
++     */
++    bool bBrokenTexturesATI;
+ };
+ 
+ void OGLTransitionerImpl::initWindowFromSlideShowView( const uno::Reference< 
presentation::XSlideShowView >& xView, double, double)
+@@ -271,8 +275,11 @@ void OGLTransitionerImpl::initWindowFrom
+                                  vi,
+                                  0,
+                                  GL_TRUE);
+-
+     glXMakeCurrent( GLWin.dpy, GLWin.win, GLWin.ctx );
++
++    /* TODO: check for version once the bug in fglrx driver is fixed */
++    bBrokenTexturesATI = (strcmp( (const char *) glGetString( GL_VENDOR ), 
"ATI Technologies Inc." ) == 0 );
++
+     glEnable(GL_CULL_FACE);
+     glCullFace(GL_BACK);
+     glClearColor (0, 0, 0, 0);
+@@ -417,28 +417,48 @@ void OGLTransitionerImpl::GLInitSlides()
+     
+     glGenTextures(1, &GLleavingSlide);
+       glBindTexture(GL_TEXTURE_2D, GLleavingSlide);
+-      gluBuild2DMipmaps(GL_TEXTURE_2D, internalFormat , SlideSize.Width, 
SlideSize.Height, Format, GL_UNSIGNED_BYTE, &LeavingBytes[0]);
+-    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
+-      glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
+-      glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
+-      
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR);//TRILINEAR
 FILTERING
+-      GLfloat largest_supported_anisotropy;
+-      glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, 
&largest_supported_anisotropy);
+-      glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 
largest_supported_anisotropy);//anistropic filtering (to make texturing not 
suck when looking at polygons from oblique angles)
+-      
++    if( pTransition && !bBrokenTexturesATI && 
!pTransition->mbUseMipMapLeaving) {
++        glTexImage2D(GL_TEXTURE_2D, 0, internalFormat, SlideSize.Width, 
SlideSize.Height, 0, Format, GL_UNSIGNED_BYTE, &LeavingBytes[0]);
++        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
++        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
++        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
++        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
++    } else {
++        gluBuild2DMipmaps(GL_TEXTURE_2D, internalFormat, SlideSize.Width, 
SlideSize.Height, Format, GL_UNSIGNED_BYTE, &LeavingBytes[0]);
++        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
++        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
++        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
++        
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR); 
//TRILINEAR FILTERING
++
++        //anistropic filtering (to make texturing not suck when looking at 
polygons from oblique angles)
++        GLfloat largest_supported_anisotropy;
++        glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, 
&largest_supported_anisotropy);
++        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 
largest_supported_anisotropy);
++      }
+       OSL_ENSURE(glIsTexture(GLleavingSlide), "Can't generate Leaving slide 
textures in OpenGL");
+       
+       glDeleteTextures(1,&GLenteringSlide);
+       
+       glGenTextures(1, &GLenteringSlide);
+       glBindTexture(GL_TEXTURE_2D, GLenteringSlide);
+-      gluBuild2DMipmaps(GL_TEXTURE_2D, internalFormat , SlideSize.Width, 
SlideSize.Height, Format, GL_UNSIGNED_BYTE, &EnteringBytes[0]);
+-    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
+-      glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
+-      glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
+-      
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR);//TRILINEAR
 FILTERING
+-      glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 
largest_supported_anisotropy);//anistropic filtering (to make texturing not 
suck when looking at polygons from oblique angles)
+-      
++    if( pTransition && !bBrokenTexturesATI && 
!pTransition->mbUseMipMapEntering ) {
++        glTexImage2D(GL_TEXTURE_2D, 0, internalFormat, SlideSize.Width, 
SlideSize.Height, 0, Format, GL_UNSIGNED_BYTE, &EnteringBytes[0]);
++        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
++        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
++        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
++        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
++    } else {
++        gluBuild2DMipmaps(GL_TEXTURE_2D, internalFormat, SlideSize.Width, 
SlideSize.Height, Format, GL_UNSIGNED_BYTE, &EnteringBytes[0]);
++        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
++        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
++        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
++        
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR);//TRILINEAR
 FILTERING
++
++        //anistropic filtering (to make texturing not suck when looking at 
polygons from oblique angles)
++        GLfloat largest_supported_anisotropy;
++        glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, 
&largest_supported_anisotropy);
++        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 
largest_supported_anisotropy);
++      }
+       OSL_ENSURE( glIsTexture(GLenteringSlide), "Can't generate entering 
slide textures in OpenGL" );
+ }
+ 
+@@ -509,26 +529,32 @@ public:
+     // XTransitionFactory
+     virtual ::sal_Bool SAL_CALL hasTransition( ::sal_Int16 transitionType, 
::sal_Int16 transitionSubType ) throw (uno::RuntimeException)
+     {
+-        if( transitionType != animations::TransitionType::MISCSHAPEWIPE )
++        if( transitionType == animations::TransitionType::MISCSHAPEWIPE ) {
++            switch( transitionSubType )
++                {
++                case animations::TransitionSubType::ACROSS:
++                case animations::TransitionSubType::CORNERSOUT:
++                case animations::TransitionSubType::CIRCLE:
++                case animations::TransitionSubType::FANOUTHORIZONTAL:
++                case animations::TransitionSubType::CORNERSIN:  
++                case animations::TransitionSubType::LEFTTORIGHT:
++                case animations::TransitionSubType::TOPTOBOTTOM:
++                case animations::TransitionSubType::TOPRIGHT:
++                case animations::TransitionSubType::TOPLEFT:
++                case animations::TransitionSubType::BOTTOMRIGHT:
++                case animations::TransitionSubType::BOTTOMLEFT:
++                case animations::TransitionSubType::TOPCENTER:
++                    return sal_True;
++
++                default:
++                    return sal_False;
++                }
++        } else if( transitionType == animations::TransitionType::FADE && 
transitionSubType == animations::TransitionSubType::CROSSFADE ) {
++            return sal_True;
++        } else if( transitionType == animations::TransitionType::IRISWIPE && 
transitionSubType == animations::TransitionSubType::DIAMOND ) {
++            return sal_True;
++        } else
+             return sal_False;
+-
+-        switch( transitionSubType )
+-        {
+-            case animations::TransitionSubType::ACROSS:
+-            case animations::TransitionSubType::CORNERSOUT:
+-            case animations::TransitionSubType::CIRCLE:
+-            case animations::TransitionSubType::FANOUTHORIZONTAL:
+-            case animations::TransitionSubType::CORNERSIN:  
+-            case animations::TransitionSubType::LEFTTORIGHT:
+-            case animations::TransitionSubType::TOPTOBOTTOM:
+-            case animations::TransitionSubType::TOPRIGHT:
+-            case animations::TransitionSubType::TOPLEFT:
+-            case animations::TransitionSubType::BOTTOMRIGHT:
+-                return sal_True;
+-
+-            default:
+-                return sal_False;
+-        }
+     }
+ 
+     virtual uno::Reference< presentation::XTransition > SAL_CALL 
createTransition( 
+@@ -539,44 +563,59 @@ public:
+         const uno::Reference< rendering::XBitmap >&           enteringBitmap, 
+         const geometry::RealPoint2D&                          slideOffset ) 
throw (uno::RuntimeException)
+     {
+-        if( transitionType != animations::TransitionType::MISCSHAPEWIPE )
+-            return uno::Reference< presentation::XTransition >();
++        OGLTransitionImpl* pTransition;
+ 
+-        OGLTransitionImpl* pTransition = new OGLTransitionImpl();
+-        switch( transitionSubType )
+-        {
+-            case animations::TransitionSubType::ACROSS:
+-                pTransition->makeNByMTileFlip(8,6);
+-                break;   
+-            case animations::TransitionSubType::CORNERSOUT:
+-                pTransition->makeOutsideCubeFaceToLeft();
+-                break;            
+-            case animations::TransitionSubType::CIRCLE:
+-                pTransition->makeRevolvingCircles(8,128);
+-                break;
+-            case animations::TransitionSubType::FANOUTHORIZONTAL:
+-                pTransition->makeHelix(20);
+-                break;
+-            case animations::TransitionSubType::CORNERSIN:  
+-                pTransition->makeInsideCubeFaceToLeft();
+-                break;
+-            case animations::TransitionSubType::LEFTTORIGHT:
+-                pTransition->makeFallLeaving();
+-                break;
+-            case animations::TransitionSubType::TOPTOBOTTOM:
+-                pTransition->makeTurnAround();
+-                break;
+-            case animations::TransitionSubType::TOPRIGHT:
+-                pTransition->makeTurnDown();
+-                break;
+-            case animations::TransitionSubType::TOPLEFT:
+-                pTransition->makeIris();
+-                break;
+-            case animations::TransitionSubType::BOTTOMRIGHT:
+-                pTransition->makeRochade();
+-                break;
+-            default:
+-                return uno::Reference< presentation::XTransition >();
++        if( transitionType == animations::TransitionType::MISCSHAPEWIPE ) {
++            pTransition = new OGLTransitionImpl();
++            switch( transitionSubType )
++                {
++                case animations::TransitionSubType::ACROSS:
++                    pTransition->makeNByMTileFlip(8,6);
++                    break;   
++                case animations::TransitionSubType::CORNERSOUT:
++                    pTransition->makeOutsideCubeFaceToLeft();
++                    break;            
++                case animations::TransitionSubType::CIRCLE:
++                    pTransition->makeRevolvingCircles(8,128);
++                    break;
++                case animations::TransitionSubType::FANOUTHORIZONTAL:
++                    pTransition->makeHelix(20);
++                    break;
++                case animations::TransitionSubType::CORNERSIN:  
++                    pTransition->makeInsideCubeFaceToLeft();
++                    break;
++                case animations::TransitionSubType::LEFTTORIGHT:
++                    pTransition->makeFallLeaving();
++                    break;
++                case animations::TransitionSubType::TOPTOBOTTOM:
++                    pTransition->makeTurnAround();
++                    break;
++                case animations::TransitionSubType::TOPRIGHT:
++                    pTransition->makeTurnDown();
++                    break;
++                case animations::TransitionSubType::TOPLEFT:
++                    pTransition->makeIris();
++                    break;
++                case animations::TransitionSubType::BOTTOMRIGHT:
++                    pTransition->makeRochade();
++                    break;
++                case animations::TransitionSubType::BOTTOMLEFT:
++                    pTransition->makeVenetianBlinds( true, 8 );
++                    break;
++                case animations::TransitionSubType::TOPCENTER:
++                    pTransition->makeVenetianBlinds( false, 6 );
++                    break;
++                default:
++                    return uno::Reference< presentation::XTransition >();
++                }
++        } else if( transitionType == animations::TransitionType::FADE && 
transitionSubType == animations::TransitionSubType::CROSSFADE ) {
++            pTransition = new OGLTransitionImpl();
++            pTransition->makeFadeSmoothly();
++        } else if( transitionType == animations::TransitionType::IRISWIPE && 
transitionSubType == animations::TransitionSubType::DIAMOND ) {
++            pTransition = new OGLTransitionImpl();
++            pTransition->makeDiamond();
++        } else {
++            return uno::Reference< presentation::XTransition >();
+         }
+ 
+         rtl::Reference<OGLTransitionerImpl> xRes(
+Only in slideshow/source/engine/OGLTrans: 
OGLTrans_TransitionerImpl.cxx.~1.3.2.1.~
+diff -rup 
../ooh680-m5.orig/slideshow/source/engine/OGLTrans/OGLTrans_TransitionImpl.cxx 
slideshow/source/engine/OGLTrans/OGLTrans_TransitionImpl.cxx
+--- 
../ooh680-m5.orig/slideshow/source/engine/OGLTrans/OGLTrans_TransitionImpl.cxx  
   2008-02-11 13:45:46.000000000 +0100
++++ slideshow/source/engine/OGLTrans/OGLTrans_TransitionImpl.cxx       
2008-02-08 15:37:31.000000000 +0100
+@@ -34,6 +34,7 @@
+  ************************************************************************/
+ #include "OGLTrans_TransitionImpl.hxx"
+ #include <GL/gl.h>
++#include <math.h>
+ 
+ void OGLTransitionImpl::clear()
+ {
+@@ -46,7 +47,7 @@ void OGLTransitionImpl::clear()
+         delete maSceneObjects[i];
+     maSceneObjects.clear();
+ 
+-    bReflectSlides = false;
++    mbReflectSlides = false;
+ }
+ 
+ OGLTransitionImpl::~OGLTransitionImpl()
+@@ -73,23 +74,25 @@ static void blendSlide( double depth )
+     double showHeight = -1 + depth*2;
+     GLfloat reflectionColor[] = {0, 0, 0, 0.25};
+ 
++    glDisable( GL_DEPTH_TEST );
+     glBegin( GL_QUADS );
+     glColor4fv( reflectionColor );
+-    glVertex3f( -1.01, -1.01, 0.001 );
++    glVertex3f( -1, -1, 0 );
+     glColor4f( 0, 0, 0, 1 );
+-    glVertex3f(-1.01,  showHeight, 0.001 );
+-    glVertex3f( 1.01,  showHeight, 0.001 );
++    glVertex3f(-1,  showHeight, 0 );
++    glVertex3f( 1,  showHeight, 0 );
+     glColor4fv( reflectionColor );
+-    glVertex3f( 1.01, -1.01, 0.001 );
++    glVertex3f( 1, -1, 0 );
+     glEnd();
+ 
+     glBegin( GL_QUADS );
+     glColor4f( 0, 0, 0, 1 );
+-    glVertex3f( -1.01, showHeight, 0.001 );
+-    glVertex3f( -1.01,  1.01, 0.001 );
+-    glVertex3f(  1.01,  1.01, 0.001 );
+-    glVertex3f(  1.01, showHeight, 0.001 );
++    glVertex3f( -1, showHeight, 0 );
++    glVertex3f( -1,  1, 0 );
++    glVertex3f(  1,  1, 0 );
++    glVertex3f(  1, showHeight, 0 );
+     glEnd();
++    glEnable( GL_DEPTH_TEST );
+ }
+ 
+ void OGLTransitionImpl::display( double nTime, ::sal_Int32 glLeavingSlideTex, 
::sal_Int32 glEnteringSlideTex,
+@@ -100,8 +103,13 @@ void OGLTransitionImpl::display( double 
+     SlideWidthScale = SlideWidth/DispWidth;
+     SlideHeightScale = SlideHeight/DispHeight;
+ 
++    if( mmPrepare ) {
++        clear();
++        (this->*mmPrepare)( nTime, SlideWidth, SlideHeight, DispWidth, 
DispHeight );
++    }
++
+     glPushMatrix();
+-    if ( bReflectSlides ) {
++    if ( mbReflectSlides ) {
+         double reflectionDepth = 0.3;
+         double surfaceLevel = -0.04;
+ 
+@@ -148,18 +156,28 @@ void OGLTransitionImpl::applyOverallOper
+         
OverallOperations[i]->interpolate(nTime,SlideWidthScale,SlideHeightScale);
+ }
+ 
++void OGLTransitionImpl::displaySlide( double nTime, ::sal_Int32 glSlideTex, 
std::vector<Primitive>& primitives,
++                                      double SlideWidthScale, double 
SlideHeightScale )
++{
++   //TODO change to foreach
++    glBindTexture(GL_TEXTURE_2D, glSlideTex);
++
++    for(unsigned int i(0); i < primitives.size(); ++i)
++        primitives[i].display(nTime, SlideWidthScale, SlideHeightScale);
++}
++
+ void OGLTransitionImpl::displaySlides( double nTime, ::sal_Int32 
glLeavingSlideTex, ::sal_Int32 glEnteringSlideTex,
+                                        double SlideWidthScale, double 
SlideHeightScale )
+ {
+-    applyOverallOperations( nTime, SlideWidthScale, SlideHeightScale );
+-    glEnable(GL_TEXTURE_2D);
+-    //TODO change to foreach
+-    glBindTexture(GL_TEXTURE_2D, glLeavingSlideTex);
+-    for(unsigned int i(0); i < maLeavingSlidePrimitives.size(); ++i)
+-        
maLeavingSlidePrimitives[i].display(nTime,SlideWidthScale,SlideHeightScale);
+-    glBindTexture(GL_TEXTURE_2D, glEnteringSlideTex);
+-    for(unsigned int i(0); i < maEnteringSlidePrimitives.size(); ++i)
+-        
maEnteringSlidePrimitives[i].display(nTime,SlideWidthScale,SlideHeightScale);
++    if( mmDisplaySlides )
++        (this->*mmDisplaySlides)( nTime, glLeavingSlideTex, 
glEnteringSlideTex, SlideWidthScale, SlideHeightScale );
++    else {
++        applyOverallOperations( nTime, SlideWidthScale, SlideHeightScale );
++
++        glEnable(GL_TEXTURE_2D);
++        displaySlide( nTime, glLeavingSlideTex, maLeavingSlidePrimitives, 
SlideWidthScale, SlideHeightScale );
++        displaySlide( nTime, glEnteringSlideTex, maEnteringSlidePrimitives, 
SlideWidthScale, SlideHeightScale );
++    }
+ }
+ 
+ void OGLTransitionImpl::displayScene( double nTime, double SlideWidth, double 
SlideHeight, double DispWidth, double DispHeight )
+@@ -300,6 +318,8 @@ void OGLTransitionImpl::makeFallLeaving(
+ 
+     Slide.Operations.push_back(new 
RotateAndScaleDepthByWidth(basegfx::B3DVector(1,0,0),basegfx::B3DVector(0,-1,0),
 90,true,0.0,1.0));
+     maLeavingSlidePrimitives.push_back(Slide);
++
++    mbUseMipMapEntering = false;
+ }
+ 
+ void OGLTransitionImpl::makeTurnAround()
+@@ -307,7 +327,7 @@ void OGLTransitionImpl::makeTurnAround()
+     clear();
+     Primitive Slide;
+ 
+-    bReflectSlides = true;
++    mbReflectSlides = true;
+     
+     
Slide.pushTriangle(basegfx::B2DVector(0,0),basegfx::B2DVector(1,0),basegfx::B2DVector(0,1));
+     
Slide.pushTriangle(basegfx::B2DVector(1,0),basegfx::B2DVector(0,1),basegfx::B2DVector(1,1));
+@@ -334,6 +354,8 @@ void OGLTransitionImpl::makeTurnDown()
+     Slide.Operations.push_back(new SRotate (basegfx::B3DVector(0, 0, 1), 
basegfx::B3DVector(-1, 1, 0), -90, true, 0.0, 1.0));
+     Slide.Operations.push_back(new SRotate (basegfx::B3DVector(0, 0, 1), 
basegfx::B3DVector(-1, 1, 0), 90, false, -1.0, 0.0));
+     maEnteringSlidePrimitives.push_back(Slide);
++
++    mbUseMipMapLeaving = false;
+ }
+ 
+ void OGLTransitionImpl::makeIris()
+@@ -345,8 +367,8 @@ void OGLTransitionImpl::makeIris()
+     Slide.pushTriangle (basegfx::B2DVector (1,0), basegfx::B2DVector (0,1), 
basegfx::B2DVector (1,1));
+     maEnteringSlidePrimitives.push_back (Slide);
+ 
+-    Slide.Operations.push_back (new STranslate (basegfx::B3DVector (0, 0, 
0.0001), false, -1, 0));
+-    Slide.Operations.push_back (new STranslate (basegfx::B3DVector (0, 0, 
-0.0002), false, 0.5, 1));
++    Slide.Operations.push_back (new STranslate (basegfx::B3DVector (0, 0,  
0.000001), false, -1, 0));
++    Slide.Operations.push_back (new STranslate (basegfx::B3DVector (0, 0, 
-0.000002), false, 0.5, 1));
+     maLeavingSlidePrimitives.push_back (Slide);
+ 
+ 
+@@ -399,6 +421,8 @@ void OGLTransitionImpl::makeIris()
+     }
+ 
+     maSceneObjects.push_back (pIris);
++
++    mbUseMipMapLeaving = mbUseMipMapEntering = false;
+ }
+ 
+ void OGLTransitionImpl::makeRochade()
+@@ -406,7 +430,7 @@ void OGLTransitionImpl::makeRochade()
+     clear();
+     Primitive Slide;
+     
+-    bReflectSlides = true;
++    mbReflectSlides = true;
+ 
+     double w, h;
+ 
+@@ -655,6 +679,13 @@ RotateAndScaleDepthByWidth::RotateAndSca
+     bInterpolate = bInter;
+ }
+ 
++RotateAndScaleDepthByHeight::RotateAndScaleDepthByHeight(const 
basegfx::B3DVector& Axis,const basegfx::B3DVector& Origin,double Angle, bool 
bInter, double T0, double T1):axis(Axis),origin(Origin),angle(Angle)
++{
++    nT0 = T0;
++    nT1 = T1;
++    bInterpolate = bInter;
++}
++
+ 
+ STranslate::STranslate(const basegfx::B3DVector& Vector, bool bInter, double 
T0, double T1):vector(Vector)
+ {
+@@ -714,6 +745,18 @@ void RotateAndScaleDepthByWidth::interpo
+     
glTranslated(-SlideWidthScale*origin.getX(),-SlideHeightScale*origin.getY(),-SlideWidthScale*origin.getZ());
+ }
+ 
++void RotateAndScaleDepthByHeight::interpolate(double t,double 
SlideWidthScale,double SlideHeightScale)
++{
++    if(t <= nT0)
++        return;
++    if(!bInterpolate || t > nT1)
++        t = nT1;
++    t = intervalInter(t,nT0,nT1);
++    
glTranslated(SlideWidthScale*origin.getX(),SlideHeightScale*origin.getY(),SlideHeightScale*origin.getZ());
++    glRotated(t*angle,axis.getX(),axis.getY(),axis.getZ());
++    
glTranslated(-SlideWidthScale*origin.getX(),-SlideHeightScale*origin.getY(),-SlideHeightScale*origin.getZ());
++}
++
+ SEllipseTranslate::SEllipseTranslate(double dWidth, double dHeight, double 
dStartPosition, double dEndPosition, bool bInter, double T0, double T1)
+ {
+     nT0 = T0;
+@@ -766,6 +809,11 @@ RotateAndScaleDepthByWidth* RotateAndSca
+     return new RotateAndScaleDepthByWidth(*this);
+ }
+ 
++RotateAndScaleDepthByHeight* RotateAndScaleDepthByHeight::clone()
++{
++    return new RotateAndScaleDepthByHeight(*this);
++}
++
+ const Primitive& Primitive::operator=(const Primitive& rvalue)
+ {
+     for(unsigned int i( 0 ); i < rvalue.Operations.size(); ++i)
+@@ -833,3 +881,108 @@ void Primitive::pushTriangle(const baseg
+     Normals.push_back(basegfx::B3DVector(0,0,1));//all normals always face 
the screen when untransformed.
+     Normals.push_back(basegfx::B3DVector(0,0,1));//all normals always face 
the screen when untransformed.
+ }
++
++void OGLTransitionImpl::makeDiamond()
++{
++    mmPrepare = &OGLTransitionImpl::prepareDiamond;
++    mbUseMipMapLeaving = mbUseMipMapEntering = false;
++}
++
++void OGLTransitionImpl::prepareDiamond( double nTime, double /* SlideWidth 
*/, double /* SlideHeight */, double /* DispWidth */, double /* DispHeight */ )
++{
++    Primitive Slide1, Slide2;
++
++    Slide1.pushTriangle (basegfx::B2DVector (0,0), basegfx::B2DVector (1,0), 
basegfx::B2DVector (0,1));
++    Slide1.pushTriangle (basegfx::B2DVector (1,0), basegfx::B2DVector (0,1), 
basegfx::B2DVector (1,1));
++    maEnteringSlidePrimitives.push_back (Slide1);
++
++    
++    if( nTime >= 0.5 ) {
++        double m = 1 - nTime;
++
++        Slide2.pushTriangle (basegfx::B2DVector (0,0), basegfx::B2DVector 
(m,0), basegfx::B2DVector (0,m));
++        Slide2.pushTriangle (basegfx::B2DVector (nTime,0), basegfx::B2DVector 
(1,0), basegfx::B2DVector (1,m));
++        Slide2.pushTriangle (basegfx::B2DVector (1,nTime), basegfx::B2DVector 
(1,1), basegfx::B2DVector (nTime,1));
++        Slide2.pushTriangle (basegfx::B2DVector (0,nTime), basegfx::B2DVector 
(m,1), basegfx::B2DVector (0,1));
++    } else {
++        double l = 0.5 - nTime;
++        double h = 0.5 + nTime;
++
++        Slide2.pushTriangle (basegfx::B2DVector (0,0), basegfx::B2DVector 
(1,0), basegfx::B2DVector (0.5,l));
++        Slide2.pushTriangle (basegfx::B2DVector (0.5,l), basegfx::B2DVector 
(1,0), basegfx::B2DVector (h,0.5));
++        Slide2.pushTriangle (basegfx::B2DVector (1,0), basegfx::B2DVector 
(1,1), basegfx::B2DVector (h,0.5));
++        Slide2.pushTriangle (basegfx::B2DVector (h,0.5), basegfx::B2DVector 
(1,1), basegfx::B2DVector (0.5,h));
++        Slide2.pushTriangle (basegfx::B2DVector (0.5,h), basegfx::B2DVector 
(1,1), basegfx::B2DVector (0,1));
++        Slide2.pushTriangle (basegfx::B2DVector (l,0.5), basegfx::B2DVector 
(0.5,h), basegfx::B2DVector (0,1));
++        Slide2.pushTriangle (basegfx::B2DVector (0,0), basegfx::B2DVector 
(l,0.5), basegfx::B2DVector (0,1));
++        Slide2.pushTriangle (basegfx::B2DVector (0,0), basegfx::B2DVector 
(0.5,l), basegfx::B2DVector (l,0.5));
++    }
++    Slide2.Operations.push_back (new STranslate (basegfx::B3DVector (0, 0, 
0.00000001), false, -1, 0));
++    maLeavingSlidePrimitives.push_back (Slide2);
++}
++
++void OGLTransitionImpl::makeVenetianBlinds( bool vertical, int parts )
++{
++    static double t30 = tan( M_PI/6.0 );
++    double n, ln = 0;
++    double p = 1.0/parts;
++
++    for( int i=0; i<parts; i++ ) {
++        Primitive Slide;
++        n = (i + 1)/(double)parts;
++        if( vertical ) {
++            Slide.pushTriangle (basegfx::B2DVector (ln,0), basegfx::B2DVector 
(n,0), basegfx::B2DVector (ln,1));
++            Slide.pushTriangle (basegfx::B2DVector (n,0), basegfx::B2DVector 
(ln,1), basegfx::B2DVector (n,1));
++            Slide.Operations.push_back(new 
RotateAndScaleDepthByWidth(basegfx::B3DVector(0, 1, 0), basegfx::B3DVector(n + 
ln - 1, 0, -t30*p), -120, true, 0.0, 1.0));
++        } else {
++            Slide.pushTriangle (basegfx::B2DVector (0,ln), basegfx::B2DVector 
(1,ln), basegfx::B2DVector (0,n));
++            Slide.pushTriangle (basegfx::B2DVector (1,ln), basegfx::B2DVector 
(0,n), basegfx::B2DVector (1,n));
++            Slide.Operations.push_back(new 
RotateAndScaleDepthByHeight(basegfx::B3DVector(1, 0, 0), basegfx::B3DVector(0, 
1 - n - ln, -t30*p), -120, true, 0.0, 1.0));
++        }
++        maLeavingSlidePrimitives.push_back (Slide);
++
++        if( vertical ) {
++            Slide.Operations.push_back(new SRotate(basegfx::B3DVector(0, 1, 
0), basegfx::B3DVector(2*n - 1, 0, 0), -60, false, -1, 0));
++            Slide.Operations.push_back(new SRotate(basegfx::B3DVector(0, 1, 
0), basegfx::B3DVector(n + ln - 1, 0, 0), 180, false, -1, 0));
++        } else {
++            Slide.Operations.push_back(new SRotate(basegfx::B3DVector(1, 0, 
0), basegfx::B3DVector(0, 1 - 2*n, 0), -60, false, -1, 0));
++            Slide.Operations.push_back(new SRotate(basegfx::B3DVector(1, 0, 
0), basegfx::B3DVector(0, 1 - n - ln, 0), 180, false, -1, 0));
++        }
++        maEnteringSlidePrimitives.push_back (Slide);
++        ln = n;
++    }
++}
++
++void OGLTransitionImpl::displaySlidesFadeSmoothly( double nTime, ::sal_Int32 
glLeavingSlideTex, ::sal_Int32 glEnteringSlideTex, double SlideWidthScale, 
double SlideHeightScale )
++{
++    applyOverallOperations( nTime, SlideWidthScale, SlideHeightScale );
++
++    glDisable(GL_DEPTH_TEST);
++
++    displaySlide( nTime, glLeavingSlideTex, maLeavingSlidePrimitives, 
SlideWidthScale, SlideHeightScale );
++
++    glDisable(GL_LIGHTING);
++    glEnable(GL_BLEND);
++    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
++    glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
++    glColor4f( 1, 1, 1, nTime );
++    displaySlide( nTime, glEnteringSlideTex, maEnteringSlidePrimitives, 
SlideWidthScale, SlideHeightScale );
++    glDisable(GL_BLEND);
++    glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
++    glEnable(GL_LIGHTING);
++
++    glEnable(GL_DEPTH_TEST);
++}
++
++void OGLTransitionImpl::makeFadeSmoothly()
++{ 
++    Primitive Slide;
++
++    Slide.pushTriangle (basegfx::B2DVector (0,0), basegfx::B2DVector (1,0), 
basegfx::B2DVector (0,1));
++    Slide.pushTriangle (basegfx::B2DVector (1,0), basegfx::B2DVector (0,1), 
basegfx::B2DVector (1,1));
++    maLeavingSlidePrimitives.push_back (Slide);
++    maEnteringSlidePrimitives.push_back (Slide);
++
++    mmDisplaySlides = &OGLTransitionImpl::displaySlidesFadeSmoothly;
++    mbUseMipMapLeaving = mbUseMipMapEntering = false;
++}
+diff -rup 
../ooh680-m5.orig/slideshow/source/engine/OGLTrans/OGLTrans_TransitionImpl.hxx 
slideshow/source/engine/OGLTrans/OGLTrans_TransitionImpl.hxx
+--- 
../ooh680-m5.orig/slideshow/source/engine/OGLTrans/OGLTrans_TransitionImpl.hxx  
   2008-02-11 13:45:46.000000000 +0100
++++ slideshow/source/engine/OGLTrans/OGLTrans_TransitionImpl.hxx       
2008-02-08 12:27:43.000000000 +0100
+@@ -53,9 +53,14 @@ class OGLTransitionImpl
+ {
+ public:
+     OGLTransitionImpl() :
++        mbUseMipMapLeaving( true ),
++        mbUseMipMapEntering( true ),
+         maLeavingSlidePrimitives(),
+         maEnteringSlidePrimitives(),
+-        maSceneObjects()
++        maSceneObjects(),
++        mbReflectSlides( false ),
++        mmPrepare( NULL ),
++        mmDisplaySlides( NULL )
+     {}
+ 
+     ~OGLTransitionImpl();
+@@ -74,6 +79,17 @@ public:
+     void makeTurnDown();
+     void makeIris();
+     void makeRochade();
++    void makeVenetianBlinds( bool vertical, int parts );
++
++    /** 2D replacements
++     */
++    void makeDiamond();
++    void makeFadeSmoothly();
++
++    /** Whether to use mipmaping for slides textures
++     */
++    bool mbUseMipMapLeaving;
++    bool mbUseMipMapEntering;
+ 
+ private:
+     /** clears all the primitives and operations
+@@ -99,11 +115,27 @@ private:
+     /** Whether to reflect slides, the reflection happens on flat surface 
beneath the slides.
+      ** Now it only works with slides which keep their rectangular shape 
together.
+      */
+-    bool bReflectSlides;
++    bool mbReflectSlides;
++
++    /** When this method is not NULL, it is called in display method to 
prepare the slides, scene, etc.
++     ** We might later replace this by cleaner derived class.
++     */
++    void (OGLTransitionImpl::*mmPrepare)( double nTime, double SlideWidth, 
double SlideHeight, double DispWidth, double DispHeight );
++
++    /** When this method is not NULL, it is called in display method to 
display the slides.
++     ** We might later replace this by cleaner derived class.
++     */
++    void (OGLTransitionImpl::*mmDisplaySlides)( double nTime, ::sal_Int32 
glLeavingSlideTex, ::sal_Int32 glEnteringSlideTex, double SlideWidthScale, 
double SlideHeightScale );
+ 
+     void displaySlides( double nTime, ::sal_Int32 glLeavingSlideTex, 
::sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale 
);
++    void displaySlide( double nTime, ::sal_Int32 glSlideTex, 
std::vector<Primitive>& primitives, double SlideWidthScale, double 
SlideHeightScale );
+     void displayScene( double nTime, double SlideWidth, double SlideHeight, 
double DispWidth, double DispHeight);
+     void applyOverallOperations( double nTime, double SlideWidthScale, double 
SlideHeightScale );
++
++    /** various transitions helper methods
++     */
++    void prepareDiamond( double nTime, double SlideWidth, double SlideHeight, 
double DispWidth, double DispHeight );
++    void displaySlidesFadeSmoothly( double nTime, ::sal_Int32 
glLeavingSlideTex, ::sal_Int32 glEnteringSlideTex, double SlideWidthScale, 
double SlideHeightScale );
+ };
+ 
+ class SceneObject
+@@ -410,5 +442,21 @@ private:
+       double angle;
+ };
+ 
++/** Same as SRotate, except the depth is scaled by the width of the slide 
divided by the height of the window.
++*/
++class RotateAndScaleDepthByHeight: public Operation
++{
++public:
++      void interpolate(double t,double SlideWidthScale,double 
SlideHeightScale);
++    RotateAndScaleDepthByHeight* clone();
++
++      RotateAndScaleDepthByHeight(const basegfx::B3DVector& Axis,const 
basegfx::B3DVector& Origin,double Angle,bool bInter, double T0, double T1);
++      ~RotateAndScaleDepthByHeight(){}
++private:
++      basegfx::B3DVector axis;
++    basegfx::B3DVector origin;
++      double angle;
++};
++
+ #endif // INCLUDED_SLIDESHOW_TRANSITION_HXX_
+ 
+--- sd/xml-orig/transitions-ogl        2008-02-13 09:19:54.000000000 +0100
++++ sd/xml/transitions-ogl     2008-02-15 12:51:49.000000000 +0100
+@@ -30,4 +30,10 @@
+  <anim:par pres:preset-id="rochade">
+   <anim:transitionFilter smil:type="miscShapeWipe" 
smil:subtype="bottomRight"/>
+  </anim:par>
++ <anim:par pres:preset-id="venetian3dv">
++  <anim:transitionFilter smil:type="miscShapeWipe" smil:subtype="bottomLeft"/>
++ </anim:par>
++ <anim:par pres:preset-id="venetian3dh">
++  <anim:transitionFilter smil:type="miscShapeWipe" smil:subtype="topCenter"/>
++ </anim:par>
+  </anim:seq>

Modified: trunk/patches/src680/transogl-transitions-officecfg.diff
==============================================================================
--- trunk/patches/src680/transogl-transitions-officecfg.diff    (original)
+++ trunk/patches/src680/transogl-transitions-officecfg.diff    Fri Feb 15 
11:57:09 2008
@@ -1,7 +1,7 @@
 officecfg/registry/data/org/openoffice/Office/UI/Effects.xcu
 --- officecfg/registry/data/org/openoffice/Office/UI/Effects.xcu       
2007-12-05 15:02:57.000000000 +0100
 +++ officecfg/registry/data/org/openoffice/Office/UI/Effects.xcu       
2007-12-05 16:29:43.000000000 +0100
-@@ -1912,6 +1912,56 @@
+@@ -1912,6 +1912,66 @@
                                        
                                </prop>
                        </node>
@@ -55,6 +55,16 @@
 +          <value xml:lang="en-US">Rochade</value>
 +        </prop>
 +      </node>
++      <node oor:name="venetian3dv" oor:op="replace">
++        <prop oor:name="Label" oor:type="xs:string">
++          <value xml:lang="en-US">Venetian Blinds 3D Vertical</value>
++        </prop>
++      </node>
++      <node oor:name="venetian3dh" oor:op="replace">
++        <prop oor:name="Label" oor:type="xs:string">
++          <value xml:lang="en-US">Venetian Blinds 3D Horizontal</value>
++        </prop>
++      </node>
                </node>
        </node> 
        <node oor:name="Presets">
_______________________________________________
SVN-commits-list mailing list (read only)
http://mail.gnome.org/mailman/listinfo/svn-commits-list

Want to limit the commits to a few modules? Go to above URL, log in to edit 
your options and select the modules ('topics') you want.
Module maintainer? It is possible to set the reply-to to your development 
mailing list. Email [EMAIL PROTECTED] if interested.

Reply via email to