25 #include <com/sun/star/awt/XWindowPeer.hpp>
26 #include <com/sun/star/rendering/CompositeOperation.hpp>
36 const sal_Int16 gnSuperSampleFactor = 2;
45 const Reference<XResourceId>& rxViewId,
46 const Reference<XPane>& rxAnchorPane,
47 const ::rtl::Reference<PresenterController>& rpPresenterController)
54 mnSlideAspectRatio(28.0 / 21.0),
60 || ! rxAnchorPane.is()
61 || ! rpPresenterController.is())
64 "PresenterSlidePreview can not be constructed due to empty argument",
65 static_cast<XWeak*>(
this));
68 mxWindow = rxAnchorPane->getWindow();
69 mxCanvas = rxAnchorPane->getCanvas();
76 Reference<awt::XWindowPeer> xPeer (
mxWindow, UNO_QUERY);
78 xPeer->setBackground(util::Color(0xff000000));
86 Reference<lang::XMultiComponentFactory>
xFactory = rxContext->getServiceManager();
88 mxPreviewRenderer.set(
89 xFactory->createInstanceWithContext(
90 "com.sun.star.drawing.SlideRenderer",
93 mpBitmaps = std::make_shared<PresenterBitmapContainer>(
94 "PresenterScreenSettings/ScrollBar/Bitmaps",
95 std::shared_ptr<PresenterBitmapContainer>(),
109 mxWindow->removeWindowListener(
this);
110 mxWindow->removePaintListener(
this);
117 xComponent->dispose();
137 ::osl::MutexGuard aGuard (::osl::Mutex::getGlobalMutex());
146 ::osl::MutexGuard aGuard (::osl::Mutex::getGlobalMutex());
158 ::osl::MutexGuard aGuard (::osl::Mutex::getGlobalMutex());
160 Paint(awt::Rectangle(
163 rEvent.UpdateRect.Width,
164 rEvent.UpdateRect.Height));
184 ::osl::MutexGuard aGuard (::osl::Mutex::getGlobalMutex());
215 awt::Rectangle aWindowBox (
mxWindow->getPosSize());
217 bool bCustomAnimation =
false;
218 bool bTransition =
false;
230 awt::Size(aWindowBox.Width, aWindowBox.Height),
236 awt::Rectangle aPreviewBox;
239 const geometry::IntegerSize2D aPreviewSize (
mxPreview->getSize());
240 aPreviewBox = awt::Rectangle(
241 (aWindowBox.Width - aPreviewSize.Width)/2,
242 (aWindowBox.Height - aPreviewSize.Height)/2,
244 aPreviewSize.Height);
252 aPreviewBox = awt::Rectangle(
253 (aWindowBox.Width - aPreviewSize.Width)/2,
254 (aWindowBox.Height - aPreviewSize.Height)/2,
256 aPreviewSize.Height);
265 awt::Rectangle(0,0,aWindowBox.Width,aWindowBox.Height),
269 const rendering::ViewState aViewState(
270 geometry::AffineMatrix2D(1,0,0, 0,1,0),
273 Sequence<double> aBackgroundColor(4);
274 rendering::RenderState aRenderState (
275 geometry::AffineMatrix2D(1, 0, aPreviewBox.X, 0, 1, aPreviewBox.Y),
278 rendering::CompositeOperation::SOURCE);
285 const awt::Rectangle aTransitionPreviewBox(5, aWindowBox.Height-20, 0, 0);
287 Reference<rendering::XBitmap> xTransitionIcon (aTransitionDescriptor->GetNormalBitmap());
288 rendering::RenderState aTransitionRenderState (
289 geometry::AffineMatrix2D(1, 0, aTransitionPreviewBox.X, 0, 1, aTransitionPreviewBox.Y),
292 rendering::CompositeOperation::SOURCE);
293 mxCanvas->drawBitmap(xTransitionIcon, aViewState, aTransitionRenderState);
295 if( bCustomAnimation )
297 const awt::Rectangle aAnimationPreviewBox(5, aWindowBox.Height-40, 0, 0);
299 Reference<rendering::XBitmap> xAnimationIcon (aAnimationDescriptor->GetNormalBitmap());
300 rendering::RenderState aAnimationRenderState (
301 geometry::AffineMatrix2D(1, 0, aAnimationPreviewBox.X, 0, 1, aAnimationPreviewBox.Y),
304 rendering::CompositeOperation::SOURCE);
305 mxCanvas->drawBitmap(xAnimationIcon, aViewState, aAnimationRenderState);
312 Reference<rendering::XPolyPolygon2D> xPolygon (
315 mxCanvas->fillPolyPolygon(xPolygon, aViewState, aRenderState);
319 Reference<rendering::XSpriteCanvas> xSpriteCanvas (
mxCanvas, UNO_QUERY);
320 if (xSpriteCanvas.is())
321 xSpriteCanvas->updateScreen(
false);
328 const awt::Rectangle aWindowBox (
mxWindow->getPosSize());
331 awt::Size(aWindowBox.Width, aWindowBox.Height)));
332 const geometry::IntegerSize2D aPreviewSize (
mxPreview->getSize());
333 if (aNewPreviewSize.Width==aPreviewSize.Width
334 && aNewPreviewSize.Height==aPreviewSize.Height)
347 if (PresenterSlidePreviewInterfaceBase::rBHelper.bDisposed || PresenterSlidePreviewInterfaceBase::rBHelper.bInDispose)
349 throw lang::DisposedException (
350 "PresenterSlidePreview object has already been disposed",
351 static_cast<uno::XWeak*>(
this));
std::shared_ptr< PresenterBitmapContainer > mpBitmaps
Reference< rendering::XCanvas > mxCanvas
css::uno::Reference< css::drawing::framework::XResourceId > mxViewId
css::uno::Reference< css::awt::XWindow > mxWindow
virtual void SAL_CALL disposing() override
static bool HasCustomAnimation(css::uno::Reference< css::drawing::XDrawPage > const &rxPage)
css::uno::Reference< css::rendering::XCanvas > mxCanvas
virtual sal_Bool SAL_CALL isAnchorOnly() override
std::shared_ptr< PresenterBitmapContainer::BitmapDescriptor > SharedBitmapDescriptor
css::uno::Reference< css::drawing::XDrawPage > mxCurrentSlide
The current slide for which a preview is displayed.
virtual void SAL_CALL windowMoved(const css::awt::WindowEvent &rEvent) override
void Resize()
React to a resize of the anchor pane.
virtual css::uno::Reference< css::drawing::XDrawPage > SAL_CALL getCurrentPage() override
virtual void SAL_CALL windowHidden(const css::lang::EventObject &rEvent) override
css::uno::Reference< css::drawing::XSlideRenderer > mxPreviewRenderer
double mnSlideAspectRatio
css::uno::Reference< css::rendering::XBitmap > mxPreview
This Image holds the preview of the current slide.
virtual void SAL_CALL setCurrentPage(const css::uno::Reference< css::drawing::XDrawPage > &rxSlide) override
void SetSlide(const css::uno::Reference< css::drawing::XDrawPage > &rxPage)
Set the given slide as the current slide of the called PresenterSlidePreview object.
static css::uno::Reference< css::rendering::XPolyPolygon2D > CreatePolygon(const css::awt::Rectangle &rBox, const css::uno::Reference< css::rendering::XGraphicDevice > &rxDevice)
::rtl::Reference< PresenterController > mpPresenterController
::cppu::WeakComponentImplHelper< css::drawing::framework::XView, css::drawing::XDrawView, css::awt::XPaintListener, css::awt::XWindowListener > PresenterSlidePreviewInterfaceBase
virtual void SAL_CALL windowResized(const css::awt::WindowEvent &rEvent) override
rtl::Reference< PresenterController > mpPresenterController
virtual void SAL_CALL windowPaint(const css::awt::PaintEvent &rEvent) override
virtual void SAL_CALL windowShown(const css::lang::EventObject &rEvent) override
static void SetDeviceColor(css::rendering::RenderState &rRenderState, const css::util::Color aColor)
virtual css::uno::Reference< css::drawing::framework::XResourceId > SAL_CALL getResourceId() override
PresenterSlidePreview(const css::uno::Reference< css::uno::XComponentContext > &rxContext, const css::uno::Reference< css::drawing::framework::XResourceId > &rxViewId, const css::uno::Reference< css::drawing::framework::XPane > &rxAnchorPane, const ::rtl::Reference< PresenterController > &rpPresenterController)
Reference< XSingleServiceFactory > xFactory
virtual ~PresenterSlidePreview() override
void Paint(const css::awt::Rectangle &rBoundingBox)
Paint the preview of the current slide centered in the window of the anchor pane. ...
static bool HasTransition(css::uno::Reference< css::drawing::XDrawPage > const &rxPage)