LibreOffice Module sd (master) 1
slideshowviewimpl.cxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
20#include "slideshowviewimpl.hxx"
21#include "slideshowimpl.hxx"
22#include <sdpage.hxx>
23
24#include <vcl/svapp.hxx>
25
26#include <com/sun/star/awt/Pointer.hpp>
27#include <com/sun/star/awt/XWindow.hpp>
28#include <com/sun/star/awt/XWindowPeer.hpp>
29#include <com/sun/star/beans/XPropertySet.hpp>
30
35
39
42
43using ::com::sun::star::uno::Reference;
44using ::com::sun::star::uno::WeakReference;
45using ::com::sun::star::uno::Exception;
46
47using namespace ::com::sun::star;
48
49namespace sd
50{
51
52void SlideShowViewMouseListeners::notify( std::unique_lock<std::mutex>& rGuard, const WrappedMouseEvent& rEvent )
53{
54 forEach(rGuard,
55 [&rEvent] (const Reference<css::awt::XMouseListener>& rListener)
56 {
57 switch( rEvent.meType )
58 {
59 case WrappedMouseEvent::PRESSED:
60 rListener->mousePressed( rEvent.maEvent );
61 break;
62
63 case WrappedMouseEvent::RELEASED:
64 rListener->mouseReleased( rEvent.maEvent );
65 break;
66
67 case WrappedMouseEvent::ENTERED:
68 rListener->mouseEntered( rEvent.maEvent );
69 break;
70
71 case WrappedMouseEvent::EXITED:
72 rListener->mouseExited( rEvent.maEvent );
73 break;
74 }
75 });
76}
77
78
79void SlideShowViewMouseMotionListeners::notify( std::unique_lock<std::mutex>& rGuard,const WrappedMouseMotionEvent& rEvent )
80{
81 forEach(rGuard,
82 [&rEvent] (const Reference< awt::XMouseMotionListener >& rListener)
83 {
84 switch( rEvent.meType )
85 {
86 case WrappedMouseMotionEvent::DRAGGED:
87 rListener->mouseDragged( rEvent.maEvent );
88 break;
89
90 case WrappedMouseMotionEvent::MOVED:
91 rListener->mouseMoved( rEvent.maEvent );
92 break;
93 }
94 });
95}
96
97// SlideShowView
99 SdDrawDocument* pDoc,
100 AnimationMode eAnimationMode,
101 SlideshowImpl* pSlideShow,
102 bool bFullScreen )
103: mpCanvas( ::cppcanvas::VCLFactory::createSpriteCanvas( rOutputWindow ) ),
104 mxWindow( VCLUnoHelper::GetInterface( &rOutputWindow ), uno::UNO_SET_THROW ),
105 mxWindowPeer( mxWindow, uno::UNO_QUERY_THROW ),
106 mpSlideShow( pSlideShow ),
107 mrOutputWindow( rOutputWindow ),
108 mpDoc( pDoc ),
109 mbIsMouseMotionListener( false ),
110 meAnimationMode( eAnimationMode ),
111 mbFirstPaint( true ),
112 mbMousePressedEaten( false )
113{
114 mxWindow->addWindowListener( this );
115 mxWindow->addMouseListener( this );
116
117 mxPointer = awt::Pointer::create( ::comphelper::getProcessComponentContext() );
118
120
121 // #i48939# only switch on kind of hacky scroll optimization, when
122 // running fullscreen. this minimizes the probability that other
123 // windows partially cover the show.
124 if( bFullScreen )
125 {
126 try
127 {
128 Reference< beans::XPropertySet > xCanvasProps( getCanvas(),
129 uno::UNO_QUERY_THROW );
130 xCanvasProps->setPropertyValue("UnsafeScrolling",
131 uno::Any( true ) );
132 }
133 catch( uno::Exception& )
134 {
135 }
136 }
137
138 mTranslationOffset.Width = 0;
139 mTranslationOffset.Height = 0;
140}
141
142// Dispose all internal references
143void SlideShowView::disposing(std::unique_lock<std::mutex>& rGuard)
144{
145 mpSlideShow = nullptr;
146
147 // deregister listeners
148 if( mxWindow.is() )
149 {
150 mxWindow->removeWindowListener( this );
151 mxWindow->removeMouseListener( this );
152
154 mxWindow->removeMouseMotionListener( this );
155 }
156
157 mpCanvas.reset();
158 mxWindow.clear();
159
160 // clear all listener containers
161 disposingImpl(rGuard);
162}
163
164// Disposing our broadcaster
165void SAL_CALL SlideShowView::disposing( const lang::EventObject& )
166{
167 std::unique_lock aGuard( m_aMutex );
168
169 disposingImpl(aGuard);
170}
171
172// Disposing our broadcaster
173void SlideShowView::disposingImpl(std::unique_lock<std::mutex>& rGuard)
174{
175 // notify all listeners that _we_ are going down (send a disposing()),
176 // then delete listener containers:
177 lang::EventObject const evt( static_cast<OWeakObject *>(this) );
178 if (!maViewListeners.empty())
179 {
180 auto tmp = std::move(maViewListeners);
181 rGuard.unlock();
182 for( const auto& rxListener : tmp )
183 {
184 Reference< util::XModifyListener > xListener( rxListener );
185 if( xListener.is() )
186 xListener->disposing( evt );
187 }
188 rGuard.lock();
189 }
190 if (maPaintListeners.getLength(rGuard))
191 {
192 maPaintListeners.disposeAndClear( rGuard, evt );
193 rGuard.lock();
194 }
195 if (maMouseListeners.getLength(rGuard))
196 {
197 maMouseListeners.disposeAndClear( rGuard, evt );
198 rGuard.lock();
199 }
201 {
203 rGuard.lock();
204 }
205}
206
207void SlideShowView::paint( const awt::PaintEvent& e )
208{
209 std::unique_lock aGuard( m_aMutex );
210
211 if( mbFirstPaint )
212 {
213 mbFirstPaint = false;
214 SlideshowImpl* pSlideShow = mpSlideShow;
215 aGuard.unlock();
216 if( pSlideShow )
217 pSlideShow->onFirstPaint();
218 }
219 else
220 {
221 // Change event source, to enable listeners to match event
222 // with view
223 awt::PaintEvent aEvent( e );
224 aEvent.Source = static_cast< ::cppu::OWeakObject* >( this );
225 maPaintListeners.notifyEach( aGuard, &css::awt::XPaintListener::windowPaint, aEvent );
226 updateimpl( aGuard, mpSlideShow ); // warning: clears guard!
227 }
228}
229
230// XSlideShowView methods
231Reference< rendering::XSpriteCanvas > SAL_CALL SlideShowView::getCanvas( )
232{
233 std::unique_lock aGuard( m_aMutex );
234
235 return mpCanvas ? mpCanvas->getUNOSpriteCanvas() : Reference< rendering::XSpriteCanvas >();
236}
237
238void SAL_CALL SlideShowView::clear()
239{
240 // paint background in black
241 std::unique_lock aGuard( m_aMutex );
242 SolarMutexGuard aSolarGuard;
243
244 // fill the bounds rectangle in black
245
246 const Size aWindowSize( mrOutputWindow.GetSizePixel() );
247
248 ::basegfx::B2DPolygon aPoly( ::basegfx::utils::createPolygonFromRect(
250 aWindowSize.Width(),
251 aWindowSize.Height() ) ) );
254
255 if( pPolyPoly )
256 {
257 pPolyPoly->setRGBAFillColor( 0x000000FFU );
258 pPolyPoly->draw();
259 }
260}
261
262geometry::IntegerSize2D SAL_CALL SlideShowView::getTranslationOffset( )
263{
264 return mTranslationOffset;
265}
266
267geometry::AffineMatrix2D SAL_CALL SlideShowView::getTransformation( )
268{
269 std::unique_lock aGuard( m_aMutex );
270 SolarMutexGuard aSolarGuard;
271
272 const Size& rTmpSize( mrOutputWindow.GetSizePixel() );
273
274 if (rTmpSize.IsEmpty())
275 {
276 return geometry::AffineMatrix2D (1,0,0,0,1,0);
277 }
278
279 const Size aWindowSize( mrOutputWindow.GetSizePixel() );
280 Size aOutputSize( aWindowSize );
281
283 {
284 aOutputSize.setWidth( static_cast<::tools::Long>( aOutputSize.Width() / 1.03 ) );
285 aOutputSize.setHeight( static_cast<::tools::Long>( aOutputSize.Height() / 1.03 ) );
286 }
287
289 Size aPageSize( pP->GetSize() );
290
291 const double page_ratio = static_cast<double>(aPageSize.Width()) / static_cast<double>(aPageSize.Height());
292 const double output_ratio = static_cast<double>(aOutputSize.Width()) / static_cast<double>(aOutputSize.Height());
293
294 if( page_ratio > output_ratio )
295 {
296 aOutputSize.setHeight( ( aOutputSize.Width() * aPageSize.Height() ) / aPageSize.Width() );
297 }
298 else if( page_ratio < output_ratio )
299 {
300 aOutputSize.setWidth( ( aOutputSize.Height() * aPageSize.Width() ) / aPageSize.Height() );
301 }
302
303 Point aOutputOffset( ( aWindowSize.Width() - aOutputSize.Width() ) >> 1,
304 ( aWindowSize.Height() - aOutputSize.Height() ) >> 1 );
305
306 // Reduce available width by one, as the slides might actually
307 // render one pixel wider and higher as aPageSize below specifies
308 // (when shapes of page size have visible border lines)
309 aOutputSize.AdjustWidth( -1 );
310 aOutputSize.AdjustHeight( -1 );
311
312 // Record mTranslationOffset
313 mTranslationOffset.Height = aOutputOffset.Y();
314 mTranslationOffset.Width = aOutputOffset.X();
315
316 // scale presentation into available window rect (minus 10%); center in the window
318 aOutputSize.Width(), aOutputSize.Height(), aOutputOffset.X(), aOutputOffset.Y()));
319
320 geometry::AffineMatrix2D aRes;
321
322 return ::basegfx::unotools::affineMatrixFromHomMatrix( aRes, aMatrix );
323}
324
325void SAL_CALL SlideShowView::addTransformationChangedListener( const Reference< util::XModifyListener >& xListener )
326{
327 std::unique_lock aGuard( m_aMutex );
328
329 if (m_bDisposed)
330 return;
331 WeakReference< util::XModifyListener > xWeak( xListener );
332 if( std::find( maViewListeners.begin(), maViewListeners.end(), xWeak ) == maViewListeners.end() )
333 maViewListeners.push_back( xWeak );
334}
335
336void SAL_CALL SlideShowView::removeTransformationChangedListener( const Reference< util::XModifyListener >& xListener )
337{
338 std::unique_lock aGuard( m_aMutex );
339
340 if (m_bDisposed)
341 return;
342 WeakReference< util::XModifyListener > xWeak( xListener );
343 auto aIter( std::find( maViewListeners.begin(), maViewListeners.end(), xWeak ) );
344 if( aIter != maViewListeners.end() )
345 maViewListeners.erase( aIter );
346}
347
348void SAL_CALL SlideShowView::addPaintListener( const Reference< awt::XPaintListener >& xListener )
349{
350 std::unique_lock aGuard( m_aMutex );
351
352 if (!m_bDisposed)
353 maPaintListeners.addInterface( aGuard, xListener );
354}
355
356void SAL_CALL SlideShowView::removePaintListener( const Reference< awt::XPaintListener >& xListener )
357{
358 std::unique_lock aGuard( m_aMutex );
359
360 if (!m_bDisposed)
361 maPaintListeners.removeInterface( aGuard, xListener );
362}
363
364void SAL_CALL SlideShowView::addMouseListener( const Reference< awt::XMouseListener >& xListener )
365{
366 std::unique_lock aGuard( m_aMutex );
367
368 if (!m_bDisposed)
369 maMouseListeners.addInterface( aGuard, xListener );
370}
371
372void SAL_CALL SlideShowView::removeMouseListener( const Reference< awt::XMouseListener >& xListener )
373{
374 std::unique_lock aGuard( m_aMutex );
375
376 if (!m_bDisposed)
377 maMouseListeners.removeInterface( aGuard, xListener );
378}
379
380void SAL_CALL SlideShowView::addMouseMotionListener( const Reference< awt::XMouseMotionListener >& xListener )
381{
382 std::unique_lock aGuard( m_aMutex );
383
384 if (m_bDisposed)
385 return;
386
387 if( !mbIsMouseMotionListener && mxWindow.is() )
388 {
389 // delay motion event registration, until we really
390 // need it
392 mxWindow->addMouseMotionListener( this );
393 }
394
395 maMouseMotionListeners.addInterface( aGuard, xListener );
396}
397
398void SAL_CALL SlideShowView::removeMouseMotionListener( const Reference< awt::XMouseMotionListener >& xListener )
399{
400 std::unique_lock aGuard( m_aMutex );
401
402 if (!m_bDisposed)
403 maMouseMotionListeners.removeInterface( aGuard, xListener );
404
405 // TODO(P1): Might be nice to deregister for mouse motion
406 // events, when the last listener is gone.
407}
408
409void SAL_CALL SlideShowView::setMouseCursor( sal_Int16 nPointerShape )
410{
411 std::unique_lock aGuard( m_aMutex );
412
413 // forward to window
414 if( mxPointer.is() )
415 mxPointer->setType( nPointerShape );
416
417 if( mxWindowPeer.is() )
418 mxWindowPeer->setPointer( mxPointer );
419}
420
421awt::Rectangle SAL_CALL SlideShowView::getCanvasArea( )
422{
423 awt::Rectangle aRectangle;
424
425 if( mxWindow.is() )
426 return mxWindow->getPosSize();
427
428 aRectangle.X = aRectangle.Y = aRectangle.Width = aRectangle.Height = 0;
429
430 return aRectangle;
431}
432
433void SlideShowView::updateimpl( std::unique_lock<std::mutex>& rGuard, SlideshowImpl* pSlideShow )
434{
435 if( !pSlideShow )
436 return;
437
438 ::rtl::Reference< SlideshowImpl > xKeepAlive( pSlideShow );
439
440 if( mbFirstPaint )
441 {
442 mbFirstPaint = false;
443 SlideshowImpl* pTmpSlideShow = mpSlideShow;
444 rGuard.unlock();
445 if( pTmpSlideShow )
446 pTmpSlideShow->onFirstPaint();
447 } else
448 rGuard.unlock();
449
450 pSlideShow->startUpdateTimer();
451}
452
453// XWindowListener methods
454void SAL_CALL SlideShowView::windowResized( const awt::WindowEvent& e )
455{
456 std::unique_lock aGuard( m_aMutex );
457
458 if (m_bDisposed)
459 return;
460
461 if (!maViewListeners.empty())
462 {
463 // Change event source, to enable listeners to match event
464 // with view
465 awt::WindowEvent aEvent( e );
466 aEvent.Source = static_cast< ::cppu::OWeakObject* >( this );
467 auto aIter( maViewListeners.begin() );
468 while( aIter != maViewListeners.end() )
469 {
470 Reference< util::XModifyListener > xListener( *aIter );
471 if( xListener.is() )
472 {
473 aGuard.unlock();
474 xListener->modified( aEvent );
475 aGuard.lock();
476 ++aIter;
477 }
478 else
479 {
480 aIter = maViewListeners.erase( aIter );
481 }
482 }
483 }
484
485 updateimpl( aGuard, mpSlideShow ); // warning: clears guard!
486}
487
488void SAL_CALL SlideShowView::windowMoved( const awt::WindowEvent& )
489{
490 // ignored
491}
492
493void SAL_CALL SlideShowView::windowShown( const lang::EventObject& )
494{
495 // ignored
496}
497
498void SAL_CALL SlideShowView::windowHidden( const lang::EventObject& )
499{
500 // ignored
501}
502
503// XMouseListener implementation
504void SAL_CALL SlideShowView::mousePressed( const awt::MouseEvent& e )
505{
506 std::unique_lock aGuard( m_aMutex );
507 if (m_bDisposed)
508 return;
509
511 {
512 mbMousePressedEaten = true;
513 }
514 else
515 {
516 mbMousePressedEaten = false;
517
518 // Change event source, to enable listeners to match event
519 // with view
522 aEvent.maEvent = e;
523 aEvent.maEvent.Source = static_cast< ::cppu::OWeakObject* >( this );
524
525 maMouseListeners.notify( aGuard, aEvent );
526 updateimpl( aGuard, mpSlideShow ); // warning: clears guard!
527 }
528}
529
530void SAL_CALL SlideShowView::mouseReleased( const awt::MouseEvent& e )
531{
532 std::unique_lock aGuard( m_aMutex );
533 if (m_bDisposed)
534 return;
535
537 {
538 // if mouse button down was ignored, also ignore mouse button up
539 mbMousePressedEaten = false;
540 }
541 else if( mpSlideShow && !mpSlideShow->isInputFreezed() )
542 {
543 // Change event source, to enable listeners to match event
544 // with view
547 aEvent.maEvent = e;
548 aEvent.maEvent.Source = static_cast< ::cppu::OWeakObject* >( this );
549
550 maMouseListeners.notify( aGuard, aEvent );
551 updateimpl( aGuard, mpSlideShow ); // warning: clears guard!
552 }
553}
554
555void SAL_CALL SlideShowView::mouseEntered( const awt::MouseEvent& e )
556{
557 std::unique_lock aGuard( m_aMutex );
558 if (m_bDisposed)
559 return;
560
561 // Change event source, to enable listeners to match event
562 // with view
565 aEvent.maEvent = e;
566 aEvent.maEvent.Source = static_cast< ::cppu::OWeakObject* >( this );
567
568 maMouseListeners.notify( aGuard, aEvent );
569 updateimpl( aGuard, mpSlideShow ); // warning: clears guard!
570}
571
572void SAL_CALL SlideShowView::mouseExited( const awt::MouseEvent& e )
573{
574 std::unique_lock aGuard( m_aMutex );
575 if (m_bDisposed)
576 return;
577
578 // Change event source, to enable listeners to match event
579 // with view
582 aEvent.maEvent = e;
583 aEvent.maEvent.Source = static_cast< ::cppu::OWeakObject* >( this );
584
585 maMouseListeners.notify( aGuard, aEvent );
586 updateimpl( aGuard, mpSlideShow ); // warning: clears guard!
587}
588
589// XMouseMotionListener implementation
590void SAL_CALL SlideShowView::mouseDragged( const awt::MouseEvent& e )
591{
592 std::unique_lock aGuard( m_aMutex );
593 if (m_bDisposed)
594 return;
595
596 // Change event source, to enable listeners to match event
597 // with view
600 aEvent.maEvent = e;
601 aEvent.maEvent.Source = static_cast< ::cppu::OWeakObject* >( this );
602
604 updateimpl( aGuard, mpSlideShow ); // warning: clears guard!
605}
606
607void SAL_CALL SlideShowView::mouseMoved( const awt::MouseEvent& e )
608{
609 std::unique_lock aGuard( m_aMutex );
610 if (m_bDisposed)
611 return;
612
613 // Change event source, to enable listeners to match event
614 // with view
617 aEvent.maEvent = e;
618 aEvent.maEvent.Source = static_cast< ::cppu::OWeakObject* >( this );
619
621 updateimpl( aGuard, mpSlideShow ); // warning: clears guard!
622}
623
624} // namespace ::sd
625
626/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
rtl::Reference< PresenterCanvas > mpCanvas
AnyEventRef aEvent
constexpr tools::Long Y() const
constexpr tools::Long X() const
SdPage * GetSdPage(sal_uInt16 nPgNum, PageKind ePgKind) const
Definition: drawdoc2.cxx:207
Size GetSize() const
bool IsEmpty() const
constexpr tools::Long Height() const
tools::Long AdjustHeight(tools::Long n)
void setWidth(tools::Long nWidth)
tools::Long AdjustWidth(tools::Long n)
void setHeight(tools::Long nHeight)
constexpr tools::Long Width() const
void forEach(std::unique_lock< std::mutex > &rGuard, FuncT const &func) const
sal_Int32 addInterface(std::unique_lock< std::mutex > &rGuard, const css::uno::Reference< ListenerT > &rxIFace)
void notifyEach(std::unique_lock< std::mutex > &rGuard, void(SAL_CALL ListenerT::*NotificationMethod)(const EventT &), const EventT &Event) const
void disposeAndClear(::std::unique_lock<::std::mutex > &rGuard, const css::lang::EventObject &rEvt)
sal_Int32 getLength(std::unique_lock< std::mutex > &rGuard) const
sal_Int32 removeInterface(std::unique_lock< std::mutex > &rGuard, const css::uno::Reference< ListenerT > &rxIFace)
static PolyPolygonSharedPtr createPolyPolygon(const CanvasSharedPtr &, const ::basegfx::B2DPolygon &rPoly)
void notify(std::unique_lock< std::mutex > &rGuard, const WrappedMouseEvent &rEvent)
void notify(std::unique_lock< std::mutex > &rGuard, const WrappedMouseMotionEvent &rEvent)
void paint(const css::awt::PaintEvent &e)
virtual void SAL_CALL removeTransformationChangedListener(const css::uno::Reference< css::util::XModifyListener > &xListener) override
virtual css::geometry::IntegerSize2D SAL_CALL getTranslationOffset() override
virtual void SAL_CALL mousePressed(const css::awt::MouseEvent &e) override
css::uno::Reference< css::awt::XWindowPeer > mxWindowPeer
virtual css::awt::Rectangle SAL_CALL getCanvasArea() override
virtual void SAL_CALL removePaintListener(const css::uno::Reference< css::awt::XPaintListener > &xListener) override
virtual void SAL_CALL mouseExited(const css::awt::MouseEvent &e) override
std::vector< css::uno::WeakReference< css::util::XModifyListener > > maViewListeners
virtual void SAL_CALL mouseMoved(const css::awt::MouseEvent &e) override
SlideShowViewMouseListeners maMouseListeners
SlideShowView(ShowWindow &rOutputWindow, SdDrawDocument *pDoc, AnimationMode eAnimationMode, SlideshowImpl *pSlideShow, bool bFullScreen)
virtual void SAL_CALL removeMouseMotionListener(const css::uno::Reference< css::awt::XMouseMotionListener > &xListener) override
SlideShowViewPaintListeners maPaintListeners
virtual void SAL_CALL mouseReleased(const css::awt::MouseEvent &e) override
css::uno::Reference< css::awt::XPointer > mxPointer
::cppcanvas::SpriteCanvasSharedPtr mpCanvas
virtual void SAL_CALL removeMouseListener(const css::uno::Reference< css::awt::XMouseListener > &xListener) override
virtual void SAL_CALL windowMoved(const css::awt::WindowEvent &e) override
virtual css::uno::Reference< css::rendering::XSpriteCanvas > SAL_CALL getCanvas() override
virtual void SAL_CALL addPaintListener(const css::uno::Reference< css::awt::XPaintListener > &xListener) override
virtual void SAL_CALL windowHidden(const css::lang::EventObject &e) override
virtual void SAL_CALL mouseDragged(const css::awt::MouseEvent &e) override
AnimationMode meAnimationMode
virtual void SAL_CALL mouseEntered(const css::awt::MouseEvent &e) override
css::geometry::IntegerSize2D mTranslationOffset
void updateimpl(std::unique_lock< std::mutex > &rGuard, SlideshowImpl *pSlideShow)
virtual void SAL_CALL windowResized(const css::awt::WindowEvent &e) override
virtual void SAL_CALL addMouseMotionListener(const css::uno::Reference< css::awt::XMouseMotionListener > &xListener) override
css::uno::Reference< css::awt::XWindow > mxWindow
virtual void SAL_CALL clear() override
virtual void SAL_CALL addMouseListener(const css::uno::Reference< css::awt::XMouseListener > &xListener) override
virtual void SAL_CALL windowShown(const css::lang::EventObject &e) override
virtual css::geometry::AffineMatrix2D SAL_CALL getTransformation() override
virtual void disposing(std::unique_lock< std::mutex > &) override
Dispose all internal references.
void disposingImpl(std::unique_lock< std::mutex > &)
SlideShowViewMouseMotionListeners maMouseMotionListeners
SdDrawDocument * mpDoc
virtual void SAL_CALL setMouseCursor(sal_Int16 nPointerShape) override
virtual void SAL_CALL addTransformationChangedListener(const css::uno::Reference< css::util::XModifyListener > &xListener) override
SlideshowImpl * mpSlideShow
ShowWindow & mrOutputWindow
void onFirstPaint()
called only by the slideshow view when the first paint event occurs.
void startUpdateTimer()
forces an async call to update in the main thread
bool isInputFreezed() const
virtual Size GetSizePixel() const
B2DHomMatrix createScaleTranslateB2DHomMatrix(double fScaleX, double fScaleY, double fTranslateX, double fTranslateY)
std::shared_ptr< PolyPolygon > PolyPolygonSharedPtr
AnimationMode
Definition: slideshow.hxx:71
@ ANIMATIONMODE_SHOW
Definition: slideshow.hxx:72
long Long