39 const UnoViewContainer& rViewContainer,
40 ScreenUpdater& rScreenUpdater,
41 EventMultiplexer& rEventMultiplexer,
42 bool bCreateLeavingSprites,
43 bool bCreateEnteringSprites ) :
44 mpSoundPlayer(
std::move( pSoundPlayer )),
46 mrScreenUpdater(rScreenUpdater),
47 maLeavingSlide(
std::move( leavingSlide )),
48 mpEnteringSlide( pEnteringSlide ),
50 mrViewContainer(rViewContainer),
51 mbCreateLeavingSprites(bCreateLeavingSprites),
52 mbCreateEnteringSprites(bCreateEnteringSprites),
53 mbSpritesVisible(false),
59 "SlideChangeBase::SlideChangeBase(): Invalid entering slide!" );
75 std::optional<SlideSharedPtr>(mpEnteringSlide) );
81 const std::optional<SlideSharedPtr>& rSlide )
const
95 auto aSlideSize = mpEnteringSlide->getSlideSize();
109 "SlideChangeBase::createBitmap(): Cannot create page bitmap" );
112 pBitmap->getBitmapCanvas() );
115 "SlideChangeBase::createBitmap(): "
116 "Cannot create page bitmap canvas" );
128 pRet = std::make_shared<SlideBitmap>( pBitmap );
132 pRet = pSlide->getCurrentSlideBitmap( rView );
140 auto aSlideSize = mpEnteringSlide->getSlideSize();
142 return {aSlideSizePixel.getX(), aSlideSizePixel.getY() };
145void SlideChangeBase::renderBitmap(
149 if( !(pSlideBitmap && pCanvas) )
155 pCanvas->getTransformation() );
163 pageOrigin.
getX(), pageOrigin.
getY()));
165 pDevicePixelCanvas->setTransformation( transform );
166 pSlideBitmap->draw( pDevicePixelCanvas );
169void SlideChangeBase::prefetch()
172 if( mbFinished || mbPrefetched )
176 mrEventMultiplexer.addViewHandler( std::dynamic_pointer_cast<ViewEventHandler>(shared_from_this()) );
179 for(
const auto& pView : mrViewContainer )
195 for ( ViewsVecT::const_iterator aCurr( beginViews() ), aEnd( endViews() ); aCurr != aEnd; ++aCurr )
196 prepareForRun( *aCurr, aCurr->mpView->getCanvas() );
201 mpSoundPlayer->startPlayback();
204 mpSoundPlayer.reset();
208void SlideChangeBase::end()
217 ViewsVecT::const_iterator aCurr( beginViews() );
218 const ViewsVecT::const_iterator aEnd( endViews() );
219 while( aCurr != aEnd )
222 aCurr->mpView->clearAll();
226 aCurr->mpView->clearAll();
227 renderBitmap( pSlideBitmap,
228 aCurr->mpView->getCanvas() );
233 catch( uno::Exception& )
239 mrScreenUpdater.notifyUpdate();
244 maLeavingSlide.reset();
245 mpEnteringSlide.reset();
248 mbSpritesVisible =
false;
251 mrEventMultiplexer.removeViewHandler( std::dynamic_pointer_cast<ViewEventHandler>(shared_from_this()) );
254bool SlideChangeBase::operator()(
double nValue )
259 const std::size_t nEntries( maViewData.size() );
260 bool bSpritesVisible( mbSpritesVisible );
262 for( ::std::size_t
i=0;
i<nEntries; ++
i )
273 const ::cppcanvas::CanvasSharedPtr& rCanvas( rViewEntry.
mpView->getCanvas() );
280 const ::basegfx::B2DHomMatrix aViewTransform(
281 rViewEntry.
mpView->getTransformation() );
282 const ::basegfx::B2DPoint aSpritePosPixel(
288 rOutSprite->movePixel( aSpritePosPixel );
290 rInSprite->movePixel( aSpritePosPixel );
292 if( !mbSpritesVisible )
298 const ::cppcanvas::CanvasSharedPtr pOutContentCanvas(
299 rOutSprite->getContentCanvas() );
300 if( pOutContentCanvas)
308 OSL_ASSERT( getLeavingBitmap( rViewEntry ) );
309 if( getLeavingBitmap( rViewEntry ) )
310 getLeavingBitmap( rViewEntry )->draw( pOutContentCanvas );
318 const ::cppcanvas::CanvasSharedPtr pInContentCanvas(
319 rInSprite->getContentCanvas() );
320 if( pInContentCanvas )
328 getEnteringBitmap( rViewEntry )->draw( pInContentCanvas );
334 performOut( rOutSprite, rViewEntry, rCanvas,
nValue );
336 performIn( rInSprite, rViewEntry, rCanvas,
nValue );
339 if( !mbSpritesVisible)
346 bSpritesVisible =
true;
350 mbSpritesVisible = bSpritesVisible;
351 mrScreenUpdater.notifyUpdate();
356void SlideChangeBase::prepareForRun(
362void SlideChangeBase::performIn(
370void SlideChangeBase::performOut(
378double SlideChangeBase::getUnderlyingValue()
const
392 maViewData.emplace_back(rView );
395 getEnteringBitmap( rEntry );
396 getLeavingBitmap( rEntry );
397 addSprites( rEntry );
412 { return rView == rViewEntry.getView(); } ),
423 ViewsVecT::iterator aModifiedEntry(
428 { return rView == rViewEntry.getView(); } ) );
430 OSL_ASSERT( aModifiedEntry != maViewData.end() );
431 if( aModifiedEntry == maViewData.end() )
436 clearViewEntry( *aModifiedEntry );
437 addSprites( *aModifiedEntry );
440void SlideChangeBase::viewsChanged()
446 for(
auto& rView : maViewData )
450 clearViewEntry( rView );
462 pView->createSprite( rSpriteSize,
467 pSprite->setAlpha( 1.0 );
468 if (mbSpritesVisible)
476 if( mbCreateLeavingSprites && maLeavingSlide )
480 getLeavingBitmap( rEntry )->getSize() );
487 if( mbCreateEnteringSprites )
491 const basegfx::B2ISize enteringSlideSizePixel(aSlideSizePixel.getX(), aSlideSizePixel.getY());
499void SlideChangeBase::clearViewEntry(
ViewEntry& rEntry )
static BitmapSharedPtr createBitmap(const CanvasSharedPtr &, const ::basegfx::B2ISize &rSize)
::std::vector< ViewEntry > ViewsVecT
SlideChangeBase(const SlideChangeBase &)=delete
#define ENSURE_OR_THROW(c, m)
B2DHomMatrix createTranslateB2DHomMatrix(double fTranslateX, double fTranslateY)
std::shared_ptr< ::cppcanvas::CustomSprite > CustomSpriteSharedPtr
std::shared_ptr< BitmapCanvas > BitmapCanvasSharedPtr
std::shared_ptr< ::cppcanvas::Bitmap > BitmapSharedPtr
std::shared_ptr< Canvas > CanvasSharedPtr
::std::shared_ptr< AnimatableShape > AnimatableShapeSharedPtr
::std::shared_ptr< SoundPlayer > SoundPlayerSharedPtr
::std::shared_ptr< SlideBitmap > SlideBitmapSharedPtr
::std::shared_ptr< ShapeAttributeLayer > ShapeAttributeLayerSharedPtr
basegfx::B2IVector getSlideSizePixel(const basegfx::B2DVector &rSlideSize, const UnoViewSharedPtr &pView)
void fillRect(const ::cppcanvas::CanvasSharedPtr &rCanvas, const ::basegfx::B2DRectangle &rRect, ::cppcanvas::IntSRGBA aFillColor)
::std::shared_ptr< Slide > SlideSharedPtr
std::shared_ptr< UnoView > UnoViewSharedPtr
EventMultiplexer & mrEventMultiplexer
Info on a per-view basis.
std::shared_ptr< cppcanvas::CustomSprite > mpOutSprite
outgoing slide sprite
UnoViewSharedPtr mpView
The view this entry is for.
std::shared_ptr< cppcanvas::CustomSprite > mpInSprite
incoming slide sprite
SlideBitmapSharedPtr mpLeavingBitmap
outgoing slide bitmap
SlideBitmapSharedPtr mpEnteringBitmap
incoming slide bitmap