summaryrefslogtreecommitdiff
path: root/sdext/source/presenter/PresenterSlideShowView.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sdext/source/presenter/PresenterSlideShowView.cxx')
-rw-r--r--sdext/source/presenter/PresenterSlideShowView.cxx1159
1 files changed, 0 insertions, 1159 deletions
diff --git a/sdext/source/presenter/PresenterSlideShowView.cxx b/sdext/source/presenter/PresenterSlideShowView.cxx
deleted file mode 100644
index 00412a7..0000000
--- a/sdext/source/presenter/PresenterSlideShowView.cxx
+++ /dev/null
@@ -1,1159 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_sdext.hxx"
-
-#include "PresenterSlideShowView.hxx"
-
-#include "PresenterCanvasHelper.hxx"
-#include "PresenterGeometryHelper.hxx"
-#include "PresenterHelper.hxx"
-#include "PresenterPaneContainer.hxx"
-#include <com/sun/star/awt/InvalidateStyle.hpp>
-#include <com/sun/star/awt/PosSize.hpp>
-#include <com/sun/star/awt/WindowAttribute.hpp>
-#include <com/sun/star/awt/XWindow.hpp>
-#include <com/sun/star/awt/XWindow2.hpp>
-#include <com/sun/star/awt/XWindowPeer.hpp>
-#include <com/sun/star/beans/XPropertySet.hpp>
-#include <com/sun/star/drawing/CanvasFeature.hpp>
-#include <com/sun/star/drawing/XPresenterHelper.hpp>
-#include <com/sun/star/drawing/framework/XControllerManager.hpp>
-#include <com/sun/star/drawing/framework/XConfigurationController.hpp>
-#include <com/sun/star/rendering/CompositeOperation.hpp>
-#include <com/sun/star/rendering/TextDirection.hpp>
-#include <com/sun/star/rendering/TexturingMode.hpp>
-#include <osl/mutex.hxx>
-
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::drawing::framework;
-using ::rtl::OUString;
-
-#define A2S(pString) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(pString)))
-
-namespace sdext { namespace presenter {
-
-//===== PresenterSlideShowView ================================================
-
-PresenterSlideShowView::PresenterSlideShowView (
- const css::uno::Reference<css::uno::XComponentContext>& rxContext,
- const css::uno::Reference<css::drawing::framework::XResourceId>& rxViewId,
- const css::uno::Reference<css::frame::XController>& rxController,
- const ::rtl::Reference<PresenterController>& rpPresenterController)
- : PresenterSlideShowViewInterfaceBase(m_aMutex),
- mxComponentContext(rxContext),
- mpPresenterController(rpPresenterController),
- mxViewId(rxViewId),
- mxController(rxController),
- mxSlideShowController(PresenterHelper::GetSlideShowController(rxController)),
- mxSlideShow(),
- mxCanvas(),
- mxViewCanvas(),
- mxPointer(),
- mxWindow(),
- mxViewWindow(),
- mxTopPane(),
- mxPresenterHelper(),
- mxBackgroundPolygon1(),
- mxBackgroundPolygon2(),
- mbIsViewAdded(false),
- mnPageAspectRatio(28.0/21.0),
- maBroadcaster(m_aMutex),
- mpBackground(),
- mbIsInModifyNotification(false),
- mbIsForcedPaintPending(false),
- mbIsPaintPending(true),
- msClickToExitPresentationText(),
- msClickToExitPresentationTitle(),
- msTitleTemplate(),
- mbIsEndSlideVisible(false),
- mxCurrentSlide()
-{
- if (mpPresenterController.get() != NULL)
- {
- mnPageAspectRatio = mpPresenterController->GetSlideAspectRatio();
- mpBackground = mpPresenterController->GetViewBackground(mxViewId->getResourceURL());
- }
-}
-
-
-
-void PresenterSlideShowView::LateInit (void)
-{
- mxSlideShow = Reference<presentation::XSlideShow> (
- mxSlideShowController->getSlideShow(), UNO_QUERY_THROW);
- Reference<lang::XComponent> xSlideShowComponent (mxSlideShow, UNO_QUERY);
- if (xSlideShowComponent.is())
- xSlideShowComponent->addEventListener(static_cast<awt::XWindowListener*>(this));
-
- Reference<lang::XMultiComponentFactory> xFactory (
- mxComponentContext->getServiceManager(), UNO_QUERY_THROW);
- mxPresenterHelper.set (xFactory->createInstanceWithContext(
- OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.Draw.PresenterHelper")),
- mxComponentContext),
- UNO_QUERY_THROW);
-
- // Use view id and controller to retrieve window and canvas from
- // configuration controller.
- Reference<XControllerManager> xCM (mxController, UNO_QUERY_THROW);
- Reference<XConfigurationController> xCC (xCM->getConfigurationController());
-
- if (xCC.is())
- {
- mxTopPane.set(xCC->getResource(mxViewId->getAnchor()->getAnchor()), UNO_QUERY);
-
- Reference<XPane> xPane (xCC->getResource(mxViewId->getAnchor()), UNO_QUERY_THROW);
-
- mxWindow = xPane->getWindow();
- mxCanvas = xPane->getCanvas();
-
- if (mxWindow.is())
- {
- mxWindow->addPaintListener(this);
- mxWindow->addWindowListener(this);
- }
-
- // The window does not have to paint a background. We do
- // that ourself.
- Reference<awt::XWindowPeer> xPeer (mxWindow, UNO_QUERY);
- if (xPeer.is())
- xPeer->setBackground(util::Color(0xff000000));
- }
-
- // Create a window for the actual slide show view. It is places
- // centered and with maximal size inside the pane.
- mxViewWindow = CreateViewWindow(mxWindow);
-
- mxViewCanvas = CreateViewCanvas(mxViewWindow);
-
- if (mxViewWindow.is())
- {
- // Register listeners at window.
- mxViewWindow->addPaintListener(this);
- mxViewWindow->addMouseListener(this);
- mxViewWindow->addMouseMotionListener(this);
- }
-
- if (mxViewWindow.is())
- Resize();
-
- if (mxWindow.is())
- mxWindow->setVisible(sal_True);
-
- // Add the new slide show view to the slide show.
- if (mxSlideShow.is() && ! mbIsViewAdded)
- {
- Reference<presentation::XSlideShowView> xView (this);
- mxSlideShow->addView(xView);
- // Prevent embeded sounds being played twice at the same time by
- // disabling sound for the new slide show view.
- beans::PropertyValue aProperty;
- aProperty.Name = A2S("IsSoundEnabled");
- Sequence<Any> aValues (2);
- aValues[0] <<= xView;
- aValues[1] <<= sal_False;
- aProperty.Value <<= aValues;
- mxSlideShow->setProperty(aProperty);
- mbIsViewAdded = true;
- }
-
- // Read text for one past last slide.
- PresenterConfigurationAccess aConfiguration (
- mxComponentContext,
- PresenterConfigurationAccess::msPresenterScreenRootName,
- PresenterConfigurationAccess::READ_ONLY);
- aConfiguration.GetConfigurationNode(
- A2S("Presenter/Views/CurrentSlidePreview/"
- "Strings/ClickToExitPresentationText/String"))
- >>= msClickToExitPresentationText;
- aConfiguration.GetConfigurationNode(
- A2S("Presenter/Views/CurrentSlidePreview/"
- "Strings/ClickToExitPresentationTitle/String"))
- >>= msClickToExitPresentationTitle;
-}
-
-
-
-
-PresenterSlideShowView::~PresenterSlideShowView (void)
-{
-}
-
-
-
-
-void PresenterSlideShowView::disposing (void)
-{
- // Tell all listeners that we are disposed.
- lang::EventObject aEvent;
- aEvent.Source = static_cast<XWeak*>(this);
-
- ::cppu::OInterfaceContainerHelper* pIterator
- = maBroadcaster.getContainer(getCppuType((Reference<lang::XEventListener>*)NULL));
- if (pIterator != NULL)
- pIterator->disposeAndClear(aEvent);
-
- // Do this for
- // XPaintListener, XModifyListener,XMouseListener,XMouseMotionListener,XWindowListener?
-
- if (mxWindow.is())
- {
- mxWindow->removePaintListener(this);
- mxWindow->removeMouseListener(this);
- mxWindow->removeMouseMotionListener(this);
- mxWindow->removeWindowListener(this);
- mxWindow = NULL;
- }
- mxSlideShowController = NULL;
- mxSlideShow = NULL;
- if (mxViewCanvas.is())
- {
- Reference<XComponent> xComponent (mxViewCanvas, UNO_QUERY);
- mxViewCanvas = NULL;
- if (xComponent.is())
- xComponent->dispose();
- }
- if (mxViewWindow.is())
- {
- Reference<XComponent> xComponent (mxViewWindow, UNO_QUERY);
- mxViewWindow = NULL;
- if (xComponent.is())
- xComponent->dispose();
- }
- if (mxPointer.is())
- {
- Reference<XComponent> xComponent (mxPointer, UNO_QUERY);
- mxPointer = NULL;
- if (xComponent.is())
- xComponent->dispose();
- }
- if (mxBackgroundPolygon1.is())
- {
- Reference<XComponent> xComponent (mxBackgroundPolygon1, UNO_QUERY);
- mxBackgroundPolygon1 = NULL;
- if (xComponent.is())
- xComponent->dispose();
- }
- if (mxBackgroundPolygon2.is())
- {
- Reference<XComponent> xComponent (mxBackgroundPolygon2, UNO_QUERY);
- mxBackgroundPolygon2 = NULL;
- if (xComponent.is())
- xComponent->dispose();
- }
-
- mxComponentContext = NULL;
- mpPresenterController = NULL;
- mxViewId = NULL;
- mxController = NULL;
- mxCanvas = NULL;
- mpBackground.reset();
- msClickToExitPresentationText = OUString();
- msClickToExitPresentationTitle = OUString();
- msTitleTemplate = OUString();
- mxCurrentSlide = NULL;
-}
-
-
-
-
-//----- XDrawView -------------------------------------------------------------
-
-void SAL_CALL PresenterSlideShowView::setCurrentPage (
- const css::uno::Reference<css::drawing::XDrawPage>& rxSlide)
- throw (css::uno::RuntimeException)
-{
- mxCurrentSlide = rxSlide;
- if (mpPresenterController.get() != NULL
- && mxSlideShowController.is()
- && ! mpPresenterController->GetCurrentSlide().is()
- && ! mxSlideShowController->isPaused())
- {
- mbIsEndSlideVisible = true;
- Reference<awt::XWindowPeer> xPeer (mxViewWindow, UNO_QUERY);
- if (xPeer.is())
- xPeer->invalidate(awt::InvalidateStyle::NOTRANSPARENT);
-
- // For the end slide we use a special title, without the (n of m)
- // part. Save the title template for the case that the user goes
- // backwards.
- PresenterPaneContainer::SharedPaneDescriptor pDescriptor (
- mpPresenterController->GetPaneContainer()->FindViewURL(mxViewId->getResourceURL()));
- if (pDescriptor.get() != NULL)
- {
- msTitleTemplate = pDescriptor->msTitleTemplate;
- pDescriptor->msTitleTemplate = msClickToExitPresentationTitle;
- mpPresenterController->UpdatePaneTitles();
- }
- }
- else if (mbIsEndSlideVisible)
- {
- mbIsEndSlideVisible = false;
-
- // Restore the title template.
- PresenterPaneContainer::SharedPaneDescriptor pDescriptor (
- mpPresenterController->GetPaneContainer()->FindViewURL(mxViewId->getResourceURL()));
- if (pDescriptor.get() != NULL)
- {
- pDescriptor->msTitleTemplate = msTitleTemplate;
- pDescriptor->msTitle = OUString();
- mpPresenterController->UpdatePaneTitles();
- }
- }
-}
-
-
-
-
-css::uno::Reference<css::drawing::XDrawPage> SAL_CALL PresenterSlideShowView::getCurrentPage (void)
- throw (css::uno::RuntimeException)
-{
- return mxCurrentSlide;
-}
-
-
-
-
-//----- CachablePresenterView -------------------------------------------------
-
-void PresenterSlideShowView::ReleaseView (void)
-{
- if (mxSlideShow.is() && mbIsViewAdded)
- {
- mxSlideShow->removeView(this);
- mbIsViewAdded = false;
- }
-}
-
-
-
-
-//----- XSlideShowView --------------------------------------------------------
-
-Reference<rendering::XSpriteCanvas> SAL_CALL PresenterSlideShowView::getCanvas (void)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
-
- return Reference<rendering::XSpriteCanvas>(mxViewCanvas, UNO_QUERY);
-}
-
-
-
-
-void SAL_CALL PresenterSlideShowView::clear (void)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
- mbIsForcedPaintPending = false;
- mbIsPaintPending = false;
-
- if (mxViewCanvas.is() && mxViewWindow.is())
- {
- // Create a polygon for the window outline.
- awt::Rectangle aViewWindowBox (mxViewWindow->getPosSize());
- Reference<rendering::XPolyPolygon2D> xPolygon (PresenterGeometryHelper::CreatePolygon(
- awt::Rectangle(0,0, aViewWindowBox.Width,aViewWindowBox.Height),
- mxViewCanvas->getDevice()));
-
- rendering::ViewState aViewState (
- geometry::AffineMatrix2D(1,0,0, 0,1,0),
- NULL);
- double aColor[3] = {0,0,0};
- rendering::RenderState aRenderState(
- geometry::AffineMatrix2D(1,0,0, 0,1,0),
- NULL,
- Sequence<double>(aColor,4),
- rendering::CompositeOperation::SOURCE);
- mxViewCanvas->fillPolyPolygon(xPolygon, aViewState, aRenderState);
- }
-}
-
-
-
-
-geometry::AffineMatrix2D SAL_CALL PresenterSlideShowView::getTransformation (void)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
-
- if (mxViewWindow.is())
- {
- // When the mbIsInModifyNotification is set then a slightly modifed
- // version of the transformation is returned in order to get past
- // optimizations the avoid updates when the transformation is
- // unchanged (when the window size changes then due to the constant
- // aspect ratio the size of the preview may remain the same while
- // the position changes. The position, however, is repesented by
- // the position of the view window. This transformation is given
- // relative to the view window and therefore does not contain the
- // position.)
- const awt::Rectangle aWindowBox = mxViewWindow->getPosSize();
- return geometry::AffineMatrix2D(
- aWindowBox.Width-1, 0, (mbIsInModifyNotification ? 1 : 0),
- 0, aWindowBox.Height-1, 0);
- }
- else
- {
- return geometry::AffineMatrix2D(1,0,0, 0,1,0);
- }
-}
-
-
-
-
-void SAL_CALL PresenterSlideShowView::addTransformationChangedListener(
- const Reference<util::XModifyListener>& rxListener)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
- maBroadcaster.addListener(
- getCppuType((Reference<util::XModifyListener>*)NULL),
- rxListener);
-}
-
-
-
-
-void SAL_CALL PresenterSlideShowView::removeTransformationChangedListener(
- const Reference<util::XModifyListener>& rxListener)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
- maBroadcaster.removeListener(
- getCppuType((Reference<util::XModifyListener>*)NULL),
- rxListener);
-}
-
-
-
-
-void SAL_CALL PresenterSlideShowView::addPaintListener(
- const Reference<awt::XPaintListener>& rxListener)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
- maBroadcaster.addListener(
- getCppuType((Reference<awt::XPaintListener>*)NULL),
- rxListener);
-}
-
-
-
-
-void SAL_CALL PresenterSlideShowView::removePaintListener(
- const Reference<awt::XPaintListener>& rxListener)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
- maBroadcaster.removeListener(
- getCppuType((Reference<awt::XPaintListener>*)NULL),
- rxListener);
-}
-
-
-
-
-void SAL_CALL PresenterSlideShowView::addMouseListener(
- const Reference<awt::XMouseListener>& rxListener)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
- maBroadcaster.addListener(
- getCppuType((Reference<awt::XMouseListener>*)NULL),
- rxListener);
-}
-
-
-
-
-void SAL_CALL PresenterSlideShowView::removeMouseListener(
- const Reference<awt::XMouseListener>& rxListener)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
- maBroadcaster.removeListener(
- getCppuType((Reference<awt::XMouseListener>*)NULL),
- rxListener);
-}
-
-
-
-
-void SAL_CALL PresenterSlideShowView::addMouseMotionListener(
- const Reference<awt::XMouseMotionListener>& rxListener)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
- maBroadcaster.addListener(
- getCppuType((Reference<awt::XMouseMotionListener>*)NULL),
- rxListener);
-}
-
-
-
-
-void SAL_CALL PresenterSlideShowView::removeMouseMotionListener(
- const Reference<awt::XMouseMotionListener>& rxListener)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
- maBroadcaster.removeListener(
- getCppuType((Reference<awt::XMouseMotionListener>*)NULL),
- rxListener);
-}
-
-
-
-
-void SAL_CALL PresenterSlideShowView::setMouseCursor(::sal_Int16 nPointerShape)
- throw (RuntimeException)
-{
- ThrowIfDisposed();
-
- // Create a pointer when it does not yet exist.
- if ( ! mxPointer.is())
- {
- Reference<lang::XMultiServiceFactory> xFactory (
- mxComponentContext, UNO_QUERY);
- if (xFactory.is())
- mxPointer = Reference<awt::XPointer>(
- xFactory->createInstance(OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.Pointer"))),
- UNO_QUERY);
- }
-
- // Set the pointer to the given shape and the window(peer) to the
- // pointer.
- Reference<awt::XWindowPeer> xPeer (mxViewWindow, UNO_QUERY);
- if (mxPointer.is() && xPeer.is())
- {
- mxPointer->setType(nPointerShape);
- xPeer->setPointer(mxPointer);
- }
-}
-
-
-
-awt::Rectangle SAL_CALL PresenterSlideShowView::getCanvasArea( ) throw (RuntimeException)
-{
- if( mxViewWindow.is() && mxTopPane.is() )
- return mxPresenterHelper->getWindowExtentsRelative( mxViewWindow, mxTopPane->getWindow() );
-
- awt::Rectangle aRectangle;
-
- aRectangle.X = aRectangle.Y = aRectangle.Width = aRectangle.Height = 0;
-
- return aRectangle;
-}
-
-
-
-//----- lang::XEventListener --------------------------------------------------
-
-void SAL_CALL PresenterSlideShowView::disposing (const lang::EventObject& rEvent)
- throw (RuntimeException)
-{
- if (rEvent.Source == mxViewWindow)
- mxViewWindow = NULL;
- else if (rEvent.Source == mxSlideShow)
- mxSlideShow = NULL;
-}
-
-
-
-
-//----- XPaintListener --------------------------------------------------------
-
-void SAL_CALL PresenterSlideShowView::windowPaint (const awt::PaintEvent& rEvent)
- throw (RuntimeException)
-{
- // Deactivated views must not be painted.
- if ( ! mbIsPresenterViewActive)
- return;
-
- awt::Rectangle aViewWindowBox (mxViewWindow->getPosSize());
- if (aViewWindowBox.Width <= 0 || aViewWindowBox.Height <= 0)
- return;
-
- if (rEvent.Source == mxWindow)
- PaintOuterWindow(rEvent.UpdateRect);
- else if (mbIsEndSlideVisible)
- PaintEndSlide(rEvent.UpdateRect);
- else
- PaintInnerWindow(rEvent);
-}
-
-
-
-
-//----- XMouseListener --------------------------------------------------------
-
-void SAL_CALL PresenterSlideShowView::mousePressed (const awt::MouseEvent& rEvent)
- throw (RuntimeException)
-{
- awt::MouseEvent aEvent (rEvent);
- aEvent.Source = static_cast<XWeak*>(this);
- ::cppu::OInterfaceContainerHelper* pIterator
- = maBroadcaster.getContainer(getCppuType((Reference<awt::XMouseListener>*)NULL));
- if (pIterator != NULL)
- {
- pIterator->notifyEach(&awt::XMouseListener::mousePressed, aEvent);
- }
-
- // Only when the end slide is displayed we forward the mouse event to
- // the PresenterController so that it switches to the next slide and
- // ends the presentation.
- if (mbIsEndSlideVisible)
- if (mpPresenterController.get() != NULL)
- mpPresenterController->HandleMouseClick(rEvent);
-}
-
-
-
-
-void SAL_CALL PresenterSlideShowView::mouseReleased (const awt::MouseEvent& rEvent)
- throw (RuntimeException)
-{
- awt::MouseEvent aEvent (rEvent);
- aEvent.Source = static_cast<XWeak*>(this);
- ::cppu::OInterfaceContainerHelper* pIterator
- = maBroadcaster.getContainer(getCppuType((Reference<awt::XMouseListener>*)NULL));
- if (pIterator != NULL)
- {
- pIterator->notifyEach(&awt::XMouseListener::mouseReleased, aEvent);
- }
-}
-
-
-
-
-void SAL_CALL PresenterSlideShowView::mouseEntered (const awt::MouseEvent& rEvent)
- throw (RuntimeException)
-{
- awt::MouseEvent aEvent (rEvent);
- aEvent.Source = static_cast<XWeak*>(this);
- ::cppu::OInterfaceContainerHelper* pIterator
- = maBroadcaster.getContainer(getCppuType((Reference<awt::XMouseListener>*)NULL));
- if (pIterator != NULL)
- {
- pIterator->notifyEach(&awt::XMouseListener::mouseEntered, aEvent);
- }
-}
-
-
-
-
-void SAL_CALL PresenterSlideShowView::mouseExited (const awt::MouseEvent& rEvent)
- throw (RuntimeException)
-{
- awt::MouseEvent aEvent (rEvent);
- aEvent.Source = static_cast<XWeak*>(this);
- ::cppu::OInterfaceContainerHelper* pIterator
- = maBroadcaster.getContainer(getCppuType((Reference<awt::XMouseListener>*)NULL));
- if (pIterator != NULL)
- {
- pIterator->notifyEach(&awt::XMouseListener::mouseExited, aEvent);
- }
-}
-
-
-
-
-//----- XMouseMotionListener --------------------------------------------------
-
-void SAL_CALL PresenterSlideShowView::mouseDragged (const awt::MouseEvent& rEvent)
- throw (RuntimeException)
-{
- awt::MouseEvent aEvent (rEvent);
- aEvent.Source = static_cast<XWeak*>(this);
- ::cppu::OInterfaceContainerHelper* pIterator
- = maBroadcaster.getContainer(getCppuType((Reference<awt::XMouseMotionListener>*)NULL));
- if (pIterator != NULL)
- {
- pIterator->notifyEach(&awt::XMouseMotionListener::mouseDragged, aEvent);
- }
-}
-
-
-
-
-void SAL_CALL PresenterSlideShowView::mouseMoved (const awt::MouseEvent& rEvent)
- throw (RuntimeException)
-{
- awt::MouseEvent aEvent (rEvent);
- aEvent.Source = static_cast<XWeak*>(this);
- ::cppu::OInterfaceContainerHelper* pIterator
- = maBroadcaster.getContainer(getCppuType((Reference<awt::XMouseMotionListener>*)NULL));
- if (pIterator != NULL)
- {
- pIterator->notifyEach(&awt::XMouseMotionListener::mouseMoved, aEvent);
- }
-}
-
-
-
-
-//----- XWindowListener -------------------------------------------------------
-
-void SAL_CALL PresenterSlideShowView::windowResized (const awt::WindowEvent& rEvent)
- throw (RuntimeException)
-{
- (void)rEvent;
-
- ThrowIfDisposed();
- ::osl::MutexGuard aGuard (::osl::Mutex::getGlobalMutex());
-
- Resize();
-}
-
-
-
-
-
-void SAL_CALL PresenterSlideShowView::windowMoved (const awt::WindowEvent& rEvent)
- throw (RuntimeException)
-{
- (void)rEvent;
- if ( ! mbIsPaintPending)
- mbIsForcedPaintPending = true;
-}
-
-
-
-
-void SAL_CALL PresenterSlideShowView::windowShown (const lang::EventObject& rEvent)
- throw (RuntimeException)
-{
- (void)rEvent;
- Resize();
-}
-
-
-
-
-void SAL_CALL PresenterSlideShowView::windowHidden (const lang::EventObject& rEvent)
- throw (RuntimeException)
-{
- (void)rEvent;
-}
-
-
-
-
-//----- XView -----------------------------------------------------------------
-
-Reference<XResourceId> SAL_CALL PresenterSlideShowView::getResourceId (void)
- throw(RuntimeException)
-{
- return mxViewId;
-}
-
-
-
-
-sal_Bool SAL_CALL PresenterSlideShowView::isAnchorOnly (void)
- throw (RuntimeException)
-{
- return false;
-}
-
-
-
-
-//----- CachablePresenterView -------------------------------------------------
-
-void PresenterSlideShowView::ActivatePresenterView (void)
-{
- if (mxSlideShow.is() && ! mbIsViewAdded)
- {
- mxSlideShow->addView(this);
- mbIsViewAdded = true;
- }
-}
-
-
-
-
-void PresenterSlideShowView::DeactivatePresenterView (void)
-{
- if (mxSlideShow.is() && mbIsViewAdded)
- {
- mxSlideShow->removeView(this);
- mbIsViewAdded = false;
- }
-}
-
-
-
-
-//-----------------------------------------------------------------------------
-
-void PresenterSlideShowView::PaintOuterWindow (const awt::Rectangle& rRepaintBox)
-{
- if ( ! mxCanvas.is())
- return;
-
- if (mpBackground.get() == NULL)
- return;
-
- const rendering::ViewState aViewState(
- geometry::AffineMatrix2D(1,0,0, 0,1,0),
- PresenterGeometryHelper::CreatePolygon(rRepaintBox, mxCanvas->getDevice()));
-
- rendering::RenderState aRenderState (
- geometry::AffineMatrix2D(1,0,0, 0,1,0),
- NULL,
- Sequence<double>(4),
- rendering::CompositeOperation::SOURCE);
-
- Reference<rendering::XBitmap> xBackgroundBitmap (mpBackground->GetNormalBitmap());
- if (xBackgroundBitmap.is())
- {
- Sequence<rendering::Texture> aTextures (1);
- const geometry::IntegerSize2D aBitmapSize(xBackgroundBitmap->getSize());
- aTextures[0] = rendering::Texture (
- geometry::AffineMatrix2D(
- aBitmapSize.Width,0,0,
- 0,aBitmapSize.Height,0),
- 1,
- 0,
- xBackgroundBitmap,
- NULL,
- NULL,
- rendering::StrokeAttributes(),
- rendering::TexturingMode::REPEAT,
- rendering::TexturingMode::REPEAT);
-
- if (mxBackgroundPolygon1.is())
- mxCanvas->fillTexturedPolyPolygon(
- mxBackgroundPolygon1,
- aViewState,
- aRenderState,
- aTextures);
- if (mxBackgroundPolygon2.is())
- mxCanvas->fillTexturedPolyPolygon(
- mxBackgroundPolygon2,
- aViewState,
- aRenderState,
- aTextures);
- }
- else
- {
- PresenterCanvasHelper::SetDeviceColor(aRenderState, mpBackground->maReplacementColor);
-
- if (mxBackgroundPolygon1.is())
- mxCanvas->fillPolyPolygon(mxBackgroundPolygon1, aViewState, aRenderState);
- if (mxBackgroundPolygon2.is())
- mxCanvas->fillPolyPolygon(mxBackgroundPolygon2, aViewState, aRenderState);
- }
-}
-
-
-
-
-void PresenterSlideShowView::PaintEndSlide (const awt::Rectangle& rRepaintBox)
-{
- if ( ! mxCanvas.is())
- return;
-
- const rendering::ViewState aViewState(
- geometry::AffineMatrix2D(1,0,0, 0,1,0),
- PresenterGeometryHelper::CreatePolygon(rRepaintBox, mxCanvas->getDevice()));
-
- rendering::RenderState aRenderState (
- geometry::AffineMatrix2D(1,0,0, 0,1,0),
- NULL,
- Sequence<double>(4),
- rendering::CompositeOperation::SOURCE);
- PresenterCanvasHelper::SetDeviceColor(aRenderState, util::Color(0x00000000));
- mxCanvas->fillPolyPolygon(
- PresenterGeometryHelper::CreatePolygon(mxViewWindow->getPosSize(), mxCanvas->getDevice()),
- aViewState,
- aRenderState);
-
- do
- {
- if (mpPresenterController.get() == NULL)
- break;
- ::boost::shared_ptr<PresenterTheme> pTheme (mpPresenterController->GetTheme());
- if (pTheme.get() == NULL)
- break;
-
- const OUString sViewStyle (pTheme->GetStyleName(mxViewId->getResourceURL()));
- PresenterTheme::SharedFontDescriptor pFont (pTheme->GetFont(sViewStyle));
- if (pFont.get() == NULL)
- break;
-
- PresenterCanvasHelper::SetDeviceColor(aRenderState, util::Color(0x00ffffff));
- aRenderState.AffineTransform.m02 = 20;
- aRenderState.AffineTransform.m12 = 40;
- const rendering::StringContext aContext (
- msClickToExitPresentationText, 0, msClickToExitPresentationText.getLength());
- pFont->PrepareFont(mxCanvas);
- mxCanvas->drawText(
- aContext,
- pFont->mxFont,
- aViewState,
- aRenderState,
- rendering::TextDirection::WEAK_LEFT_TO_RIGHT);
- }
- while (false);
-
- // Finally, in double buffered environments, request the changes to be
- // made visible.
- Reference<rendering::XSpriteCanvas> mxSpriteCanvas (mxCanvas, UNO_QUERY);
- if (mxSpriteCanvas.is())
- mxSpriteCanvas->updateScreen(sal_True);
-}
-
-
-
-
-void PresenterSlideShowView::PaintInnerWindow (const awt::PaintEvent& rEvent)
-{
- // Forward window paint to listeners.
- awt::PaintEvent aEvent (rEvent);
- aEvent.Source = static_cast<XWeak*>(this);
- ::cppu::OInterfaceContainerHelper* pIterator
- = maBroadcaster.getContainer(getCppuType((Reference<awt::XPaintListener>*)NULL));
- if (pIterator != NULL)
- {
- pIterator->notifyEach(&awt::XPaintListener::windowPaint, aEvent);
- }
-
- if (mbIsForcedPaintPending)
- ForceRepaint();
-
- // Finally, in double buffered environments, request the changes to be
- // made visible.
- Reference<rendering::XSpriteCanvas> mxSpriteCanvas (mxCanvas, UNO_QUERY);
- if (mxSpriteCanvas.is())
- mxSpriteCanvas->updateScreen(sal_True);
-}
-
-
-
-
-Reference<awt::XWindow> PresenterSlideShowView::CreateViewWindow (
- const Reference<awt::XWindow>& rxParentWindow) const
-{
- Reference<awt::XWindow> xViewWindow;
- try
- {
- Reference<lang::XMultiComponentFactory> xFactory (mxComponentContext->getServiceManager());
- if ( ! xFactory.is())
- return xViewWindow;
-
- Reference<awt::XToolkit> xToolkit (
- xFactory->createInstanceWithContext(
- OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.Toolkit")),
- mxComponentContext),
- UNO_QUERY_THROW);
- awt::WindowDescriptor aWindowDescriptor (
- awt::WindowClass_CONTAINER,
- OUString(),
- Reference<awt::XWindowPeer>(rxParentWindow,UNO_QUERY_THROW),
- -1, // parent index not available
- awt::Rectangle(0,0,10,10),
- awt::WindowAttribute::SIZEABLE
- | awt::WindowAttribute::MOVEABLE
- | awt::WindowAttribute::NODECORATION);
- xViewWindow = Reference<awt::XWindow>(
- xToolkit->createWindow(aWindowDescriptor),UNO_QUERY_THROW);
-
- // Make the background transparent. The slide show paints its own background.
- Reference<awt::XWindowPeer> xPeer (xViewWindow, UNO_QUERY_THROW);
- if (xPeer.is())
- {
- xPeer->setBackground(0xff000000);
- }
-
- xViewWindow->setVisible(sal_True);
- }
- catch (RuntimeException&)
- {
- }
- return xViewWindow;
-}
-
-
-
-
-Reference<rendering::XCanvas> PresenterSlideShowView::CreateViewCanvas (
- const Reference<awt::XWindow>& rxViewWindow) const
-{
- // Create a canvas for the view window.
- return mxPresenterHelper->createSharedCanvas(
- Reference<rendering::XSpriteCanvas>(mxTopPane->getCanvas(), UNO_QUERY),
- mxTopPane->getWindow(),
- mxTopPane->getCanvas(),
- mxTopPane->getWindow(),
- rxViewWindow);
-}
-
-
-
-
-void PresenterSlideShowView::Resize (void)
-{
- if ( ! mxWindow.is() || ! mxViewWindow.is())
- return;
-
- const awt::Rectangle aWindowBox (mxWindow->getPosSize());
- awt::Rectangle aViewWindowBox;
- if (aWindowBox.Height > 0)
- {
- const double nWindowAspectRatio (
- double(aWindowBox.Width) / double(aWindowBox.Height));
- if (nWindowAspectRatio > mnPageAspectRatio)
- {
- // Slides will be painted with the full parent window height.
- aViewWindowBox.Width = sal_Int32(aWindowBox.Height * mnPageAspectRatio + 0.5);
- aViewWindowBox.Height = aWindowBox.Height;
- aViewWindowBox.X = (aWindowBox.Width - aViewWindowBox.Width) / 2;
- aViewWindowBox.Y = 0;
- }
- else
- {
- // Slides will be painted with the full parent window width.
- aViewWindowBox.Width = aWindowBox.Width;
- aViewWindowBox.Height = sal_Int32(aWindowBox.Width / mnPageAspectRatio + 0.5);
- aViewWindowBox.X = 0;
- aViewWindowBox.Y = (aWindowBox.Height - aViewWindowBox.Height) / 2;
- }
- mxViewWindow->setPosSize(
- aViewWindowBox.X,
- aViewWindowBox.Y,
- aViewWindowBox.Width,
- aViewWindowBox.Height,
- awt::PosSize::POSSIZE);
- }
-
- // Clear the background polygon so that on the next paint it is created
- // for the new size.
- CreateBackgroundPolygons();
-
- // Notify listeners that the transformation that maps the view into the
- // window has changed.
- lang::EventObject aEvent (static_cast<XWeak*>(this));
- ::cppu::OInterfaceContainerHelper* pIterator
- = maBroadcaster.getContainer(getCppuType((Reference<util::XModifyListener>*)NULL));
- if (pIterator != NULL)
- {
- pIterator->notifyEach(&util::XModifyListener::modified, aEvent);
- }
-
- // Due to constant aspect ratio resizing may lead a preview that changes
- // its position but not its size. This invalidates the back buffer and
- // we have to enforce a complete repaint.
- if ( ! mbIsPaintPending)
- mbIsForcedPaintPending = true;
-}
-
-
-
-
-void PresenterSlideShowView::ForceRepaint (void)
-{
- if (mxSlideShow.is() && mbIsViewAdded)
- {
- mxSlideShow->removeView(this);
- mxSlideShow->addView(this);
- }
-}
-
-
-
-
-void PresenterSlideShowView::CreateBackgroundPolygons (void)
-{
- const awt::Rectangle aWindowBox (mxWindow->getPosSize());
- const awt::Rectangle aViewWindowBox (mxViewWindow->getPosSize());
- if (aWindowBox.Height == aViewWindowBox.Height && aWindowBox.Width == aViewWindowBox.Width)
- {
- mxBackgroundPolygon1 = NULL;
- mxBackgroundPolygon2 = NULL;
- }
- else if (aWindowBox.Height == aViewWindowBox.Height)
- {
- // Paint two boxes to the left and right of the view window.
- mxBackgroundPolygon1 = PresenterGeometryHelper::CreatePolygon(
- awt::Rectangle(
- 0,
- 0,
- aViewWindowBox.X,
- aWindowBox.Height),
- mxCanvas->getDevice());
- mxBackgroundPolygon2 = PresenterGeometryHelper::CreatePolygon(
- awt::Rectangle(
- aViewWindowBox.X + aViewWindowBox.Width,
- 0,
- aWindowBox.Width - aViewWindowBox.X - aViewWindowBox.Width,
- aWindowBox.Height),
- mxCanvas->getDevice());
- }
- else
- {
- // Paint two boxes above and below the view window.
- mxBackgroundPolygon1 = PresenterGeometryHelper::CreatePolygon(
- awt::Rectangle(
- 0,
- 0,
- aWindowBox.Width,
- aViewWindowBox.Y),
- mxCanvas->getDevice());
- mxBackgroundPolygon2 = PresenterGeometryHelper::CreatePolygon(
- awt::Rectangle(
- 0,
- aViewWindowBox.Y + aViewWindowBox.Height,
- aWindowBox.Width,
- aWindowBox.Height - aViewWindowBox.Y - aViewWindowBox.Height),
- mxCanvas->getDevice());
- }
-}
-
-
-
-
-void PresenterSlideShowView::ThrowIfDisposed (void)
- throw (::com::sun::star::lang::DisposedException)
-{
- if (rBHelper.bDisposed || rBHelper.bInDispose)
- {
- throw lang::DisposedException (
- OUString(RTL_CONSTASCII_USTRINGPARAM("PresenterSlideShowView object has already been disposed")),
- static_cast<uno::XWeak*>(this));
- }
-}
-
-
-} } // end of namespace ::sd::presenter
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */