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 INCLUDED_SLIDESHOW_LAYERMANAGER_HXX 25*b1cdbd2cSJim Jagielski #define INCLUDED_SLIDESHOW_LAYERMANAGER_HXX 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski #include <boost/shared_ptr.hpp> 28*b1cdbd2cSJim Jagielski #include <boost/noncopyable.hpp> 29*b1cdbd2cSJim Jagielski 30*b1cdbd2cSJim Jagielski #include <cppcanvas/spritecanvas.hxx> 31*b1cdbd2cSJim Jagielski 32*b1cdbd2cSJim Jagielski #include "unoview.hxx" 33*b1cdbd2cSJim Jagielski #include "unoviewcontainer.hxx" 34*b1cdbd2cSJim Jagielski #include "attributableshape.hxx" 35*b1cdbd2cSJim Jagielski #include "layer.hxx" 36*b1cdbd2cSJim Jagielski #include "tools.hxx" 37*b1cdbd2cSJim Jagielski 38*b1cdbd2cSJim Jagielski #include <vector> 39*b1cdbd2cSJim Jagielski #include <map> 40*b1cdbd2cSJim Jagielski #include <hash_map> 41*b1cdbd2cSJim Jagielski #include <algorithm> 42*b1cdbd2cSJim Jagielski #include <functional> 43*b1cdbd2cSJim Jagielski 44*b1cdbd2cSJim Jagielski namespace basegfx { 45*b1cdbd2cSJim Jagielski class B2DRange; 46*b1cdbd2cSJim Jagielski } 47*b1cdbd2cSJim Jagielski 48*b1cdbd2cSJim Jagielski namespace slideshow 49*b1cdbd2cSJim Jagielski { 50*b1cdbd2cSJim Jagielski namespace internal 51*b1cdbd2cSJim Jagielski { 52*b1cdbd2cSJim Jagielski /* Definition of Layermanager class */ 53*b1cdbd2cSJim Jagielski 54*b1cdbd2cSJim Jagielski /** This class manages all of a slide's layers (and shapes) 55*b1cdbd2cSJim Jagielski 56*b1cdbd2cSJim Jagielski Since layer content changes when animations start or end, 57*b1cdbd2cSJim Jagielski the layer manager keeps track of this and also handles 58*b1cdbd2cSJim Jagielski starting/stopping of Shape animations. Note that none of 59*b1cdbd2cSJim Jagielski the methods actually perform a screen update, this is 60*b1cdbd2cSJim Jagielski always delayed until the ActivitiesQueue explicitely 61*b1cdbd2cSJim Jagielski performs it. 62*b1cdbd2cSJim Jagielski 63*b1cdbd2cSJim Jagielski @see Layer 64*b1cdbd2cSJim Jagielski @see Shape 65*b1cdbd2cSJim Jagielski */ 66*b1cdbd2cSJim Jagielski class LayerManager : private boost::noncopyable 67*b1cdbd2cSJim Jagielski { 68*b1cdbd2cSJim Jagielski public: 69*b1cdbd2cSJim Jagielski /** Create a new layer manager for the given page bounds 70*b1cdbd2cSJim Jagielski 71*b1cdbd2cSJim Jagielski @param rViews 72*b1cdbd2cSJim Jagielski Views currently registered 73*b1cdbd2cSJim Jagielski 74*b1cdbd2cSJim Jagielski @param rPageBounds 75*b1cdbd2cSJim Jagielski Overall page bounds, in user space coordinates 76*b1cdbd2cSJim Jagielski 77*b1cdbd2cSJim Jagielski @param bDisableAnimationZOrder 78*b1cdbd2cSJim Jagielski When true, all sprite animations run in the 79*b1cdbd2cSJim Jagielski foreground. That is, no extra layers are created, and 80*b1cdbd2cSJim Jagielski the slideshow runs potentially faster. 81*b1cdbd2cSJim Jagielski */ 82*b1cdbd2cSJim Jagielski LayerManager( const UnoViewContainer& rViews, 83*b1cdbd2cSJim Jagielski const ::basegfx::B2DRange& rPageBounds, 84*b1cdbd2cSJim Jagielski bool bDisableAnimationZOrder ); 85*b1cdbd2cSJim Jagielski 86*b1cdbd2cSJim Jagielski /** Activate the LayerManager 87*b1cdbd2cSJim Jagielski 88*b1cdbd2cSJim Jagielski This method activates the LayerManager. Prior to 89*b1cdbd2cSJim Jagielski activation, this instance will be passive, i.e. won't 90*b1cdbd2cSJim Jagielski render anything to any view. 91*b1cdbd2cSJim Jagielski 92*b1cdbd2cSJim Jagielski @param bSlideBackgoundPainted 93*b1cdbd2cSJim Jagielski When true, the initial slide content on the background 94*b1cdbd2cSJim Jagielski layer is already rendered (e.g. from a previous slide 95*b1cdbd2cSJim Jagielski transition). When false, LayerManager also renders 96*b1cdbd2cSJim Jagielski initial content of background layer on next update() 97*b1cdbd2cSJim Jagielski call. 98*b1cdbd2cSJim Jagielski */ 99*b1cdbd2cSJim Jagielski void activate( bool bSlideBackgoundPainted ); 100*b1cdbd2cSJim Jagielski 101*b1cdbd2cSJim Jagielski /** Deactivate the LayerManager 102*b1cdbd2cSJim Jagielski 103*b1cdbd2cSJim Jagielski This method deactivates the LayerManager. After 104*b1cdbd2cSJim Jagielski deactivation, this instance will be passive, 105*b1cdbd2cSJim Jagielski i.e. don't render anything to any view. Furthermore, 106*b1cdbd2cSJim Jagielski if there's currently more than one Layer active, this 107*b1cdbd2cSJim Jagielski method also removes all but one. 108*b1cdbd2cSJim Jagielski */ 109*b1cdbd2cSJim Jagielski void deactivate(); 110*b1cdbd2cSJim Jagielski 111*b1cdbd2cSJim Jagielski // From ViewEventHandler, forwarded by SlideImpl 112*b1cdbd2cSJim Jagielski /// Notify new view added to UnoViewContainer 113*b1cdbd2cSJim Jagielski void viewAdded( const UnoViewSharedPtr& rView ); 114*b1cdbd2cSJim Jagielski /// Notify view removed from UnoViewContainer 115*b1cdbd2cSJim Jagielski void viewRemoved( const UnoViewSharedPtr& rView ); 116*b1cdbd2cSJim Jagielski void viewChanged( const UnoViewSharedPtr& rView ); 117*b1cdbd2cSJim Jagielski void viewsChanged(); 118*b1cdbd2cSJim Jagielski 119*b1cdbd2cSJim Jagielski /** Add the shape to this object 120*b1cdbd2cSJim Jagielski 121*b1cdbd2cSJim Jagielski This method adds a shape to the page. 122*b1cdbd2cSJim Jagielski */ 123*b1cdbd2cSJim Jagielski void addShape( const ShapeSharedPtr& rShape ); 124*b1cdbd2cSJim Jagielski 125*b1cdbd2cSJim Jagielski /** Remove shape from this object 126*b1cdbd2cSJim Jagielski 127*b1cdbd2cSJim Jagielski This method removes a shape from the shape. 128*b1cdbd2cSJim Jagielski */ 129*b1cdbd2cSJim Jagielski bool removeShape( const ShapeSharedPtr& rShape ); 130*b1cdbd2cSJim Jagielski 131*b1cdbd2cSJim Jagielski /** Lookup a Shape from an XShape model object 132*b1cdbd2cSJim Jagielski 133*b1cdbd2cSJim Jagielski This method looks up the internal shape map for one 134*b1cdbd2cSJim Jagielski representing the given XShape. 135*b1cdbd2cSJim Jagielski 136*b1cdbd2cSJim Jagielski @param xShape 137*b1cdbd2cSJim Jagielski The XShape object, for which the representing Shape 138*b1cdbd2cSJim Jagielski should be looked up. 139*b1cdbd2cSJim Jagielski */ 140*b1cdbd2cSJim Jagielski ShapeSharedPtr lookupShape( const ::com::sun::star::uno::Reference< 141*b1cdbd2cSJim Jagielski ::com::sun::star::drawing::XShape >& xShape ) const; 142*b1cdbd2cSJim Jagielski 143*b1cdbd2cSJim Jagielski /** Query a subset of the given original shape 144*b1cdbd2cSJim Jagielski 145*b1cdbd2cSJim Jagielski This method queries a new (but not necessarily unique) 146*b1cdbd2cSJim Jagielski shape, which displays only the given subset of the 147*b1cdbd2cSJim Jagielski original one. 148*b1cdbd2cSJim Jagielski */ 149*b1cdbd2cSJim Jagielski AttributableShapeSharedPtr getSubsetShape( const AttributableShapeSharedPtr& rOrigShape, 150*b1cdbd2cSJim Jagielski const DocTreeNode& rTreeNode ); 151*b1cdbd2cSJim Jagielski 152*b1cdbd2cSJim Jagielski /** Revoke a previously queried subset shape. 153*b1cdbd2cSJim Jagielski 154*b1cdbd2cSJim Jagielski With this method, a previously requested subset shape 155*b1cdbd2cSJim Jagielski is revoked again. If the last client revokes a given 156*b1cdbd2cSJim Jagielski subset, it will cease to be displayed, and the 157*b1cdbd2cSJim Jagielski original shape will again show the subset data. 158*b1cdbd2cSJim Jagielski 159*b1cdbd2cSJim Jagielski @param rOrigShape 160*b1cdbd2cSJim Jagielski The shape the subset was created from 161*b1cdbd2cSJim Jagielski 162*b1cdbd2cSJim Jagielski @param rSubsetShape 163*b1cdbd2cSJim Jagielski The subset created from rOrigShape 164*b1cdbd2cSJim Jagielski */ 165*b1cdbd2cSJim Jagielski void revokeSubset( const AttributableShapeSharedPtr& rOrigShape, 166*b1cdbd2cSJim Jagielski const AttributableShapeSharedPtr& rSubsetShape ); 167*b1cdbd2cSJim Jagielski 168*b1cdbd2cSJim Jagielski /** Notify the LayerManager that the given Shape starts an 169*b1cdbd2cSJim Jagielski animation now. 170*b1cdbd2cSJim Jagielski 171*b1cdbd2cSJim Jagielski This method enters animation mode for the Shape on all 172*b1cdbd2cSJim Jagielski registered views. 173*b1cdbd2cSJim Jagielski */ 174*b1cdbd2cSJim Jagielski void enterAnimationMode( const AnimatableShapeSharedPtr& rShape ); 175*b1cdbd2cSJim Jagielski 176*b1cdbd2cSJim Jagielski /** Notify the LayerManager that the given Shape is no 177*b1cdbd2cSJim Jagielski longer animated. 178*b1cdbd2cSJim Jagielski 179*b1cdbd2cSJim Jagielski This methods ends animation mode for the given Shape 180*b1cdbd2cSJim Jagielski on all registered views. 181*b1cdbd2cSJim Jagielski */ 182*b1cdbd2cSJim Jagielski void leaveAnimationMode( const AnimatableShapeSharedPtr& rShape ); 183*b1cdbd2cSJim Jagielski 184*b1cdbd2cSJim Jagielski /** Notify that a shape needs an update 185*b1cdbd2cSJim Jagielski 186*b1cdbd2cSJim Jagielski This method notifies the layer manager that a shape 187*b1cdbd2cSJim Jagielski update is necessary. This is useful if, during 188*b1cdbd2cSJim Jagielski animation playback, changes occur to shapes which make 189*b1cdbd2cSJim Jagielski an update necessary on an update() call. Otherwise, 190*b1cdbd2cSJim Jagielski update() will not render anything, which is not 191*b1cdbd2cSJim Jagielski triggered by calling one of the other LayerManager 192*b1cdbd2cSJim Jagielski methods. 193*b1cdbd2cSJim Jagielski 194*b1cdbd2cSJim Jagielski @param rShape 195*b1cdbd2cSJim Jagielski Shape which needs an update 196*b1cdbd2cSJim Jagielski */ 197*b1cdbd2cSJim Jagielski void notifyShapeUpdate( const ShapeSharedPtr& rShape); 198*b1cdbd2cSJim Jagielski 199*b1cdbd2cSJim Jagielski /** Check whether any update operations are pending. 200*b1cdbd2cSJim Jagielski 201*b1cdbd2cSJim Jagielski @return true, if this LayerManager has any updates 202*b1cdbd2cSJim Jagielski pending, i.e. needs to repaint something for the next 203*b1cdbd2cSJim Jagielski frame. 204*b1cdbd2cSJim Jagielski */ 205*b1cdbd2cSJim Jagielski bool isUpdatePending() const; 206*b1cdbd2cSJim Jagielski 207*b1cdbd2cSJim Jagielski /** Update the content 208*b1cdbd2cSJim Jagielski 209*b1cdbd2cSJim Jagielski This method updates the content on all layers on all 210*b1cdbd2cSJim Jagielski registered views. It does not issues a 211*b1cdbd2cSJim Jagielski View::updateScreen() call on registered views. Please 212*b1cdbd2cSJim Jagielski note that this method only takes into account changes 213*b1cdbd2cSJim Jagielski to shapes induced directly by calling methods of the 214*b1cdbd2cSJim Jagielski LayerManager. If a shape needs an update, because of 215*b1cdbd2cSJim Jagielski some external event unknown to the LayerManager (most 216*b1cdbd2cSJim Jagielski notably running animations), you have to notify the 217*b1cdbd2cSJim Jagielski LayerManager via notifyShapeUpdate(). 218*b1cdbd2cSJim Jagielski 219*b1cdbd2cSJim Jagielski @see LayerManager::updateScreen() 220*b1cdbd2cSJim Jagielski 221*b1cdbd2cSJim Jagielski @return whether the update finished successfully. 222*b1cdbd2cSJim Jagielski */ 223*b1cdbd2cSJim Jagielski bool update(); 224*b1cdbd2cSJim Jagielski 225*b1cdbd2cSJim Jagielski /** Render the content to given canvas 226*b1cdbd2cSJim Jagielski 227*b1cdbd2cSJim Jagielski This is a one-shot operation, which simply draws all 228*b1cdbd2cSJim Jagielski shapes onto the given canvas, without any caching or 229*b1cdbd2cSJim Jagielski other fuzz. Don't use that for repeated output onto 230*b1cdbd2cSJim Jagielski the same canvas, the View concept is more optimal 231*b1cdbd2cSJim Jagielski then. 232*b1cdbd2cSJim Jagielski 233*b1cdbd2cSJim Jagielski @param rTargetCanvas 234*b1cdbd2cSJim Jagielski Target canvas to output onto. 235*b1cdbd2cSJim Jagielski */ 236*b1cdbd2cSJim Jagielski bool renderTo( const ::cppcanvas::CanvasSharedPtr& rTargetCanvas ) const; 237*b1cdbd2cSJim Jagielski 238*b1cdbd2cSJim Jagielski private: 239*b1cdbd2cSJim Jagielski /** A hash map which maps the XShape to the corresponding Shape object. 240*b1cdbd2cSJim Jagielski 241*b1cdbd2cSJim Jagielski Provides quicker lookup than ShapeSet for simple mappings 242*b1cdbd2cSJim Jagielski */ 243*b1cdbd2cSJim Jagielski typedef ::std::hash_map< 244*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< 245*b1cdbd2cSJim Jagielski ::com::sun::star::drawing::XShape >, 246*b1cdbd2cSJim Jagielski ShapeSharedPtr, 247*b1cdbd2cSJim Jagielski hash< ::com::sun::star::uno::Reference< 248*b1cdbd2cSJim Jagielski ::com::sun::star::drawing::XShape > > > XShapeHash; 249*b1cdbd2cSJim Jagielski 250*b1cdbd2cSJim Jagielski class ShapeComparator 251*b1cdbd2cSJim Jagielski { 252*b1cdbd2cSJim Jagielski public: operator ()(const ShapeSharedPtr & rpS1,const ShapeSharedPtr & rpS2) const253*b1cdbd2cSJim Jagielski bool operator() (const ShapeSharedPtr& rpS1, const ShapeSharedPtr& rpS2 ) const 254*b1cdbd2cSJim Jagielski { 255*b1cdbd2cSJim Jagielski return Shape::lessThanShape::compare(rpS1.get(), rpS2.get()); 256*b1cdbd2cSJim Jagielski } 257*b1cdbd2cSJim Jagielski }; 258*b1cdbd2cSJim Jagielski /** Set of all shapes 259*b1cdbd2cSJim Jagielski */ 260*b1cdbd2cSJim Jagielski private: 261*b1cdbd2cSJim Jagielski typedef ::std::map< ShapeSharedPtr, LayerWeakPtr, ShapeComparator > LayerShapeMap; 262*b1cdbd2cSJim Jagielski typedef ::std::set< ShapeSharedPtr > ShapeUpdateSet; 263*b1cdbd2cSJim Jagielski 264*b1cdbd2cSJim Jagielski 265*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////// 266*b1cdbd2cSJim Jagielski 267*b1cdbd2cSJim Jagielski 268*b1cdbd2cSJim Jagielski /// Adds shape area to containing layer's damage area 269*b1cdbd2cSJim Jagielski void addUpdateArea( ShapeSharedPtr const& rShape ); 270*b1cdbd2cSJim Jagielski 271*b1cdbd2cSJim Jagielski LayerSharedPtr createForegroundLayer() const; 272*b1cdbd2cSJim Jagielski 273*b1cdbd2cSJim Jagielski /** Push changes from updateShapeLayerAssociations() to current layer 274*b1cdbd2cSJim Jagielski 275*b1cdbd2cSJim Jagielski Factored-out method that resizes layer, if necessary, 276*b1cdbd2cSJim Jagielski assigns correct layer priority, and repaints contained shapes. 277*b1cdbd2cSJim Jagielski 278*b1cdbd2cSJim Jagielski @param nCurrLayerIndex 279*b1cdbd2cSJim Jagielski Index of current layer in maLayers 280*b1cdbd2cSJim Jagielski 281*b1cdbd2cSJim Jagielski @param aFirstLayerShape 282*b1cdbd2cSJim Jagielski Valid iterator out of maAllShapes, denoting the first 283*b1cdbd2cSJim Jagielski shape from nCurrLayerIndex 284*b1cdbd2cSJim Jagielski 285*b1cdbd2cSJim Jagielski @param aEndLayerShapes 286*b1cdbd2cSJim Jagielski Valid iterator or end iterator out of maAllShapes, 287*b1cdbd2cSJim Jagielski denoting one-behind-the-last shape of nCurrLayerIndex 288*b1cdbd2cSJim Jagielski */ 289*b1cdbd2cSJim Jagielski void commitLayerChanges( std::size_t nCurrLayerIndex, 290*b1cdbd2cSJim Jagielski LayerShapeMap::const_iterator aFirstLayerShape, 291*b1cdbd2cSJim Jagielski LayerShapeMap::const_iterator aEndLayerShapes ); 292*b1cdbd2cSJim Jagielski 293*b1cdbd2cSJim Jagielski /** Init Shape layers with background layer. 294*b1cdbd2cSJim Jagielski */ 295*b1cdbd2cSJim Jagielski void putShape2BackgroundLayer( LayerShapeMap::value_type& rShapeEntry ); 296*b1cdbd2cSJim Jagielski 297*b1cdbd2cSJim Jagielski /** Commits any pending layer reorg, due to shapes either 298*b1cdbd2cSJim Jagielski entering or leaving animation mode 299*b1cdbd2cSJim Jagielski 300*b1cdbd2cSJim Jagielski @param bBackgroundLayerPainted 301*b1cdbd2cSJim Jagielski When true, LayerManager does not render anything on 302*b1cdbd2cSJim Jagielski the background layer. Use this, if background has been 303*b1cdbd2cSJim Jagielski updated by other means (e.g. slide transition) 304*b1cdbd2cSJim Jagielski */ 305*b1cdbd2cSJim Jagielski void updateShapeLayers( bool bBackgroundLayerPainted ); 306*b1cdbd2cSJim Jagielski 307*b1cdbd2cSJim Jagielski /** Common stuff when adding a shape 308*b1cdbd2cSJim Jagielski */ 309*b1cdbd2cSJim Jagielski void implAddShape( const ShapeSharedPtr& rShape ); 310*b1cdbd2cSJim Jagielski 311*b1cdbd2cSJim Jagielski /** Common stuff when removing a shape 312*b1cdbd2cSJim Jagielski */ 313*b1cdbd2cSJim Jagielski void implRemoveShape( const ShapeSharedPtr& rShape ); 314*b1cdbd2cSJim Jagielski 315*b1cdbd2cSJim Jagielski /** Add or remove views 316*b1cdbd2cSJim Jagielski 317*b1cdbd2cSJim Jagielski Sharing duplicate code from viewAdded and viewRemoved 318*b1cdbd2cSJim Jagielski method. The only point of variation at those places 319*b1cdbd2cSJim Jagielski are removal vs. adding. 320*b1cdbd2cSJim Jagielski */ 321*b1cdbd2cSJim Jagielski template<typename LayerFunc, 322*b1cdbd2cSJim Jagielski typename ShapeFunc> void manageViews( LayerFunc layerFunc, 323*b1cdbd2cSJim Jagielski ShapeFunc shapeFunc ); 324*b1cdbd2cSJim Jagielski 325*b1cdbd2cSJim Jagielski bool updateSprites(); 326*b1cdbd2cSJim Jagielski 327*b1cdbd2cSJim Jagielski /// Registered views 328*b1cdbd2cSJim Jagielski const UnoViewContainer& mrViews; 329*b1cdbd2cSJim Jagielski 330*b1cdbd2cSJim Jagielski /// All layers of this object. Vector owns the layers 331*b1cdbd2cSJim Jagielski LayerVector maLayers; 332*b1cdbd2cSJim Jagielski 333*b1cdbd2cSJim Jagielski /** Contains all shapes with their XShape reference as the key 334*b1cdbd2cSJim Jagielski */ 335*b1cdbd2cSJim Jagielski XShapeHash maXShapeHash; 336*b1cdbd2cSJim Jagielski 337*b1cdbd2cSJim Jagielski /** Set of shapes this LayerManager own 338*b1cdbd2cSJim Jagielski 339*b1cdbd2cSJim Jagielski Contains the same set of shapes as XShapeHash, but is 340*b1cdbd2cSJim Jagielski sorted in z order, for painting and layer 341*b1cdbd2cSJim Jagielski association. Set entries are enriched with two flags 342*b1cdbd2cSJim Jagielski for buffering animation enable/disable changes, and 343*b1cdbd2cSJim Jagielski shape update requests. 344*b1cdbd2cSJim Jagielski */ 345*b1cdbd2cSJim Jagielski LayerShapeMap maAllShapes; 346*b1cdbd2cSJim Jagielski 347*b1cdbd2cSJim Jagielski /** Set of shapes that have requested an update 348*b1cdbd2cSJim Jagielski 349*b1cdbd2cSJim Jagielski When a shape is member of this set, its maShapes entry 350*b1cdbd2cSJim Jagielski has bNeedsUpdate set to true. We maintain this 351*b1cdbd2cSJim Jagielski redundant information for faster update processing. 352*b1cdbd2cSJim Jagielski */ 353*b1cdbd2cSJim Jagielski ShapeUpdateSet maUpdateShapes; 354*b1cdbd2cSJim Jagielski 355*b1cdbd2cSJim Jagielski /** Overall slide bounds (in user coordinate 356*b1cdbd2cSJim Jagielski system). shapes that exceed this boundary are clipped, 357*b1cdbd2cSJim Jagielski thus, layers only need to be of this size. 358*b1cdbd2cSJim Jagielski */ 359*b1cdbd2cSJim Jagielski const basegfx::B2DRange maPageBounds; 360*b1cdbd2cSJim Jagielski 361*b1cdbd2cSJim Jagielski /// Number of shape sprites currenly active on this LayerManager 362*b1cdbd2cSJim Jagielski sal_Int32 mnActiveSprites; 363*b1cdbd2cSJim Jagielski 364*b1cdbd2cSJim Jagielski /// sal_True, if shapes might need to move to different layer 365*b1cdbd2cSJim Jagielski bool mbLayerAssociationDirty; 366*b1cdbd2cSJim Jagielski 367*b1cdbd2cSJim Jagielski /// sal_False when deactivated 368*b1cdbd2cSJim Jagielski bool mbActive; 369*b1cdbd2cSJim Jagielski 370*b1cdbd2cSJim Jagielski /** When true, all sprite animations run in the foreground. That 371*b1cdbd2cSJim Jagielski is, no extra layers are created, and the slideshow runs 372*b1cdbd2cSJim Jagielski potentially faster. 373*b1cdbd2cSJim Jagielski */ 374*b1cdbd2cSJim Jagielski bool mbDisableAnimationZOrder; 375*b1cdbd2cSJim Jagielski }; 376*b1cdbd2cSJim Jagielski 377*b1cdbd2cSJim Jagielski typedef ::boost::shared_ptr< LayerManager > LayerManagerSharedPtr; 378*b1cdbd2cSJim Jagielski } 379*b1cdbd2cSJim Jagielski } 380*b1cdbd2cSJim Jagielski 381*b1cdbd2cSJim Jagielski #endif /* INCLUDED_SLIDESHOW_LAYERMANAGER_HXX */ 382