ooo-build r11592 - in trunk: . patches/src680



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  <rodo novell com>

	* 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">



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