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.