1 diff -rup ../ooo300-m4-orig/offapi/com/sun/star/presentation/XTransitionFactory.idl offapi/com/sun/star/presentation/XTransitionFactory.idl
2 --- ../ooo300-m4-orig/offapi/com/sun/star/presentation/XTransitionFactory.idl 2008-04-11 12:33:10.000000000 +0200
3 +++ offapi/com/sun/star/presentation/XTransitionFactory.idl 2008-09-18 11:49:53.000000000 +0200
4 @@ -85,8 +85,7 @@ interface XTransitionFactory : ::com::su
5 [in] short transitionSubType,
6 [in] XSlideShowView view,
7 [in] com::sun::star::rendering::XBitmap leavingBitmap,
8 - [in] com::sun::star::rendering::XBitmap enteringBitmap,
9 - [in] com::sun::star::geometry::RealPoint2D slideOffset );
10 + [in] com::sun::star::rendering::XBitmap enteringBitmap );
13 service TransitionFactory : XTransitionFactory;
14 diff -rup ../ooo300-m4-orig/offapi/com/sun/star/presentation/XTransition.idl offapi/com/sun/star/presentation/XTransition.idl
15 --- ../ooo300-m4-orig/offapi/com/sun/star/presentation/XTransition.idl 2008-04-11 12:32:51.000000000 +0200
16 +++ offapi/com/sun/star/presentation/XTransition.idl 2008-09-17 14:55:45.000000000 +0200
18 #include <com/sun/star/uno/XInterface.idl>
21 -module com { module sun { module star { module presentation {
22 +module com { module sun { module star {
24 +module rendering { interface XBitmap; };
26 +module presentation {
28 +interface XSlideShowView;
30 /** Transition interface to render custom transitions over time.<p>
33 @@ -49,6 +56,10 @@ interface XTransition : ::com::sun::star
36 void update( [in] double t );
38 + void viewChanged( [in] XSlideShowView view,
39 + [in] com::sun::star::rendering::XBitmap leavingBitmap,
40 + [in] com::sun::star::rendering::XBitmap enteringBitmap );
44 diff -rup ../ooo300-m4-orig/slideshow//source/engine/OGLTrans/OGLTrans_TransitionerImpl.cxx slideshow//source/engine/OGLTrans/OGLTrans_TransitionerImpl.cxx
45 --- ../ooo300-m4-orig/slideshow//source/engine/OGLTrans/OGLTrans_TransitionerImpl.cxx 2008-09-17 12:12:55.000000000 +0200
46 +++ slideshow//source/engine/OGLTrans/OGLTrans_TransitionerImpl.cxx 2008-09-18 11:50:32.000000000 +0200
47 @@ -162,14 +162,22 @@ class OGLTransitionerImpl : private cppu
50 explicit OGLTransitionerImpl(OGLTransitionImpl* pOGLTransition);
51 - bool initWindowFromSlideShowView( const uno::Reference< presentation::XSlideShowView >& xView, double, double);
52 - void setSlides( const uno::Reference< rendering::XBitmap >& xLeavingSlide , const uno::Reference< rendering::XBitmap >& xEnteringSlide );
53 - static bool initialize( const uno::Reference< presentation::XSlideShowView >& xView );
54 + bool initWindowFromSlideShowView( const uno::Reference< presentation::XSlideShowView >& xView );
55 + void setSlides( const Reference< rendering::XBitmap >& xLeavingSlide , const uno::Reference< rendering::XBitmap >& xEnteringSlide );
56 + static bool initialize( const Reference< presentation::XSlideShowView >& xView );
59 - virtual void SAL_CALL update( double nTime ) throw (uno::RuntimeException);
60 + virtual void SAL_CALL update( double nTime )
61 + throw (uno::RuntimeException);
62 + virtual void SAL_CALL viewChanged( const Reference< presentation::XSlideShowView >& rView,
63 + const Reference< rendering::XBitmap >& rLeavingBitmap,
64 + const Reference< rendering::XBitmap >& rEnteringBitmap )
65 + throw (uno::RuntimeException);
68 + void disposeContextAndWindow();
69 + void disposeTextures();
71 // WeakComponentImplHelperBase
72 virtual void SAL_CALL disposing();
74 @@ -236,6 +244,7 @@ private:
76 class SystemChildWindow* pWindow;
78 + Reference< presentation::XSlideShowView > mxView;
79 Reference< rendering::XIntegerBitmap > mxLeavingBitmap;
80 Reference< rendering::XIntegerBitmap > mxEnteringBitmap;
82 @@ -321,7 +330,7 @@ float OGLTransitionerImpl::cnGLVersion;
83 bool OGLTransitionerImpl::cbMesa;
84 bool OGLTransitionerImpl::cbGLXPresent;
86 -bool OGLTransitionerImpl::initialize( const uno::Reference< presentation::XSlideShowView >& xView )
87 +bool OGLTransitionerImpl::initialize( const Reference< presentation::XSlideShowView >& xView )
90 static bool initialized = false;
91 @@ -330,7 +339,7 @@ bool OGLTransitionerImpl::initialize( co
92 OGLTransitionerImpl *instance;
94 instance = new OGLTransitionerImpl( NULL );
95 - if( instance->initWindowFromSlideShowView( xView, 0, 0 ) ) {
96 + if( instance->initWindowFromSlideShowView( xView ) ) {
98 const GLubyte* version = glGetString( GL_VERSION );
99 if( version && version[0] ) {
100 @@ -373,6 +382,8 @@ bool OGLTransitionerImpl::createWindow(
102 GLWin.win = sysData->aWindow;
104 + OSL_TRACE("parent window: %d", GLWin.win);
106 unx::XWindowAttributes xattr;
107 unx::XGetWindowAttributes( GLWin.dpy, GLWin.win, &xattr );
109 @@ -555,15 +566,19 @@ bool OGLTransitionerImpl::createWindow(
113 -bool OGLTransitionerImpl::initWindowFromSlideShowView( const uno::Reference< presentation::XSlideShowView >& xView, double, double)
114 +bool OGLTransitionerImpl::initWindowFromSlideShowView( const Reference< presentation::XSlideShowView >& xView )
116 osl::MutexGuard const guard( m_aMutex );
121 + mxView.set( xView, UNO_QUERY );
125 /// take the XSlideShowView and extract the parent window from it. see viewmediashape.cxx
126 - uno::Reference< rendering::XCanvas > xCanvas(xView->getCanvas(), uno::UNO_QUERY_THROW);
127 + uno::Reference< rendering::XCanvas > xCanvas(mxView->getCanvas(), uno::UNO_QUERY_THROW);
128 uno::Sequence< uno::Any > aDeviceParams;
129 ::canvas::tools::getDeviceInfo( xCanvas, aDeviceParams );
131 @@ -575,7 +590,7 @@ bool OGLTransitionerImpl::initWindowFrom
132 if( !createWindow( reinterpret_cast< Window* >( aVal ) ) )
135 - awt::Rectangle aCanvasArea = xView->getCanvasArea();
136 + awt::Rectangle aCanvasArea = mxView->getCanvasArea();
137 pWindow->SetPosSizePixel(aCanvasArea.X, aCanvasArea.Y, aCanvasArea.Width, aCanvasArea.Height);
138 GLWin.Width = aCanvasArea.Width;
139 GLWin.Height = aCanvasArea.Height;
140 @@ -714,6 +729,10 @@ void OGLTransitionerImpl::setSlides( con
142 SlideRect.Y2 = SlideSize.Height;
144 + OSL_TRACE("leaving bitmap area: %dx%d", SlideSize.Width, SlideSize.Height);
145 + SlideSize = mxEnteringBitmap->getSize();
146 + OSL_TRACE("entering bitmap area: %dx%d", SlideSize.Width, SlideSize.Height);
150 XSync(GLWin.dpy, false);
151 @@ -1145,6 +1164,94 @@ void SAL_CALL OGLTransitionerImpl::updat
155 +void SAL_CALL OGLTransitionerImpl::viewChanged( const Reference< presentation::XSlideShowView >& rView,
156 + const Reference< rendering::XBitmap >& rLeavingBitmap,
157 + const Reference< rendering::XBitmap >& rEnteringBitmap )
158 + throw (uno::RuntimeException)
160 + OSL_TRACE("transitioner: view changed");
163 + disposeContextAndWindow();
165 + initWindowFromSlideShowView( rView );
166 + setSlides( rLeavingBitmap, rEnteringBitmap );
169 +void OGLTransitionerImpl::disposeContextAndWindow()
174 + wglMakeCurrent( GLWin.hDC, 0 ); // kill Device Context
175 + wglDeleteContext( GLWin.hRC ); // Kill Render Context
176 + ReleaseDC( GLWin.hWnd, GLWin.hDC ); // Release Window
178 +#elif defined( UNX )
181 + glXMakeCurrent(GLWin.dpy, None, NULL);
182 + if( glGetError() != GL_NO_ERROR ) {
183 + OSL_TRACE("glError: %s", (char *)gluErrorString(glGetError()));
185 + glXDestroyContext(GLWin.dpy, GLWin.ctx);
196 +void OGLTransitionerImpl::disposeTextures()
199 + wglMakeCurrent(GLWin.hDC,GLWin.hRC);
202 + glXMakeCurrent( GLWin.dpy, GLWin.win, GLWin.ctx );
205 +#if defined( GLX_VERSION_1_3 ) && defined( GLX_EXT_texture_from_pixmap )
206 + unx::PFNGLXRELEASETEXIMAGEEXTPROC myglXReleaseTexImageEXT = (unx::PFNGLXRELEASETEXIMAGEEXTPROC) unx::glXGetProcAddress( (const GLubyte*) "glXReleaseTexImageEXT" );
207 + if( mbUseLeavingPixmap ) {
209 + myglXReleaseTexImageEXT( GLWin.dpy, LeavingPixmap, GLX_FRONT_LEFT_EXT );
210 + glXDestroyGLXPixmap( GLWin.dpy, LeavingPixmap );
212 + if( mbFreeLeavingPixmap ) {
213 + unx::XFreePixmap( GLWin.dpy, maLeavingPixmap );
214 + mbFreeLeavingPixmap = false;
215 + maLeavingPixmap = 0;
218 + if( mbUseEnteringPixmap ) {
219 + myglXReleaseTexImageEXT( GLWin.dpy, EnteringPixmap, GLX_FRONT_LEFT_EXT );
220 + glXDestroyGLXPixmap( GLWin.dpy, EnteringPixmap );
221 + EnteringPixmap = 0;
222 + if( mbFreeEnteringPixmap ) {
223 + unx::XFreePixmap( GLWin.dpy, maEnteringPixmap );
224 + mbFreeEnteringPixmap = false;
225 + maEnteringPixmap = 0;
230 + if( !mbUseLeavingPixmap ) {
231 + glDeleteTextures(1,&GLleavingSlide);
232 + GLleavingSlide = 0;
234 + if( !mbUseEnteringPixmap ) {
235 + glDeleteTextures(1,&GLenteringSlide);
236 + GLleavingSlide = 0;
239 + mbUseLeavingPixmap = false;
240 + mbUseEnteringPixmap = false;
243 // we are about to be disposed (someone call dispose() on us)
244 void OGLTransitionerImpl::disposing()
246 @@ -1165,38 +1272,8 @@ void OGLTransitionerImpl::disposing()
251 - wglMakeCurrent(GLWin.hDC,GLWin.hRC);
254 - glXMakeCurrent( GLWin.dpy, GLWin.win, GLWin.ctx );
257 -#if defined( GLX_VERSION_1_3 ) && defined( GLX_EXT_texture_from_pixmap )
258 - unx::PFNGLXRELEASETEXIMAGEEXTPROC myglXReleaseTexImageEXT = (unx::PFNGLXRELEASETEXIMAGEEXTPROC) unx::glXGetProcAddress( (const GLubyte*) "glXReleaseTexImageEXT" );
259 - if( mbUseLeavingPixmap ) {
261 - myglXReleaseTexImageEXT( GLWin.dpy, LeavingPixmap, GLX_FRONT_LEFT_EXT );
262 - glXDestroyGLXPixmap( GLWin.dpy, LeavingPixmap );
263 - if( mbFreeLeavingPixmap ) {
264 - unx::XFreePixmap( GLWin.dpy, maLeavingPixmap );
265 - mbFreeLeavingPixmap = false;
268 - if( mbUseEnteringPixmap ) {
269 - myglXReleaseTexImageEXT( GLWin.dpy, EnteringPixmap, GLX_FRONT_LEFT_EXT );
270 - glXDestroyGLXPixmap( GLWin.dpy, EnteringPixmap );
271 - if( mbFreeLeavingPixmap ) {
272 - unx::XFreePixmap( GLWin.dpy, maLeavingPixmap );
273 - mbFreeLeavingPixmap = false;
278 - if( !mbUseLeavingPixmap )
279 - glDeleteTextures(1,&GLleavingSlide);
280 - if( !mbUseEnteringPixmap )
281 - glDeleteTextures(1,&GLenteringSlide);
285 pTransition->finish();
286 @@ -1209,25 +1286,7 @@ void OGLTransitionerImpl::disposing()
293 - wglMakeCurrent( GLWin.hDC, 0 ); // kill Device Context
294 - wglDeleteContext( GLWin.hRC ); // Kill Render Context
295 - ReleaseDC( GLWin.hWnd, GLWin.hDC ); // Release Window
297 -#elif defined( UNX )
300 - glXMakeCurrent(GLWin.dpy, None, NULL);
301 - if( glGetError() != GL_NO_ERROR ) {
302 - OSL_TRACE("glError: %s", (char *)gluErrorString(glGetError()));
304 - glXDestroyContext(GLWin.dpy, GLWin.ctx);
309 + disposeContextAndWindow();
313 @@ -1235,6 +1294,7 @@ void OGLTransitionerImpl::disposing()
315 mxLeavingBitmap.clear();
316 mxEnteringBitmap.clear();
320 OGLTransitionerImpl::OGLTransitionerImpl(OGLTransitionImpl* pOGLTransition) :
321 @@ -1243,6 +1303,7 @@ OGLTransitionerImpl::OGLTransitionerImpl
323 GLenteringSlide( 0 ),
328 mbRestoreSync( false ),
329 @@ -1312,8 +1373,8 @@ public:
330 ::sal_Int16 transitionSubType,
331 const uno::Reference< presentation::XSlideShowView >& view,
332 const uno::Reference< rendering::XBitmap >& leavingBitmap,
333 - const uno::Reference< rendering::XBitmap >& enteringBitmap,
334 - const geometry::RealPoint2D& slideOffset ) throw (uno::RuntimeException)
335 + const uno::Reference< rendering::XBitmap >& enteringBitmap )
336 + throw (uno::RuntimeException)
338 if( !hasTransition( transitionType, transitionSubType ) )
339 return uno::Reference< presentation::XTransition >();
340 @@ -1393,7 +1454,7 @@ public:
341 rtl::Reference<OGLTransitionerImpl> xRes(
342 new OGLTransitionerImpl(pTransition) );
344 - if( !xRes->initWindowFromSlideShowView(view,slideOffset.X,slideOffset.Y))
345 + if( !xRes->initWindowFromSlideShowView(view))
346 return uno::Reference< presentation::XTransition >();
347 xRes->setSlides(leavingBitmap,enteringBitmap);
349 diff -rup ../ooo300-m4-orig/slideshow//source/engine/transitions/slidetransitionfactory.cxx slideshow//source/engine/transitions/slidetransitionfactory.cxx
350 --- ../ooo300-m4-orig/slideshow//source/engine/transitions/slidetransitionfactory.cxx 2008-09-17 12:12:55.000000000 +0200
351 +++ slideshow//source/engine/transitions/slidetransitionfactory.cxx 2008-09-18 11:52:08.000000000 +0200
352 @@ -106,6 +106,28 @@ void fillPage( const ::cppcanvas::Canvas
354 class PluginSlideChange: public SlideChangeBase
356 + struct TransitionViewPair {
357 + uno::Reference<presentation::XTransition> mxTransition;
358 + UnoViewSharedPtr mpView;
360 + TransitionViewPair( uno::Reference<presentation::XTransition> xTransition, const UnoViewSharedPtr pView )
362 + mxTransition = xTransition;
366 + ~TransitionViewPair()
368 + mxTransition.clear();
372 + void update( double t )
374 + mxTransition->update( t );
379 /** Create a new SlideChanger, for the given leaving and
380 entering slide bitmaps, which uses super secret OpenGL
381 @@ -128,43 +150,61 @@ public:
386 + mbSuccess( false ),
387 + mnTransitionType( nTransitionType ),
388 + mnTransitionSubType( nTransitionSubType ),
389 + mxFactory( xFactory )
391 // create one transition per view
392 UnoViewVector::const_iterator aCurrView (rViewContainer.begin());
393 const UnoViewVector::const_iterator aEnd(rViewContainer.end());
394 while( aCurrView != aEnd )
396 - const ::basegfx::B2DHomMatrix aViewTransform(
397 - (*aCurrView)->getCanvas()->getTransformation() );
398 - const ::basegfx::B2DPoint aOffsetPixel(
399 - aViewTransform * ::basegfx::B2DPoint() );
401 - uno::Reference<presentation::XTransition> rTransition = xFactory->createTransition(
403 - nTransitionSubType,
404 - (*aCurrView)->getUnoView(),
405 - getLeavingBitmap(ViewEntry(*aCurrView))->getXBitmap(),
406 - getEnteringBitmap(ViewEntry(*aCurrView))->getXBitmap(),
407 - basegfx::unotools::point2DFromB2DPoint(aOffsetPixel) );
409 - if( rTransition.is() )
410 - maTransitions.push_back( rTransition );
413 + addTransition( *aCurrView );
415 - ENSURE_OR_THROW(maTransitions.back().is(),
416 + ENSURE_OR_THROW(maTransitions.back()->mxTransition.is(),
417 "Failed to create plugin transition");
423 + ~PluginSlideChange()
427 + ::std::vector< TransitionViewPair* >::const_iterator aCurrView (maTransitions.begin());
428 + ::std::vector< TransitionViewPair* >::const_iterator aEnd(maTransitions.end());
429 + while( aCurrView != aEnd )
431 + delete (*aCurrView);
434 + maTransitions.clear();
437 + bool addTransition( const UnoViewSharedPtr& rView )
439 + uno::Reference<presentation::XTransition> rTransition = mxFactory->createTransition(
441 + mnTransitionSubType,
442 + rView->getUnoView(),
443 + getLeavingBitmap(ViewEntry(rView))->getXBitmap(),
444 + getEnteringBitmap(ViewEntry(rView))->getXBitmap() );
446 + if( rTransition.is() )
447 + maTransitions.push_back( new TransitionViewPair( rTransition, rView ) );
454 virtual bool operator()( double t )
456 std::for_each(maTransitions.begin(),
458 - boost::bind( &presentation::XTransition::update,
459 + boost::bind( &TransitionViewPair::update,
463 @@ -174,14 +214,100 @@ public:
468 + // ViewEventHandler
469 + virtual void viewAdded( const UnoViewSharedPtr& rView )
471 + OSL_TRACE("PluginSlideChange viewAdded");
472 + SlideChangeBase::viewAdded( rView );
474 + ::std::vector< TransitionViewPair* >::const_iterator aCurrView (maTransitions.begin());
475 + ::std::vector< TransitionViewPair* >::const_iterator aEnd(maTransitions.end());
476 + bool bKnown = false;
477 + while( aCurrView != aEnd )
479 + if( (*aCurrView)->mpView == rView ) {
487 + OSL_TRACE("need to be added");
489 + addTransition( rView );
493 + virtual void viewRemoved( const UnoViewSharedPtr& rView )
495 + OSL_TRACE("PluginSlideChange viewRemoved");
496 + SlideChangeBase::viewRemoved( rView );
498 + ::std::vector< TransitionViewPair* >::iterator aCurrView (maTransitions.begin());
499 + ::std::vector< TransitionViewPair* >::const_iterator aEnd(maTransitions.end());
500 + while( aCurrView != aEnd )
502 + if( (*aCurrView)->mpView == rView ) {
503 + OSL_TRACE( "view removed" );
504 + delete (*aCurrView);
505 + maTransitions.erase( aCurrView );
512 + virtual void viewChanged( const UnoViewSharedPtr& rView )
514 + OSL_TRACE("PluginSlideChange viewChanged");
515 + SlideChangeBase::viewChanged( rView );
517 + ::std::vector< TransitionViewPair* >::const_iterator aCurrView (maTransitions.begin());
518 + ::std::vector< TransitionViewPair* >::const_iterator aEnd(maTransitions.end());
519 + while( aCurrView != aEnd )
521 + if( (*aCurrView)->mpView == rView ) {
522 + OSL_TRACE( "view changed" );
523 + (*aCurrView)->mxTransition->viewChanged( rView->getUnoView(),
524 + getLeavingBitmap(ViewEntry(rView))->getXBitmap(),
525 + getEnteringBitmap(ViewEntry(rView))->getXBitmap() );
527 + OSL_TRACE( "view did not changed" );
533 + virtual void viewsChanged()
535 + OSL_TRACE("PluginSlideChange viewsChanged");
536 + SlideChangeBase::viewsChanged();
538 + ::std::vector< TransitionViewPair* >::const_iterator aCurrView (maTransitions.begin());
539 + ::std::vector< TransitionViewPair* >::const_iterator aEnd(maTransitions.end());
540 + while( aCurrView != aEnd )
542 + OSL_TRACE( "view changed" );
543 + (*aCurrView)->mxTransition->viewChanged( (*aCurrView)->mpView->getUnoView(),
544 + getLeavingBitmap(ViewEntry((*aCurrView)->mpView))->getXBitmap(),
545 + getEnteringBitmap(ViewEntry((*aCurrView)->mpView))->getXBitmap() );
551 // One transition object per view
552 - std::vector< uno::Reference<presentation::XTransition> > maTransitions;
553 + std::vector< TransitionViewPair* > maTransitions;
559 + sal_Int16 mnTransitionType;
560 + sal_Int16 mnTransitionSubType;
562 + uno::Reference<presentation::XTransitionFactory> mxFactory;
565 class ClippedSlideChange : public SlideChangeBase