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 #ifndef INCLUDED_SLIDESHOW_SOURCE_INC_SLIDE_HXX 21 #define INCLUDED_SLIDESHOW_SOURCE_INC_SLIDE_HXX 22 23 #include "shapemanager.hxx" 24 #include "subsettableshapemanager.hxx" 25 #include "unoviewcontainer.hxx" 26 #include "slidebitmap.hxx" 27 #include "shapemaps.hxx" 28 29 #include <memory> 30 31 namespace com { namespace sun { namespace star { 32 namespace drawing { 33 class XDrawPage; 34 class XDrawPagesSupplier; 35 } 36 namespace uno { 37 class XComponentContext; 38 } 39 namespace animations { 40 class XAnimationNode; 41 } } } } 42 43 namespace basegfx 44 { 45 class B2IVector; 46 } 47 48 /* Definition of Slide interface */ 49 50 namespace slideshow 51 { 52 namespace internal 53 { 54 class RGBColor; 55 class ScreenUpdater; 56 typedef ::std::vector< ::cppcanvas::PolyPolygonSharedPtr> PolyPolygonVector; 57 class Slide 58 { 59 public: 60 // Showing 61 62 63 /** Prepares to show slide. 64 65 Call this method to reduce the timeout show(), and 66 getInitialSlideBitmap() need to complete. If 67 prefetch() is not called explicitly, the named 68 methods will call it implicitly. 69 */ 70 virtual void prefetch() = 0; 71 72 /** Shows the slide on all registered views 73 74 After this call, the slide will render itself to the 75 views, and start its animations. 76 77 @param bSlideBackgoundPainted 78 When true, the initial slide content on the background 79 layer is already rendered (e.g. from a previous slide 80 transition). When false, Slide renders initial content of 81 slide. 82 */ 83 virtual void show( bool bSlideBackgoundPainted ) = 0; 84 85 /** Force-ends the slide 86 87 After this call, the slide has stopped all animations, 88 and ceased rendering/visualization on all views. 89 */ 90 virtual void hide() = 0; 91 92 93 // Queries 94 95 96 /** Query the size of this slide in user coordinates 97 98 This value is retrieved from the XDrawPage properties. 99 */ 100 virtual basegfx::B2ISize getSlideSize() const = 0; 101 102 /// Gets the underlying API page 103 virtual css::uno::Reference< css::drawing::XDrawPage > getXDrawPage() const = 0; 104 105 /// Gets the animation node. 106 virtual css::uno::Reference< css::animations::XAnimationNode > getXAnimationNode() const = 0; 107 108 ///Gets the slide Polygons 109 virtual PolyPolygonVector getPolygons() = 0; 110 111 ///Draw the slide Polygons 112 virtual void drawPolygons() const = 0; 113 114 ///Check if paint overlay is already active 115 virtual bool isPaintOverlayActive() const = 0; 116 117 virtual void enablePaintOverlay() = 0; 118 119 virtual void update_settings( bool bUserPaintEnabled, RGBColor const& aUserPaintColor, double dUserPaintStrokeWidth ) = 0; 120 121 // Slide bitmaps 122 123 124 /** Request bitmap for current slide appearance. 125 126 The bitmap returned by this method depends on the 127 current state of the slide and the contained 128 animations. A newly generated slide will return the 129 initial slide content here (e.g. with all 'appear' 130 effect shapes invisible), a slide whose effects are 131 currently running will return a bitmap corresponding 132 to the current position on the animation timeline, and 133 a slide whose effects have all been run will generate 134 a bitmap with the final slide appearance (e.g. with 135 all 'hide' effect shapes invisible). 136 137 @param rView 138 View to retrieve bitmap for (note that the bitmap will 139 have device-pixel equivalence to the content that 140 would have been rendered onto the given view). Note 141 that the view must have been added to this slide 142 before via viewAdded(). 143 */ 144 virtual SlideBitmapSharedPtr 145 getCurrentSlideBitmap( const UnoViewSharedPtr& rView ) const = 0; 146 147 protected: ~Slide()148 ~Slide() {} 149 }; 150 151 typedef ::std::shared_ptr< Slide > SlideSharedPtr; 152 153 class EventQueue; 154 class CursorManager; 155 class MediaFileManager; 156 class EventMultiplexer; 157 class ActivitiesQueue; 158 class UserEventQueue; 159 class RGBColor; 160 161 /** Construct from XDrawPage 162 163 The Slide object generally works in XDrawPage model 164 coordinates, that is, the page will have the width and 165 height as specified in the XDrawPage's property 166 set. The top, left corner of the page will be rendered 167 at (0,0) in the given canvas' view coordinate system. 168 169 Does not render anything initially 170 171 @param xDrawPage 172 Page to display on this slide 173 174 @param xRootNode 175 Root of the SMIL animation tree. Used to animate the slide. 176 177 @param rEventQueue 178 EventQueue. Used to post events. 179 180 @param rActivitiesQueue 181 ActivitiesQueue. Used to run animations. 182 183 @param rEventMultiplexer 184 Event source 185 186 @param rUserEventQueue 187 UserEeventQueue 188 */ 189 SlideSharedPtr createSlide( const css::uno::Reference< css::drawing::XDrawPage >& xDrawPage, 190 const css::uno::Reference< css::drawing::XDrawPagesSupplier >& xDrawPages, 191 const css::uno::Reference< css::animations::XAnimationNode >& xRootNode, 192 EventQueue& rEventQueue, 193 EventMultiplexer& rEventMultiplexer, 194 ScreenUpdater& rScreenUpdater, 195 ActivitiesQueue& rActivitiesQueue, 196 UserEventQueue& rUserEventQueue, 197 CursorManager& rCursorManager, 198 MediaFileManager& rMediaFileManager, 199 const UnoViewContainer& rViewContainer, 200 const css::uno::Reference< css::uno::XComponentContext >& xContext, 201 const ShapeEventListenerMap& rShapeListenerMap, 202 const ShapeCursorMap& rShapeCursorMap, 203 const PolyPolygonVector& rPolyPolygonVector, 204 RGBColor const& aUserPaintColor, 205 double dUserPaintStrokeWidth, 206 bool bUserPaintEnabled, 207 bool bIntrinsicAnimationsAllowed, 208 bool bDisableAnimationZOrder ); 209 } 210 } 211 212 #endif // INCLUDED_SLIDESHOW_SOURCE_INC_SLIDE_HXX 213 214 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 215