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)
51 mnSlideAspectRatio(28.0 / 21.0)
55 || ! rxAnchorPane.is()
56 || ! rpPresenterController.is())
59 "PresenterSlidePreview can not be constructed due to empty argument",
60 static_cast<XWeak*>(
this));
63 mxWindow = rxAnchorPane->getWindow();
64 mxCanvas = rxAnchorPane->getCanvas();
71 Reference<awt::XWindowPeer> xPeer (
mxWindow, UNO_QUERY);
73 xPeer->setBackground(util::Color(0xff000000));
81 Reference<lang::XMultiComponentFactory>
xFactory = rxContext->getServiceManager();
83 mxPreviewRenderer.set(
84 xFactory->createInstanceWithContext(
85 "com.sun.star.drawing.SlideRenderer",
88 mpBitmaps = std::make_shared<PresenterBitmapContainer>(
89 "PresenterScreenSettings/ScrollBar/Bitmaps",
90 std::shared_ptr<PresenterBitmapContainer>(),
104 mxWindow->removeWindowListener(
this);
105 mxWindow->removePaintListener(
this);
112 xComponent->dispose();
132 ::osl::MutexGuard aGuard (::osl::Mutex::getGlobalMutex());
141 ::osl::MutexGuard aGuard (::osl::Mutex::getGlobalMutex());
153 ::osl::MutexGuard aGuard (::osl::Mutex::getGlobalMutex());
155 Paint(awt::Rectangle(
158 rEvent.UpdateRect.Width,
159 rEvent.UpdateRect.Height));
179 ::osl::MutexGuard aGuard (::osl::Mutex::getGlobalMutex());
210 awt::Rectangle aWindowBox (
mxWindow->getPosSize());
212 bool bCustomAnimation =
false;
213 bool bTransition =
false;
225 awt::Size(aWindowBox.Width, aWindowBox.Height),
231 awt::Rectangle aPreviewBox;
234 const geometry::IntegerSize2D aPreviewSize (
mxPreview->getSize());
235 aPreviewBox = awt::Rectangle(
236 (aWindowBox.Width - aPreviewSize.Width)/2,
237 (aWindowBox.Height - aPreviewSize.Height)/2,
239 aPreviewSize.Height);
247 aPreviewBox = awt::Rectangle(
248 (aWindowBox.Width - aPreviewSize.Width)/2,
249 (aWindowBox.Height - aPreviewSize.Height)/2,
251 aPreviewSize.Height);
260 awt::Rectangle(0,0,aWindowBox.Width,aWindowBox.Height),
264 const rendering::ViewState aViewState(
265 geometry::AffineMatrix2D(1,0,0, 0,1,0),
268 Sequence<double> aBackgroundColor(4);
269 rendering::RenderState aRenderState (
270 geometry::AffineMatrix2D(1, 0, aPreviewBox.X, 0, 1, aPreviewBox.Y),
273 rendering::CompositeOperation::SOURCE);
280 const awt::Rectangle aTransitionPreviewBox(5, aWindowBox.Height-20, 0, 0);
282 Reference<rendering::XBitmap> xTransitionIcon (aTransitionDescriptor->GetNormalBitmap());
283 rendering::RenderState aTransitionRenderState (
284 geometry::AffineMatrix2D(1, 0, aTransitionPreviewBox.X, 0, 1, aTransitionPreviewBox.Y),
287 rendering::CompositeOperation::SOURCE);
288 mxCanvas->drawBitmap(xTransitionIcon, aViewState, aTransitionRenderState);
290 if( bCustomAnimation )
292 const awt::Rectangle aAnimationPreviewBox(5, aWindowBox.Height-40, 0, 0);
294 Reference<rendering::XBitmap> xAnimationIcon (aAnimationDescriptor->GetNormalBitmap());
295 rendering::RenderState aAnimationRenderState (
296 geometry::AffineMatrix2D(1, 0, aAnimationPreviewBox.X, 0, 1, aAnimationPreviewBox.Y),
299 rendering::CompositeOperation::SOURCE);
300 mxCanvas->drawBitmap(xAnimationIcon, aViewState, aAnimationRenderState);
307 Reference<rendering::XPolyPolygon2D> xPolygon (
310 mxCanvas->fillPolyPolygon(xPolygon, aViewState, aRenderState);
314 Reference<rendering::XSpriteCanvas> xSpriteCanvas (
mxCanvas, UNO_QUERY);
315 if (xSpriteCanvas.is())
316 xSpriteCanvas->updateScreen(
false);
323 const awt::Rectangle aWindowBox (
mxWindow->getPosSize());
326 awt::Size(aWindowBox.Width, aWindowBox.Height)));
327 const geometry::IntegerSize2D aPreviewSize (
mxPreview->getSize());
328 if (aNewPreviewSize.Width==aPreviewSize.Width
329 && aNewPreviewSize.Height==aPreviewSize.Height)
342 if (PresenterSlidePreviewInterfaceBase::rBHelper.bDisposed || PresenterSlidePreviewInterfaceBase::rBHelper.bInDispose)
344 throw lang::DisposedException (
345 "PresenterSlidePreview object has already been disposed",
346 static_cast<uno::XWeak*>(
this));
std::shared_ptr< PresenterBitmapContainer > mpBitmaps
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)