1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski #ifndef SDEXT_PRESENTER_SLIDE_SHOW_VIEW_HXX 25*b1cdbd2cSJim Jagielski #define SDEXT_PRESENTER_SLIDE_SHOW_VIEW_HXX 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski #include "PresenterViewFactory.hxx" 28*b1cdbd2cSJim Jagielski #include <com/sun/star/presentation/XSlideShowView.hpp> 29*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/XPaintListener.hpp> 30*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/XMouseListener.hpp> 31*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/XMouseMotionListener.hpp> 32*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/XPointer.hpp> 33*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/XWindowListener.hpp> 34*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/XDrawView.hpp> 35*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/framework/XPane.hpp> 36*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/framework/XResourceId.hpp> 37*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/framework/XView.hpp> 38*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XController.hpp> 39*b1cdbd2cSJim Jagielski #include <com/sun/star/presentation/XSlideShowController.hpp> 40*b1cdbd2cSJim Jagielski #include <com/sun/star/rendering/XPolyPolygon2D.hpp> 41*b1cdbd2cSJim Jagielski #include <com/sun/star/uno/XComponentContext.hpp> 42*b1cdbd2cSJim Jagielski #include <com/sun/star/util/Color.hpp> 43*b1cdbd2cSJim Jagielski #include <cppuhelper/compbase7.hxx> 44*b1cdbd2cSJim Jagielski #include <cppuhelper/interfacecontainer.hxx> 45*b1cdbd2cSJim Jagielski #include <cppuhelper/basemutex.hxx> 46*b1cdbd2cSJim Jagielski #include <boost/noncopyable.hpp> 47*b1cdbd2cSJim Jagielski 48*b1cdbd2cSJim Jagielski namespace css = ::com::sun::star; 49*b1cdbd2cSJim Jagielski 50*b1cdbd2cSJim Jagielski namespace sdext { namespace presenter { 51*b1cdbd2cSJim Jagielski 52*b1cdbd2cSJim Jagielski namespace { 53*b1cdbd2cSJim Jagielski typedef cppu::WeakComponentImplHelper7< 54*b1cdbd2cSJim Jagielski css::presentation::XSlideShowView, 55*b1cdbd2cSJim Jagielski css::awt::XPaintListener, 56*b1cdbd2cSJim Jagielski css::awt::XMouseListener, 57*b1cdbd2cSJim Jagielski css::awt::XMouseMotionListener, 58*b1cdbd2cSJim Jagielski css::awt::XWindowListener, 59*b1cdbd2cSJim Jagielski css::drawing::framework::XView, 60*b1cdbd2cSJim Jagielski css::drawing::XDrawView 61*b1cdbd2cSJim Jagielski > PresenterSlideShowViewInterfaceBase; 62*b1cdbd2cSJim Jagielski } 63*b1cdbd2cSJim Jagielski 64*b1cdbd2cSJim Jagielski /** Life view in a secondary windo of a full screen slide show. 65*b1cdbd2cSJim Jagielski */ 66*b1cdbd2cSJim Jagielski class PresenterSlideShowView 67*b1cdbd2cSJim Jagielski : private ::boost::noncopyable, 68*b1cdbd2cSJim Jagielski protected ::cppu::BaseMutex, 69*b1cdbd2cSJim Jagielski public PresenterSlideShowViewInterfaceBase, 70*b1cdbd2cSJim Jagielski public CachablePresenterView 71*b1cdbd2cSJim Jagielski { 72*b1cdbd2cSJim Jagielski public: 73*b1cdbd2cSJim Jagielski PresenterSlideShowView ( 74*b1cdbd2cSJim Jagielski const css::uno::Reference<css::uno::XComponentContext>& rxContext, 75*b1cdbd2cSJim Jagielski const css::uno::Reference<css::drawing::framework::XResourceId>& rxViewId, 76*b1cdbd2cSJim Jagielski const css::uno::Reference<css::frame::XController>& rxController, 77*b1cdbd2cSJim Jagielski const ::rtl::Reference<PresenterController>& rpPresenterController); 78*b1cdbd2cSJim Jagielski virtual ~PresenterSlideShowView (void); 79*b1cdbd2cSJim Jagielski 80*b1cdbd2cSJim Jagielski void LateInit (void); 81*b1cdbd2cSJim Jagielski virtual void SAL_CALL disposing (void); 82*b1cdbd2cSJim Jagielski 83*b1cdbd2cSJim Jagielski 84*b1cdbd2cSJim Jagielski // CachablePresenterView 85*b1cdbd2cSJim Jagielski 86*b1cdbd2cSJim Jagielski virtual void ReleaseView (void); 87*b1cdbd2cSJim Jagielski 88*b1cdbd2cSJim Jagielski 89*b1cdbd2cSJim Jagielski // XSlideShowView 90*b1cdbd2cSJim Jagielski 91*b1cdbd2cSJim Jagielski virtual css::uno::Reference< 92*b1cdbd2cSJim Jagielski css::rendering::XSpriteCanvas > SAL_CALL getCanvas (void) 93*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 94*b1cdbd2cSJim Jagielski 95*b1cdbd2cSJim Jagielski virtual void SAL_CALL clear (void) 96*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 97*b1cdbd2cSJim Jagielski 98*b1cdbd2cSJim Jagielski virtual css::geometry::AffineMatrix2D SAL_CALL getTransformation (void) 99*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 100*b1cdbd2cSJim Jagielski 101*b1cdbd2cSJim Jagielski virtual void SAL_CALL addTransformationChangedListener( 102*b1cdbd2cSJim Jagielski const css::uno::Reference< 103*b1cdbd2cSJim Jagielski css::util::XModifyListener >& xListener) 104*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 105*b1cdbd2cSJim Jagielski 106*b1cdbd2cSJim Jagielski virtual void SAL_CALL removeTransformationChangedListener( 107*b1cdbd2cSJim Jagielski const css::uno::Reference< 108*b1cdbd2cSJim Jagielski css::util::XModifyListener >& xListener) 109*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 110*b1cdbd2cSJim Jagielski 111*b1cdbd2cSJim Jagielski virtual void SAL_CALL addPaintListener( 112*b1cdbd2cSJim Jagielski const css::uno::Reference< 113*b1cdbd2cSJim Jagielski css::awt::XPaintListener >& xListener) 114*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 115*b1cdbd2cSJim Jagielski 116*b1cdbd2cSJim Jagielski virtual void SAL_CALL removePaintListener( 117*b1cdbd2cSJim Jagielski const css::uno::Reference< 118*b1cdbd2cSJim Jagielski css::awt::XPaintListener >& xListener) 119*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 120*b1cdbd2cSJim Jagielski 121*b1cdbd2cSJim Jagielski virtual void SAL_CALL addMouseListener( 122*b1cdbd2cSJim Jagielski const css::uno::Reference< 123*b1cdbd2cSJim Jagielski css::awt::XMouseListener >& xListener) 124*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 125*b1cdbd2cSJim Jagielski 126*b1cdbd2cSJim Jagielski virtual void SAL_CALL removeMouseListener( 127*b1cdbd2cSJim Jagielski const css::uno::Reference< 128*b1cdbd2cSJim Jagielski css::awt::XMouseListener >& xListener) 129*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 130*b1cdbd2cSJim Jagielski 131*b1cdbd2cSJim Jagielski virtual void SAL_CALL addMouseMotionListener( 132*b1cdbd2cSJim Jagielski const css::uno::Reference< 133*b1cdbd2cSJim Jagielski css::awt::XMouseMotionListener >& xListener) 134*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 135*b1cdbd2cSJim Jagielski 136*b1cdbd2cSJim Jagielski virtual void SAL_CALL removeMouseMotionListener( 137*b1cdbd2cSJim Jagielski const css::uno::Reference< 138*b1cdbd2cSJim Jagielski css::awt::XMouseMotionListener >& xListener) 139*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 140*b1cdbd2cSJim Jagielski 141*b1cdbd2cSJim Jagielski virtual void SAL_CALL setMouseCursor(::sal_Int16 nPointerShape) 142*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 143*b1cdbd2cSJim Jagielski 144*b1cdbd2cSJim Jagielski virtual ::com::sun::star::awt::Rectangle SAL_CALL getCanvasArea( ) 145*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException); 146*b1cdbd2cSJim Jagielski 147*b1cdbd2cSJim Jagielski // lang::XEventListener 148*b1cdbd2cSJim Jagielski virtual void SAL_CALL disposing (const css::lang::EventObject& rEvent) 149*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 150*b1cdbd2cSJim Jagielski 151*b1cdbd2cSJim Jagielski 152*b1cdbd2cSJim Jagielski // XPaintListener 153*b1cdbd2cSJim Jagielski virtual void SAL_CALL windowPaint (const css::awt::PaintEvent& rEvent) 154*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 155*b1cdbd2cSJim Jagielski 156*b1cdbd2cSJim Jagielski 157*b1cdbd2cSJim Jagielski // XMouseListener 158*b1cdbd2cSJim Jagielski virtual void SAL_CALL mousePressed (const css::awt::MouseEvent& rEvent) 159*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 160*b1cdbd2cSJim Jagielski 161*b1cdbd2cSJim Jagielski virtual void SAL_CALL mouseReleased (const css::awt::MouseEvent& rEvent) 162*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 163*b1cdbd2cSJim Jagielski 164*b1cdbd2cSJim Jagielski virtual void SAL_CALL mouseEntered (const css::awt::MouseEvent& rEvent) 165*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 166*b1cdbd2cSJim Jagielski 167*b1cdbd2cSJim Jagielski virtual void SAL_CALL mouseExited (const css::awt::MouseEvent& rEvent) 168*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 169*b1cdbd2cSJim Jagielski 170*b1cdbd2cSJim Jagielski 171*b1cdbd2cSJim Jagielski // XMouseMotionListener 172*b1cdbd2cSJim Jagielski 173*b1cdbd2cSJim Jagielski virtual void SAL_CALL mouseDragged (const css::awt::MouseEvent& rEvent) 174*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 175*b1cdbd2cSJim Jagielski 176*b1cdbd2cSJim Jagielski virtual void SAL_CALL mouseMoved (const css::awt::MouseEvent& rEvent) 177*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 178*b1cdbd2cSJim Jagielski 179*b1cdbd2cSJim Jagielski 180*b1cdbd2cSJim Jagielski // XWindowListener 181*b1cdbd2cSJim Jagielski 182*b1cdbd2cSJim Jagielski virtual void SAL_CALL windowResized (const css::awt::WindowEvent& rEvent) 183*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 184*b1cdbd2cSJim Jagielski 185*b1cdbd2cSJim Jagielski virtual void SAL_CALL windowMoved (const css::awt::WindowEvent& rEvent) 186*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 187*b1cdbd2cSJim Jagielski 188*b1cdbd2cSJim Jagielski virtual void SAL_CALL windowShown (const css::lang::EventObject& rEvent) 189*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 190*b1cdbd2cSJim Jagielski 191*b1cdbd2cSJim Jagielski virtual void SAL_CALL windowHidden (const css::lang::EventObject& rEvent) 192*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 193*b1cdbd2cSJim Jagielski 194*b1cdbd2cSJim Jagielski 195*b1cdbd2cSJim Jagielski // XView 196*b1cdbd2cSJim Jagielski 197*b1cdbd2cSJim Jagielski virtual css::uno::Reference<css::drawing::framework::XResourceId> SAL_CALL 198*b1cdbd2cSJim Jagielski getResourceId (void) 199*b1cdbd2cSJim Jagielski throw(css::uno::RuntimeException); 200*b1cdbd2cSJim Jagielski 201*b1cdbd2cSJim Jagielski virtual sal_Bool SAL_CALL isAnchorOnly (void) 202*b1cdbd2cSJim Jagielski throw (com::sun::star::uno::RuntimeException); 203*b1cdbd2cSJim Jagielski 204*b1cdbd2cSJim Jagielski 205*b1cdbd2cSJim Jagielski // XDrawView 206*b1cdbd2cSJim Jagielski 207*b1cdbd2cSJim Jagielski virtual void SAL_CALL setCurrentPage ( 208*b1cdbd2cSJim Jagielski const css::uno::Reference<css::drawing::XDrawPage>& rxSlide) 209*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 210*b1cdbd2cSJim Jagielski 211*b1cdbd2cSJim Jagielski virtual css::uno::Reference<css::drawing::XDrawPage> SAL_CALL getCurrentPage (void) 212*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 213*b1cdbd2cSJim Jagielski 214*b1cdbd2cSJim Jagielski 215*b1cdbd2cSJim Jagielski // CachablePresenterView 216*b1cdbd2cSJim Jagielski 217*b1cdbd2cSJim Jagielski virtual void ActivatePresenterView (void); 218*b1cdbd2cSJim Jagielski 219*b1cdbd2cSJim Jagielski virtual void DeactivatePresenterView (void); 220*b1cdbd2cSJim Jagielski 221*b1cdbd2cSJim Jagielski private: 222*b1cdbd2cSJim Jagielski css::uno::Reference<css::uno::XComponentContext> mxComponentContext; 223*b1cdbd2cSJim Jagielski ::rtl::Reference<PresenterController> mpPresenterController; 224*b1cdbd2cSJim Jagielski css::uno::Reference<css::drawing::framework::XResourceId> mxViewId; 225*b1cdbd2cSJim Jagielski css::uno::Reference<css::frame::XController> mxController; 226*b1cdbd2cSJim Jagielski css::uno::Reference<css::presentation::XSlideShowController> mxSlideShowController; 227*b1cdbd2cSJim Jagielski css::uno::Reference<css::presentation::XSlideShow> mxSlideShow; 228*b1cdbd2cSJim Jagielski css::uno::Reference<css::rendering::XCanvas> mxCanvas; 229*b1cdbd2cSJim Jagielski css::uno::Reference<css::rendering::XCanvas> mxViewCanvas; 230*b1cdbd2cSJim Jagielski css::uno::Reference<css::awt::XPointer> mxPointer; 231*b1cdbd2cSJim Jagielski css::uno::Reference<css::awt::XWindow> mxWindow; 232*b1cdbd2cSJim Jagielski css::uno::Reference<css::awt::XWindow> mxViewWindow; 233*b1cdbd2cSJim Jagielski css::uno::Reference<css::drawing::framework::XPane> mxTopPane; 234*b1cdbd2cSJim Jagielski css::uno::Reference<css::drawing::XPresenterHelper> mxPresenterHelper; 235*b1cdbd2cSJim Jagielski css::uno::Reference<css::rendering::XPolyPolygon2D> mxBackgroundPolygon1; 236*b1cdbd2cSJim Jagielski css::uno::Reference<css::rendering::XPolyPolygon2D> mxBackgroundPolygon2; 237*b1cdbd2cSJim Jagielski bool mbIsViewAdded; 238*b1cdbd2cSJim Jagielski 239*b1cdbd2cSJim Jagielski /** Aspect ratio of the current slide. 240*b1cdbd2cSJim Jagielski */ 241*b1cdbd2cSJim Jagielski double mnPageAspectRatio; 242*b1cdbd2cSJim Jagielski 243*b1cdbd2cSJim Jagielski /** This broadcast helper is used to notify listeners registed to a 244*b1cdbd2cSJim Jagielski SlideShowView object. 245*b1cdbd2cSJim Jagielski */ 246*b1cdbd2cSJim Jagielski ::cppu::OBroadcastHelper maBroadcaster; 247*b1cdbd2cSJim Jagielski 248*b1cdbd2cSJim Jagielski SharedBitmapDescriptor mpBackground; 249*b1cdbd2cSJim Jagielski 250*b1cdbd2cSJim Jagielski bool mbIsInModifyNotification; 251*b1cdbd2cSJim Jagielski bool mbIsForcedPaintPending; 252*b1cdbd2cSJim Jagielski bool mbIsPaintPending; 253*b1cdbd2cSJim Jagielski ::rtl::OUString msClickToExitPresentationText; 254*b1cdbd2cSJim Jagielski ::rtl::OUString msClickToExitPresentationTitle; 255*b1cdbd2cSJim Jagielski ::rtl::OUString msTitleTemplate; 256*b1cdbd2cSJim Jagielski bool mbIsEndSlideVisible; 257*b1cdbd2cSJim Jagielski css::uno::Reference<css::drawing::XDrawPage> mxCurrentSlide; 258*b1cdbd2cSJim Jagielski 259*b1cdbd2cSJim Jagielski /** Create the window into which the slide show will render its 260*b1cdbd2cSJim Jagielski content. This window has the correct aspect ratio and is displayed centered 261*b1cdbd2cSJim Jagielski and as large as possible in its parent window. 262*b1cdbd2cSJim Jagielski */ 263*b1cdbd2cSJim Jagielski css::uno::Reference<css::awt::XWindow> CreateViewWindow ( 264*b1cdbd2cSJim Jagielski const css::uno::Reference<css::awt::XWindow>& rxParentWindow) const; 265*b1cdbd2cSJim Jagielski css::uno::Reference<css::rendering::XCanvas> CreateViewCanvas ( 266*b1cdbd2cSJim Jagielski const css::uno::Reference<css::awt::XWindow>& rxWindow) const; 267*b1cdbd2cSJim Jagielski 268*b1cdbd2cSJim Jagielski void Resize (void); 269*b1cdbd2cSJim Jagielski 270*b1cdbd2cSJim Jagielski void PaintOuterWindow (const css::awt::Rectangle& rRepaintBox); 271*b1cdbd2cSJim Jagielski void PaintInnerWindow (const css::awt::PaintEvent& rEvent); 272*b1cdbd2cSJim Jagielski void PaintEndSlide (const css::awt::Rectangle& rRepaintBox); 273*b1cdbd2cSJim Jagielski 274*b1cdbd2cSJim Jagielski /** The slide show relies on the back buffer of the canvas not being 275*b1cdbd2cSJim Jagielski modified. With a shared canvas there are times when that can not be 276*b1cdbd2cSJim Jagielski guaranteed. 277*b1cdbd2cSJim Jagielski Call this method when the back buffer may have changed its content, 278*b1cdbd2cSJim Jagielski like when the window has been moved but not resized. 279*b1cdbd2cSJim Jagielski */ 280*b1cdbd2cSJim Jagielski void ForceRepaint (void); 281*b1cdbd2cSJim Jagielski 282*b1cdbd2cSJim Jagielski void CreateBackgroundPolygons (void); 283*b1cdbd2cSJim Jagielski 284*b1cdbd2cSJim Jagielski /** This method throws a DisposedException when the object has already been 285*b1cdbd2cSJim Jagielski disposed. 286*b1cdbd2cSJim Jagielski */ 287*b1cdbd2cSJim Jagielski void ThrowIfDisposed (void) 288*b1cdbd2cSJim Jagielski throw (css::lang::DisposedException); 289*b1cdbd2cSJim Jagielski }; 290*b1cdbd2cSJim Jagielski 291*b1cdbd2cSJim Jagielski } } // end of namespace ::sd::presenter 292*b1cdbd2cSJim Jagielski 293*b1cdbd2cSJim Jagielski #endif 294