1*2d788491SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*2d788491SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*2d788491SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*2d788491SAndrew Rist  * distributed with this work for additional information
6*2d788491SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*2d788491SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*2d788491SAndrew Rist  * "License"); you may not use this file except in compliance
9*2d788491SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*2d788491SAndrew Rist  *
11*2d788491SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*2d788491SAndrew Rist  *
13*2d788491SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*2d788491SAndrew Rist  * software distributed under the License is distributed on an
15*2d788491SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*2d788491SAndrew Rist  * KIND, either express or implied.  See the License for the
17*2d788491SAndrew Rist  * specific language governing permissions and limitations
18*2d788491SAndrew Rist  * under the License.
19*2d788491SAndrew Rist  *
20*2d788491SAndrew Rist  *************************************************************/
21*2d788491SAndrew Rist 
22*2d788491SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #ifndef _CPPCANVAS_IMPLSPRITECANVAS_HXX
25cdf0e10cSrcweir #define _CPPCANVAS_IMPLSPRITECANVAS_HXX
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #ifndef _COM_SUN_STAR_RENDERING_XSPRITECANVAS_HPP__
28cdf0e10cSrcweir #include <com/sun/star/rendering/XSpriteCanvas.hpp>
29cdf0e10cSrcweir #endif
30cdf0e10cSrcweir #include <basegfx/vector/b2dsize.hxx>
31cdf0e10cSrcweir #include <basegfx/matrix/b2dhommatrix.hxx>
32cdf0e10cSrcweir 
33cdf0e10cSrcweir #ifndef BOOST_SHARED_PTR_HPP_INCLUDED
34cdf0e10cSrcweir #include <boost/shared_ptr.hpp>
35cdf0e10cSrcweir #endif
36cdf0e10cSrcweir 
37cdf0e10cSrcweir 
38cdf0e10cSrcweir #include <cppcanvas/spritecanvas.hxx>
39cdf0e10cSrcweir 
40cdf0e10cSrcweir #include <implbitmapcanvas.hxx>
41cdf0e10cSrcweir 
42cdf0e10cSrcweir 
43cdf0e10cSrcweir namespace cppcanvas
44cdf0e10cSrcweir {
45cdf0e10cSrcweir     namespace internal
46cdf0e10cSrcweir     {
47cdf0e10cSrcweir         class ImplSpriteCanvas : public virtual SpriteCanvas, protected virtual ImplBitmapCanvas
48cdf0e10cSrcweir         {
49cdf0e10cSrcweir         public:
50cdf0e10cSrcweir             ImplSpriteCanvas( const ::com::sun::star::uno::Reference<
51cdf0e10cSrcweir                               	::com::sun::star::rendering::XSpriteCanvas >& rCanvas );
52cdf0e10cSrcweir             ImplSpriteCanvas(const ImplSpriteCanvas&);
53cdf0e10cSrcweir 
54cdf0e10cSrcweir             virtual ~ImplSpriteCanvas();
55cdf0e10cSrcweir 
56cdf0e10cSrcweir             virtual void 					setTransformation( const ::basegfx::B2DHomMatrix& rMatrix );
57cdf0e10cSrcweir 
58cdf0e10cSrcweir             virtual bool					updateScreen( bool bUpdateAll ) const;
59cdf0e10cSrcweir 
60cdf0e10cSrcweir             virtual CustomSpriteSharedPtr 	createCustomSprite( const ::basegfx::B2DSize& ) const;
61cdf0e10cSrcweir             virtual SpriteSharedPtr 		createClonedSprite( const SpriteSharedPtr& ) const;
62cdf0e10cSrcweir 
63cdf0e10cSrcweir             SpriteSharedPtr					createSpriteFromBitmaps(
64cdf0e10cSrcweir                 const ::com::sun::star::uno::Sequence<
65cdf0e10cSrcweir                 	::com::sun::star::uno::Reference<
66cdf0e10cSrcweir                 		::com::sun::star::rendering::XBitmap > >& 	animationBitmaps,
67cdf0e10cSrcweir                 sal_Int8 													interpolationMode );
68cdf0e10cSrcweir 
69cdf0e10cSrcweir             virtual CanvasSharedPtr			clone() const;
70cdf0e10cSrcweir 
71cdf0e10cSrcweir             virtual ::com::sun::star::uno::Reference<
72cdf0e10cSrcweir                 ::com::sun::star::rendering::XSpriteCanvas > 	getUNOSpriteCanvas() const;
73cdf0e10cSrcweir 
74cdf0e10cSrcweir             /** This class passes the view transformation
75cdf0e10cSrcweir                 to child sprites
76cdf0e10cSrcweir 
77cdf0e10cSrcweir                 This helper class is necessary, because the
78cdf0e10cSrcweir                 ImplSpriteCanvas object cannot hand out shared ptrs of
79cdf0e10cSrcweir                 itself, but has somehow pass an object to child
80cdf0e10cSrcweir                 sprites those can query for the canvas' view transform.
81cdf0e10cSrcweir              */
82cdf0e10cSrcweir             class TransformationArbiter
83cdf0e10cSrcweir             {
84cdf0e10cSrcweir             public:
85cdf0e10cSrcweir                 TransformationArbiter();
86cdf0e10cSrcweir 
87cdf0e10cSrcweir                 void 						setTransformation( const ::basegfx::B2DHomMatrix& rViewTransform );
88cdf0e10cSrcweir                 ::basegfx::B2DHomMatrix  	getTransformation() const;
89cdf0e10cSrcweir 
90cdf0e10cSrcweir             private:
91cdf0e10cSrcweir                 ::basegfx::B2DHomMatrix		maTransformation;
92cdf0e10cSrcweir             };
93cdf0e10cSrcweir 
94cdf0e10cSrcweir             typedef ::boost::shared_ptr< TransformationArbiter > TransformationArbiterSharedPtr;
95cdf0e10cSrcweir 
96cdf0e10cSrcweir         private:
97cdf0e10cSrcweir             // default: disabled assignment
98cdf0e10cSrcweir             ImplSpriteCanvas& operator=( const ImplSpriteCanvas& );
99cdf0e10cSrcweir 
100cdf0e10cSrcweir             const ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XSpriteCanvas > 	mxSpriteCanvas;
101cdf0e10cSrcweir             TransformationArbiterSharedPtr															mpTransformArbiter;
102cdf0e10cSrcweir         };
103cdf0e10cSrcweir     }
104cdf0e10cSrcweir }
105cdf0e10cSrcweir 
106cdf0e10cSrcweir #endif /* _CPPCANVAS_IMPLSPRITECANVAS_HXX */
107