1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir #ifndef INCLUDED_SLIDESHOW_DRAWSHAPE_HXX
29*cdf0e10cSrcweir #define INCLUDED_SLIDESHOW_DRAWSHAPE_HXX
30*cdf0e10cSrcweir 
31*cdf0e10cSrcweir #include <osl/diagnose.hxx>
32*cdf0e10cSrcweir #include <com/sun/star/drawing/XShape.hpp>
33*cdf0e10cSrcweir 
34*cdf0e10cSrcweir #include "attributableshape.hxx"
35*cdf0e10cSrcweir #include "doctreenodesupplier.hxx"
36*cdf0e10cSrcweir #include "gdimtftools.hxx"
37*cdf0e10cSrcweir #include "viewshape.hxx"
38*cdf0e10cSrcweir #include "hyperlinkarea.hxx"
39*cdf0e10cSrcweir 
40*cdf0e10cSrcweir #include <boost/optional.hpp>
41*cdf0e10cSrcweir #include <boost/shared_ptr.hpp>
42*cdf0e10cSrcweir #include <boost/weak_ptr.hpp>
43*cdf0e10cSrcweir #include <set>
44*cdf0e10cSrcweir #include <vector>
45*cdf0e10cSrcweir 
46*cdf0e10cSrcweir class Graphic;
47*cdf0e10cSrcweir 
48*cdf0e10cSrcweir namespace slideshow
49*cdf0e10cSrcweir {
50*cdf0e10cSrcweir     namespace internal
51*cdf0e10cSrcweir     {
52*cdf0e10cSrcweir         class  Activity;
53*cdf0e10cSrcweir         struct SlideShowContext;
54*cdf0e10cSrcweir         class  DrawShapeSubsetting;
55*cdf0e10cSrcweir         class  DrawShape;
56*cdf0e10cSrcweir         typedef ::boost::shared_ptr< DrawShape > DrawShapeSharedPtr;
57*cdf0e10cSrcweir 
58*cdf0e10cSrcweir         /** This class is the representation of a draw document's
59*cdf0e10cSrcweir             XShape, and implements the Shape, AnimatableShape, and
60*cdf0e10cSrcweir             AttributableShape interfaces.
61*cdf0e10cSrcweir 
62*cdf0e10cSrcweir             @attention this class is to be treated 'final', i.e. one
63*cdf0e10cSrcweir             should not derive from it.
64*cdf0e10cSrcweir          */
65*cdf0e10cSrcweir         class DrawShape : public AttributableShape,
66*cdf0e10cSrcweir                           public DocTreeNodeSupplier,
67*cdf0e10cSrcweir                           public HyperlinkArea,
68*cdf0e10cSrcweir                           public ::osl::DebugBase<DrawShape>
69*cdf0e10cSrcweir         {
70*cdf0e10cSrcweir         public:
71*cdf0e10cSrcweir             /** Create a shape for the given XShape
72*cdf0e10cSrcweir 
73*cdf0e10cSrcweir                 @param xShape
74*cdf0e10cSrcweir                 The XShape to represent.
75*cdf0e10cSrcweir 
76*cdf0e10cSrcweir                 @param xContainingPage
77*cdf0e10cSrcweir                 The page that contains this shape. Needed for proper
78*cdf0e10cSrcweir                 import (currently, the UnoGraphicExporter needs this
79*cdf0e10cSrcweir                 information).
80*cdf0e10cSrcweir 
81*cdf0e10cSrcweir                 @param nPrio
82*cdf0e10cSrcweir                 Externally-determined shape priority (used e.g. for
83*cdf0e10cSrcweir                 paint ordering). This number _must be_ unique!
84*cdf0e10cSrcweir 
85*cdf0e10cSrcweir                 @param bForeignSource
86*cdf0e10cSrcweir                 When true, the source of the shape metafile might be a
87*cdf0e10cSrcweir                 foreign application. The metafile is checked against
88*cdf0e10cSrcweir                 unsupported content, and, if necessary, returned as a
89*cdf0e10cSrcweir                 pre-rendererd bitmap.
90*cdf0e10cSrcweir              */
91*cdf0e10cSrcweir             static DrawShapeSharedPtr create(
92*cdf0e10cSrcweir                 const ::com::sun::star::uno::Reference<
93*cdf0e10cSrcweir                    ::com::sun::star::drawing::XShape >&    xShape,
94*cdf0e10cSrcweir                 const ::com::sun::star::uno::Reference<
95*cdf0e10cSrcweir                    ::com::sun::star::drawing::XDrawPage >& xContainingPage,
96*cdf0e10cSrcweir                 double                                     nPrio,
97*cdf0e10cSrcweir                 bool                                       bForeignSource,
98*cdf0e10cSrcweir                 const SlideShowContext&                    rContext ); // throw ShapeLoadFailedException;
99*cdf0e10cSrcweir 
100*cdf0e10cSrcweir             /** Create a shape for the given XShape and graphic content
101*cdf0e10cSrcweir 
102*cdf0e10cSrcweir                 @param xShape
103*cdf0e10cSrcweir                 The XShape to represent.
104*cdf0e10cSrcweir 
105*cdf0e10cSrcweir                 @param xContainingPage
106*cdf0e10cSrcweir                 The page that contains this shape. Needed for proper
107*cdf0e10cSrcweir                 import (currently, the UnoGraphicExporter needs this
108*cdf0e10cSrcweir                 information).
109*cdf0e10cSrcweir 
110*cdf0e10cSrcweir                 @param nPrio
111*cdf0e10cSrcweir                 Externally-determined shape priority (used e.g. for
112*cdf0e10cSrcweir                 paint ordering). This number _must be_ unique!
113*cdf0e10cSrcweir 
114*cdf0e10cSrcweir                 @param rGraphic
115*cdf0e10cSrcweir                 Graphic to display in the shape's bound rect. If this
116*cdf0e10cSrcweir                 Graphic contains animatable content, the created
117*cdf0e10cSrcweir                 DrawShape will register itself for intrinsic animation
118*cdf0e10cSrcweir                 events.
119*cdf0e10cSrcweir              */
120*cdf0e10cSrcweir             static DrawShapeSharedPtr create(
121*cdf0e10cSrcweir                 const ::com::sun::star::uno::Reference<
122*cdf0e10cSrcweir                    ::com::sun::star::drawing::XShape >&    xShape,
123*cdf0e10cSrcweir                 const ::com::sun::star::uno::Reference<
124*cdf0e10cSrcweir                    ::com::sun::star::drawing::XDrawPage >& xContainingPage,
125*cdf0e10cSrcweir                 double                                     nPrio,
126*cdf0e10cSrcweir                 const Graphic&                             rGraphic,
127*cdf0e10cSrcweir                 const SlideShowContext&                    rContext ); // throw ShapeLoadFailedException;
128*cdf0e10cSrcweir 
129*cdf0e10cSrcweir             virtual ::com::sun::star::uno::Reference<
130*cdf0e10cSrcweir                 ::com::sun::star::drawing::XShape > getXShape() const;
131*cdf0e10cSrcweir 
132*cdf0e10cSrcweir             virtual ~DrawShape();
133*cdf0e10cSrcweir 
134*cdf0e10cSrcweir 
135*cdf0e10cSrcweir             // View layer methods
136*cdf0e10cSrcweir             //------------------------------------------------------------------
137*cdf0e10cSrcweir 
138*cdf0e10cSrcweir             virtual void addViewLayer( const ViewLayerSharedPtr&    rNewLayer,
139*cdf0e10cSrcweir                                        bool                         bRedrawLayer );
140*cdf0e10cSrcweir             virtual bool removeViewLayer( const ViewLayerSharedPtr& rNewLayer );
141*cdf0e10cSrcweir             virtual bool clearAllViewLayers();
142*cdf0e10cSrcweir 
143*cdf0e10cSrcweir             // attribute methods
144*cdf0e10cSrcweir             //------------------------------------------------------------------
145*cdf0e10cSrcweir 
146*cdf0e10cSrcweir             virtual ShapeAttributeLayerSharedPtr createAttributeLayer();
147*cdf0e10cSrcweir             virtual bool revokeAttributeLayer( const ShapeAttributeLayerSharedPtr& rLayer );
148*cdf0e10cSrcweir             virtual ShapeAttributeLayerSharedPtr getTopmostAttributeLayer() const;
149*cdf0e10cSrcweir             virtual void setVisibility( bool bVisible );
150*cdf0e10cSrcweir             virtual ::basegfx::B2DRectangle getBounds() const;
151*cdf0e10cSrcweir             virtual ::basegfx::B2DRectangle getDomBounds() const;
152*cdf0e10cSrcweir             virtual ::basegfx::B2DRectangle getUpdateArea() const;
153*cdf0e10cSrcweir             virtual bool isVisible() const;
154*cdf0e10cSrcweir             virtual double getPriority() const;
155*cdf0e10cSrcweir 
156*cdf0e10cSrcweir 
157*cdf0e10cSrcweir             // animation methods
158*cdf0e10cSrcweir             //------------------------------------------------------------------
159*cdf0e10cSrcweir 
160*cdf0e10cSrcweir             virtual void enterAnimationMode();
161*cdf0e10cSrcweir             virtual void leaveAnimationMode();
162*cdf0e10cSrcweir             virtual bool isBackgroundDetached() const;
163*cdf0e10cSrcweir 
164*cdf0e10cSrcweir             // render methods
165*cdf0e10cSrcweir             //------------------------------------------------------------------
166*cdf0e10cSrcweir 
167*cdf0e10cSrcweir             virtual bool update() const;
168*cdf0e10cSrcweir             virtual bool render() const;
169*cdf0e10cSrcweir             virtual bool isContentChanged() const;
170*cdf0e10cSrcweir 
171*cdf0e10cSrcweir             // Sub item specialities
172*cdf0e10cSrcweir             //------------------------------------------------------------------
173*cdf0e10cSrcweir 
174*cdf0e10cSrcweir             virtual const DocTreeNodeSupplier&  getTreeNodeSupplier() const;
175*cdf0e10cSrcweir             virtual DocTreeNodeSupplier&        getTreeNodeSupplier();
176*cdf0e10cSrcweir 
177*cdf0e10cSrcweir             virtual DocTreeNode                 getSubsetNode() const;
178*cdf0e10cSrcweir             virtual AttributableShapeSharedPtr  getSubset( const DocTreeNode& rTreeNode ) const;
179*cdf0e10cSrcweir             virtual bool                        createSubset( AttributableShapeSharedPtr&   o_rSubset,
180*cdf0e10cSrcweir                                                               const DocTreeNode&            rTreeNode );
181*cdf0e10cSrcweir             virtual bool                        revokeSubset( const AttributableShapeSharedPtr& rShape );
182*cdf0e10cSrcweir 
183*cdf0e10cSrcweir 
184*cdf0e10cSrcweir             // DocTreeNodeSupplier methods
185*cdf0e10cSrcweir             //------------------------------------------------------------------
186*cdf0e10cSrcweir 
187*cdf0e10cSrcweir             virtual sal_Int32   getNumberOfTreeNodes        ( DocTreeNode::NodeType eNodeType ) const; // throw ShapeLoadFailedException;
188*cdf0e10cSrcweir             virtual DocTreeNode getTreeNode                 ( sal_Int32             nNodeIndex,
189*cdf0e10cSrcweir                                                               DocTreeNode::NodeType eNodeType ) const; // throw ShapeLoadFailedException;
190*cdf0e10cSrcweir             virtual sal_Int32   getNumberOfSubsetTreeNodes  ( const DocTreeNode&    rParentNode,
191*cdf0e10cSrcweir                                                               DocTreeNode::NodeType eNodeType ) const; // throw ShapeLoadFailedException;
192*cdf0e10cSrcweir             virtual DocTreeNode getSubsetTreeNode           ( const DocTreeNode&    rParentNode,
193*cdf0e10cSrcweir                                                               sal_Int32             nNodeIndex,
194*cdf0e10cSrcweir                                                               DocTreeNode::NodeType eNodeType ) const; // throw ShapeLoadFailedException;
195*cdf0e10cSrcweir 
196*cdf0e10cSrcweir             // HyperlinkArea methods
197*cdf0e10cSrcweir             //------------------------------------------------------------------
198*cdf0e10cSrcweir 
199*cdf0e10cSrcweir             virtual HyperlinkRegions getHyperlinkRegions() const;
200*cdf0e10cSrcweir             virtual double getHyperlinkPriority() const;
201*cdf0e10cSrcweir 
202*cdf0e10cSrcweir 
203*cdf0e10cSrcweir             // intrinsic animation methods
204*cdf0e10cSrcweir             //------------------------------------------------------------------
205*cdf0e10cSrcweir 
206*cdf0e10cSrcweir             /** Display next frame of an intrinsic animation.
207*cdf0e10cSrcweir 
208*cdf0e10cSrcweir                 Used by IntrinsicAnimationActivity, to show the next
209*cdf0e10cSrcweir                 animation frame.
210*cdf0e10cSrcweir              */
211*cdf0e10cSrcweir             bool setIntrinsicAnimationFrame( ::std::size_t nCurrFrame );
212*cdf0e10cSrcweir 
213*cdf0e10cSrcweir             /** forces the drawshape to load and return a specially
214*cdf0e10cSrcweir                 crafted metafile, usable to display drawing layer text
215*cdf0e10cSrcweir                 animations.
216*cdf0e10cSrcweir             */
217*cdf0e10cSrcweir             GDIMetaFileSharedPtr forceScrollTextMetaFile();
218*cdf0e10cSrcweir 
219*cdf0e10cSrcweir         private:
220*cdf0e10cSrcweir             /** Create a shape for the given XShape
221*cdf0e10cSrcweir 
222*cdf0e10cSrcweir                 @param xShape
223*cdf0e10cSrcweir                 The XShape to represent.
224*cdf0e10cSrcweir 
225*cdf0e10cSrcweir                 @param xContainingPage
226*cdf0e10cSrcweir                 The page that contains this shape. Needed for proper
227*cdf0e10cSrcweir                 import (currently, the UnoGraphicExporter needs this
228*cdf0e10cSrcweir                 information).
229*cdf0e10cSrcweir 
230*cdf0e10cSrcweir                 @param nPrio
231*cdf0e10cSrcweir                 Externally-determined shape priority (used e.g. for
232*cdf0e10cSrcweir                 paint ordering). This number _must be_ unique!
233*cdf0e10cSrcweir 
234*cdf0e10cSrcweir                 @param bForeignSource
235*cdf0e10cSrcweir                 When true, the source of the shape metafile might be a
236*cdf0e10cSrcweir                 foreign application. The metafile is checked against
237*cdf0e10cSrcweir                 unsupported content, and, if necessary, returned as a
238*cdf0e10cSrcweir                 pre-rendererd bitmap.
239*cdf0e10cSrcweir              */
240*cdf0e10cSrcweir             DrawShape( const ::com::sun::star::uno::Reference<
241*cdf0e10cSrcweir                             ::com::sun::star::drawing::XShape >&    xShape,
242*cdf0e10cSrcweir                        const ::com::sun::star::uno::Reference<
243*cdf0e10cSrcweir                             ::com::sun::star::drawing::XDrawPage >& xContainingPage,
244*cdf0e10cSrcweir                        double                                       nPrio,
245*cdf0e10cSrcweir                        bool                                         bForeignSource,
246*cdf0e10cSrcweir                        const SlideShowContext&                      rContext ); // throw ShapeLoadFailedException;
247*cdf0e10cSrcweir 
248*cdf0e10cSrcweir             /** Create a shape for the given XShape and graphic content
249*cdf0e10cSrcweir 
250*cdf0e10cSrcweir                 @param xShape
251*cdf0e10cSrcweir                 The XShape to represent.
252*cdf0e10cSrcweir 
253*cdf0e10cSrcweir                 @param xContainingPage
254*cdf0e10cSrcweir                 The page that contains this shape. Needed for proper
255*cdf0e10cSrcweir                 import (currently, the UnoGraphicExporter needs this
256*cdf0e10cSrcweir                 information).
257*cdf0e10cSrcweir 
258*cdf0e10cSrcweir                 @param nPrio
259*cdf0e10cSrcweir                 Externally-determined shape priority (used e.g. for
260*cdf0e10cSrcweir                 paint ordering). This number _must be_ unique!
261*cdf0e10cSrcweir 
262*cdf0e10cSrcweir                 @param rGraphic
263*cdf0e10cSrcweir                 Graphic to display in the shape's bound rect. If this
264*cdf0e10cSrcweir                 Graphic contains animatable content, the created
265*cdf0e10cSrcweir                 DrawShape will register itself for intrinsic animation
266*cdf0e10cSrcweir                 events.
267*cdf0e10cSrcweir              */
268*cdf0e10cSrcweir             DrawShape( const ::com::sun::star::uno::Reference<
269*cdf0e10cSrcweir                             ::com::sun::star::drawing::XShape >&    xShape,
270*cdf0e10cSrcweir                        const ::com::sun::star::uno::Reference<
271*cdf0e10cSrcweir                             ::com::sun::star::drawing::XDrawPage >& xContainingPage,
272*cdf0e10cSrcweir                        double                                       nPrio,
273*cdf0e10cSrcweir                        const Graphic&                               rGraphic,
274*cdf0e10cSrcweir                        const SlideShowContext&                      rContext ); // throw ShapeLoadFailedException;
275*cdf0e10cSrcweir 
276*cdf0e10cSrcweir             /** Private copy constructor
277*cdf0e10cSrcweir 
278*cdf0e10cSrcweir                 Used to create subsetted shapes
279*cdf0e10cSrcweir              */
280*cdf0e10cSrcweir             DrawShape( const DrawShape&, const DocTreeNode& rTreeNode, double nPrio );
281*cdf0e10cSrcweir 
282*cdf0e10cSrcweir             int  getUpdateFlags() const;
283*cdf0e10cSrcweir             bool implRender( int nUpdateFlags ) const;
284*cdf0e10cSrcweir             void updateStateIds() const;
285*cdf0e10cSrcweir 
286*cdf0e10cSrcweir             ViewShape::RenderArgs   getViewRenderArgs() const;
287*cdf0e10cSrcweir             ::basegfx::B2DRectangle getActualUnitShapeBounds() const;
288*cdf0e10cSrcweir 
289*cdf0e10cSrcweir             void ensureVerboseMtfComments() const;
290*cdf0e10cSrcweir             bool hasIntrinsicAnimation() const;
291*cdf0e10cSrcweir             bool hasHyperlinks() const;
292*cdf0e10cSrcweir             void prepareHyperlinkIndices() const;
293*cdf0e10cSrcweir 
294*cdf0e10cSrcweir             /// The associated XShape
295*cdf0e10cSrcweir             ::com::sun::star::uno::Reference<
296*cdf0e10cSrcweir                     ::com::sun::star::drawing::XShape >                             mxShape;
297*cdf0e10cSrcweir             ::com::sun::star::uno::Reference<
298*cdf0e10cSrcweir                     ::com::sun::star::drawing::XDrawPage >                          mxPage;
299*cdf0e10cSrcweir 
300*cdf0e10cSrcweir             /** A vector of metafiles actually representing the Shape.
301*cdf0e10cSrcweir 
302*cdf0e10cSrcweir                 If this shape is not animated, only a single entry is
303*cdf0e10cSrcweir                 available.
304*cdf0e10cSrcweir              */
305*cdf0e10cSrcweir             mutable VectorOfMtfAnimationFrames                                      maAnimationFrames;
306*cdf0e10cSrcweir             ::std::size_t                                                           mnCurrFrame;
307*cdf0e10cSrcweir 
308*cdf0e10cSrcweir             /// Metafile of currently active frame (static for shapes w/o intrinsic animation)
309*cdf0e10cSrcweir             mutable GDIMetaFileSharedPtr                                            mpCurrMtf;
310*cdf0e10cSrcweir 
311*cdf0e10cSrcweir             /// loadflags of current meta file
312*cdf0e10cSrcweir             mutable int                                                             mnCurrMtfLoadFlags;
313*cdf0e10cSrcweir 
314*cdf0e10cSrcweir             /// Contains the current shape bounds, in unit rect space
315*cdf0e10cSrcweir             mutable ::boost::optional<basegfx::B2DRectangle>                        maCurrentShapeUnitBounds;
316*cdf0e10cSrcweir 
317*cdf0e10cSrcweir             // The attributes of this Shape
318*cdf0e10cSrcweir             const double                                                            mnPriority;
319*cdf0e10cSrcweir             ::basegfx::B2DRectangle                                                 maBounds; // always needed for rendering.
320*cdf0e10cSrcweir                                                                                               // for subset shapes, this member
321*cdf0e10cSrcweir                                                                                               // might change when views are
322*cdf0e10cSrcweir                                                                                               // added, as minimal bounds are
323*cdf0e10cSrcweir                                                                                               // calculated
324*cdf0e10cSrcweir 
325*cdf0e10cSrcweir             // Pointer to modifiable shape attributes
326*cdf0e10cSrcweir             ShapeAttributeLayerSharedPtr                                            mpAttributeLayer; // only created lazily
327*cdf0e10cSrcweir 
328*cdf0e10cSrcweir             // held here, to signal our destruction
329*cdf0e10cSrcweir             boost::weak_ptr<Activity>                                               mpIntrinsicAnimationActivity;
330*cdf0e10cSrcweir 
331*cdf0e10cSrcweir             // The attribute states, to detect attribute changes,
332*cdf0e10cSrcweir             // without buffering and querying each single attribute
333*cdf0e10cSrcweir             mutable State::StateId                                                  mnAttributeTransformationState;
334*cdf0e10cSrcweir             mutable State::StateId                                                  mnAttributeClipState;
335*cdf0e10cSrcweir             mutable State::StateId                                                  mnAttributeAlphaState;
336*cdf0e10cSrcweir             mutable State::StateId                                                  mnAttributePositionState;
337*cdf0e10cSrcweir             mutable State::StateId                                                  mnAttributeContentState;
338*cdf0e10cSrcweir             mutable State::StateId                                                  mnAttributeVisibilityState;
339*cdf0e10cSrcweir 
340*cdf0e10cSrcweir             /// the list of active view shapes (one for each registered view layer)
341*cdf0e10cSrcweir             typedef ::std::vector< ViewShapeSharedPtr > ViewShapeVector;
342*cdf0e10cSrcweir             ViewShapeVector                                                         maViewShapes;
343*cdf0e10cSrcweir 
344*cdf0e10cSrcweir             ::com::sun::star::uno::Reference<
345*cdf0e10cSrcweir                 ::com::sun::star::uno::XComponentContext>                           mxComponentContext;
346*cdf0e10cSrcweir 
347*cdf0e10cSrcweir             /// hyperlink support
348*cdf0e10cSrcweir             typedef ::std::pair<sal_Int32 /* mtf start */,
349*cdf0e10cSrcweir                                 sal_Int32 /* mtf end */> HyperlinkIndexPair;
350*cdf0e10cSrcweir             typedef ::std::vector<HyperlinkIndexPair> HyperlinkIndexPairVector;
351*cdf0e10cSrcweir             mutable HyperlinkIndexPairVector                                        maHyperlinkIndices;
352*cdf0e10cSrcweir             mutable HyperlinkRegions                                                maHyperlinkRegions;
353*cdf0e10cSrcweir 
354*cdf0e10cSrcweir             /// Delegated subset handling
355*cdf0e10cSrcweir             mutable DrawShapeSubsetting                                             maSubsetting;
356*cdf0e10cSrcweir 
357*cdf0e10cSrcweir             /// Whether this shape is currently in animation mode (value != 0)
358*cdf0e10cSrcweir             int                                                                     mnIsAnimatedCount;
359*cdf0e10cSrcweir 
360*cdf0e10cSrcweir             /// Number of times the bitmap animation shall loop
361*cdf0e10cSrcweir             ::std::size_t                                                           mnAnimationLoopCount;
362*cdf0e10cSrcweir 
363*cdf0e10cSrcweir             /// Cycle mode for bitmap animation
364*cdf0e10cSrcweir             CycleMode                                                               meCycleMode;
365*cdf0e10cSrcweir 
366*cdf0e10cSrcweir             /// Whether shape is visible (without attribute layers)
367*cdf0e10cSrcweir             bool                                                                    mbIsVisible;
368*cdf0e10cSrcweir 
369*cdf0e10cSrcweir             /// Whether redraw is necessary, regardless of state ids
370*cdf0e10cSrcweir             mutable bool                                                            mbForceUpdate;
371*cdf0e10cSrcweir 
372*cdf0e10cSrcweir             /// Whether attribute layer was revoked (making a redraw necessary)
373*cdf0e10cSrcweir             mutable bool                                                            mbAttributeLayerRevoked;
374*cdf0e10cSrcweir 
375*cdf0e10cSrcweir             /// whether a drawing layer animation has to be performed
376*cdf0e10cSrcweir             bool                                                                    mbDrawingLayerAnim;
377*cdf0e10cSrcweir 
378*cdf0e10cSrcweir         };
379*cdf0e10cSrcweir     }
380*cdf0e10cSrcweir }
381*cdf0e10cSrcweir 
382*cdf0e10cSrcweir #endif /* INCLUDED_SLIDESHOW_DRAWSHAPE_HXX */
383