1*91c99ff4SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*91c99ff4SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*91c99ff4SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*91c99ff4SAndrew Rist  * distributed with this work for additional information
6*91c99ff4SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*91c99ff4SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*91c99ff4SAndrew Rist  * "License"); you may not use this file except in compliance
9*91c99ff4SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*91c99ff4SAndrew Rist  *
11*91c99ff4SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*91c99ff4SAndrew Rist  *
13*91c99ff4SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*91c99ff4SAndrew Rist  * software distributed under the License is distributed on an
15*91c99ff4SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*91c99ff4SAndrew Rist  * KIND, either express or implied.  See the License for the
17*91c99ff4SAndrew Rist  * specific language governing permissions and limitations
18*91c99ff4SAndrew Rist  * under the License.
19*91c99ff4SAndrew Rist  *
20*91c99ff4SAndrew Rist  *************************************************************/
21*91c99ff4SAndrew Rist 
22*91c99ff4SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #ifndef _CAIROCANVAS_CANVASHELPER_HXX_
25cdf0e10cSrcweir #define _CAIROCANVAS_CANVASHELPER_HXX_
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include <com/sun/star/rendering/XCanvas.hpp>
28cdf0e10cSrcweir #include <com/sun/star/rendering/XIntegerBitmap.hpp>
29cdf0e10cSrcweir 
30cdf0e10cSrcweir #include <basegfx/vector/b2isize.hxx>
31cdf0e10cSrcweir #include <basegfx/vector/b2dsize.hxx>
32cdf0e10cSrcweir #include <com/sun/star/rendering/XLinePolyPolygon2D.hpp>
33cdf0e10cSrcweir 
34cdf0e10cSrcweir #include <boost/utility.hpp>
35cdf0e10cSrcweir 
36cdf0e10cSrcweir #include "cairo_cairo.hxx"
37cdf0e10cSrcweir #include "cairo_surfaceprovider.hxx"
38cdf0e10cSrcweir 
39cdf0e10cSrcweir class VirtualDevice;
40cdf0e10cSrcweir 
41cdf0e10cSrcweir namespace basegfx {
42cdf0e10cSrcweir     class B2DPolyPolygon;
43cdf0e10cSrcweir }
44cdf0e10cSrcweir 
45cdf0e10cSrcweir namespace cairocanvas
46cdf0e10cSrcweir {
47cdf0e10cSrcweir     class SpriteCanvas;
48cdf0e10cSrcweir 
49cdf0e10cSrcweir 	enum Operation {
50cdf0e10cSrcweir 	    Stroke,
51cdf0e10cSrcweir 	    Fill,
52cdf0e10cSrcweir 	    Clip
53cdf0e10cSrcweir 	};
54cdf0e10cSrcweir 
55cdf0e10cSrcweir     class CanvasHelper : private ::boost::noncopyable
56cdf0e10cSrcweir     {
57cdf0e10cSrcweir     public:
58cdf0e10cSrcweir         CanvasHelper();
59cdf0e10cSrcweir 
60cdf0e10cSrcweir         /// Release all references
61cdf0e10cSrcweir         void disposing();
62cdf0e10cSrcweir 
63cdf0e10cSrcweir 		/** Initialize canvas helper
64cdf0e10cSrcweir 
65cdf0e10cSrcweir         	This method late-initializes the canvas helper, providing
66cdf0e10cSrcweir         	it with the necessary device and size. Note that the
67cdf0e10cSrcweir         	CanvasHelper does <em>not</em> take ownership of the
68cdf0e10cSrcweir         	passed rDevice reference, nor does it perform any
69cdf0e10cSrcweir         	reference counting. Thus, to prevent the reference counted
70cdf0e10cSrcweir         	SpriteCanvas object from deletion, the user of this class
71cdf0e10cSrcweir         	is responsible for holding ref-counted references itself!
72cdf0e10cSrcweir 
73cdf0e10cSrcweir             @param rSizePixel
74cdf0e10cSrcweir             Size of the output surface in pixel.
75cdf0e10cSrcweir 
76cdf0e10cSrcweir         	@param rDevice
77cdf0e10cSrcweir             Reference device this canvas is associated with
78cdf0e10cSrcweir 
79cdf0e10cSrcweir          */
80cdf0e10cSrcweir         void init( const ::basegfx::B2ISize& rSizePixel,
81cdf0e10cSrcweir                    SurfaceProvider&          rSurfaceProvider,
82cdf0e10cSrcweir                    ::com::sun::star::rendering::XGraphicDevice* pDevice );
83cdf0e10cSrcweir 
84cdf0e10cSrcweir         void setSize( const ::basegfx::B2ISize& rSize );
85cdf0e10cSrcweir         void setSurface( const ::cairo::SurfaceSharedPtr& pSurface, bool bHasAlpha );
86cdf0e10cSrcweir 
87cdf0e10cSrcweir         // CanvasHelper functionality
88cdf0e10cSrcweir         // ==========================
89cdf0e10cSrcweir 
90cdf0e10cSrcweir         // XCanvas (only providing, not implementing the
91cdf0e10cSrcweir         // interface. Also note subtle method parameter differences)
92cdf0e10cSrcweir         void clear();
93cdf0e10cSrcweir         void drawPoint( const ::com::sun::star::rendering::XCanvas* 	pCanvas,
94cdf0e10cSrcweir                         const ::com::sun::star::geometry::RealPoint2D& 	aPoint,
95cdf0e10cSrcweir                         const ::com::sun::star::rendering::ViewState& 	viewState,
96cdf0e10cSrcweir                         const ::com::sun::star::rendering::RenderState& renderState );
97cdf0e10cSrcweir         void drawLine( const ::com::sun::star::rendering::XCanvas* 		pCanvas,
98cdf0e10cSrcweir                        const ::com::sun::star::geometry::RealPoint2D& 	aStartPoint,
99cdf0e10cSrcweir                        const ::com::sun::star::geometry::RealPoint2D& 	aEndPoint,
100cdf0e10cSrcweir                        const ::com::sun::star::rendering::ViewState& 	viewState,
101cdf0e10cSrcweir                        const ::com::sun::star::rendering::RenderState& 	renderState	);
102cdf0e10cSrcweir         void drawBezier( const ::com::sun::star::rendering::XCanvas* 			pCanvas,
103cdf0e10cSrcweir                          const ::com::sun::star::geometry::RealBezierSegment2D&	aBezierSegment,
104cdf0e10cSrcweir                          const ::com::sun::star::geometry::RealPoint2D& 		aEndPoint,
105cdf0e10cSrcweir                          const ::com::sun::star::rendering::ViewState& 			viewState,
106cdf0e10cSrcweir                          const ::com::sun::star::rendering::RenderState& 		renderState );
107cdf0e10cSrcweir         ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive >
108cdf0e10cSrcweir         	drawPolyPolygon( const ::com::sun::star::rendering::XCanvas* 			pCanvas,
109cdf0e10cSrcweir                              const ::com::sun::star::uno::Reference<
110cdf0e10cSrcweir                              		::com::sun::star::rendering::XPolyPolygon2D >&	xPolyPolygon,
111cdf0e10cSrcweir                              const ::com::sun::star::rendering::ViewState& 			viewState,
112cdf0e10cSrcweir                              const ::com::sun::star::rendering::RenderState& 		renderState );
113cdf0e10cSrcweir         ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive >
114cdf0e10cSrcweir         	strokePolyPolygon( const ::com::sun::star::rendering::XCanvas* 			pCanvas,
115cdf0e10cSrcweir                                const ::com::sun::star::uno::Reference<
116cdf0e10cSrcweir                                		::com::sun::star::rendering::XPolyPolygon2D >& 	xPolyPolygon,
117cdf0e10cSrcweir                                const ::com::sun::star::rendering::ViewState& 		viewState,
118cdf0e10cSrcweir                                const ::com::sun::star::rendering::RenderState& 		renderState,
119cdf0e10cSrcweir                                const ::com::sun::star::rendering::StrokeAttributes& strokeAttributes );
120cdf0e10cSrcweir         ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive >
121cdf0e10cSrcweir         	strokeTexturedPolyPolygon( const ::com::sun::star::rendering::XCanvas* 			pCanvas,
122cdf0e10cSrcweir                                        const ::com::sun::star::uno::Reference<
123cdf0e10cSrcweir                                        		::com::sun::star::rendering::XPolyPolygon2D >& 	xPolyPolygon,
124cdf0e10cSrcweir                                        const ::com::sun::star::rendering::ViewState& 		viewState,
125cdf0e10cSrcweir                                        const ::com::sun::star::rendering::RenderState& 		renderState,
126cdf0e10cSrcweir                                        const ::com::sun::star::uno::Sequence<
127cdf0e10cSrcweir                                        		::com::sun::star::rendering::Texture >& 		textures,
128cdf0e10cSrcweir                                        const ::com::sun::star::rendering::StrokeAttributes& strokeAttributes );
129cdf0e10cSrcweir         ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive >
130cdf0e10cSrcweir         	strokeTextureMappedPolyPolygon( const ::com::sun::star::rendering::XCanvas* 			pCanvas,
131cdf0e10cSrcweir                                             const ::com::sun::star::uno::Reference<
132cdf0e10cSrcweir                                             		::com::sun::star::rendering::XPolyPolygon2D >& 	xPolyPolygon,
133cdf0e10cSrcweir                                             const ::com::sun::star::rendering::ViewState& 			viewState,
134cdf0e10cSrcweir                                             const ::com::sun::star::rendering::RenderState& 		renderState,
135cdf0e10cSrcweir                                             const ::com::sun::star::uno::Sequence<
136cdf0e10cSrcweir                                             		::com::sun::star::rendering::Texture >& 		textures,
137cdf0e10cSrcweir                                             const ::com::sun::star::uno::Reference<
138cdf0e10cSrcweir                                             		::com::sun::star::geometry::XMapping2D >& 		xMapping,
139cdf0e10cSrcweir                                             const ::com::sun::star::rendering::StrokeAttributes& 	strokeAttributes );
140cdf0e10cSrcweir         ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XPolyPolygon2D >
141cdf0e10cSrcweir         	queryStrokeShapes( const ::com::sun::star::rendering::XCanvas* 			pCanvas,
142cdf0e10cSrcweir                                const ::com::sun::star::uno::Reference<
143cdf0e10cSrcweir                                		::com::sun::star::rendering::XPolyPolygon2D >& 	xPolyPolygon,
144cdf0e10cSrcweir                                const ::com::sun::star::rendering::ViewState& 		viewState,
145cdf0e10cSrcweir                                const ::com::sun::star::rendering::RenderState& 		renderState,
146cdf0e10cSrcweir                                const ::com::sun::star::rendering::StrokeAttributes& strokeAttributes );
147cdf0e10cSrcweir         ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive >
148cdf0e10cSrcweir         	fillPolyPolygon( const ::com::sun::star::rendering::XCanvas* 			pCanvas,
149cdf0e10cSrcweir                              const ::com::sun::star::uno::Reference<
150cdf0e10cSrcweir                              		::com::sun::star::rendering::XPolyPolygon2D >& 	xPolyPolygon,
151cdf0e10cSrcweir                              const ::com::sun::star::rendering::ViewState& 			viewState,
152cdf0e10cSrcweir                              const ::com::sun::star::rendering::RenderState& 		renderState );
153cdf0e10cSrcweir         ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive >
154cdf0e10cSrcweir         	fillTexturedPolyPolygon( const ::com::sun::star::rendering::XCanvas* 			pCanvas,
155cdf0e10cSrcweir                                      const ::com::sun::star::uno::Reference<
156cdf0e10cSrcweir                                      		::com::sun::star::rendering::XPolyPolygon2D >& 	xPolyPolygon,
157cdf0e10cSrcweir                                      const ::com::sun::star::rendering::ViewState& 			viewState,
158cdf0e10cSrcweir                                      const ::com::sun::star::rendering::RenderState& 		renderState,
159cdf0e10cSrcweir                                      const ::com::sun::star::uno::Sequence<
160cdf0e10cSrcweir                                      		::com::sun::star::rendering::Texture >& 		textures );
161cdf0e10cSrcweir         ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive >
162cdf0e10cSrcweir         	fillTextureMappedPolyPolygon( const ::com::sun::star::rendering::XCanvas* 			pCanvas,
163cdf0e10cSrcweir                                           const ::com::sun::star::uno::Reference<
164cdf0e10cSrcweir                                           		::com::sun::star::rendering::XPolyPolygon2D >& 	xPolyPolygon,
165cdf0e10cSrcweir                                           const ::com::sun::star::rendering::ViewState& 		viewState,
166cdf0e10cSrcweir                                           const ::com::sun::star::rendering::RenderState& 		renderState,
167cdf0e10cSrcweir                                           const ::com::sun::star::uno::Sequence<
168cdf0e10cSrcweir                                           		::com::sun::star::rendering::Texture >& 		textures,
169cdf0e10cSrcweir                                           const ::com::sun::star::uno::Reference<
170cdf0e10cSrcweir                                           		::com::sun::star::geometry::XMapping2D >& 		xMapping );
171cdf0e10cSrcweir 
172cdf0e10cSrcweir         ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCanvasFont > SAL_CALL
173cdf0e10cSrcweir         	createFont( const ::com::sun::star::rendering::XCanvas* 			pCanvas,
174cdf0e10cSrcweir                         const ::com::sun::star::rendering::FontRequest& 		fontRequest,
175cdf0e10cSrcweir                         const ::com::sun::star::uno::Sequence<
176cdf0e10cSrcweir                         		::com::sun::star::beans::PropertyValue >& 		extraFontProperties,
177cdf0e10cSrcweir                         const ::com::sun::star::geometry::Matrix2D& 			fontMatrix );
178cdf0e10cSrcweir 
179cdf0e10cSrcweir         ::com::sun::star::uno::Sequence< ::com::sun::star::rendering::FontInfo >
180cdf0e10cSrcweir         	queryAvailableFonts( const ::com::sun::star::rendering::XCanvas* 		pCanvas,
181cdf0e10cSrcweir                                  const ::com::sun::star::rendering::FontInfo& 		aFilter,
182cdf0e10cSrcweir                                  const ::com::sun::star::uno::Sequence<
183cdf0e10cSrcweir                                  		::com::sun::star::beans::PropertyValue >& 	aFontProperties );
184cdf0e10cSrcweir 
185cdf0e10cSrcweir         ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive >
186cdf0e10cSrcweir         	drawText( const ::com::sun::star::rendering::XCanvas* 			pCanvas,
187cdf0e10cSrcweir                       const ::com::sun::star::rendering::StringContext& 	text,
188cdf0e10cSrcweir                       const ::com::sun::star::uno::Reference<
189cdf0e10cSrcweir                       		::com::sun::star::rendering::XCanvasFont >& 	xFont,
190cdf0e10cSrcweir                       const ::com::sun::star::rendering::ViewState& 		viewState,
191cdf0e10cSrcweir                       const ::com::sun::star::rendering::RenderState& 		renderState,
192cdf0e10cSrcweir                       sal_Int8 												textDirection );
193cdf0e10cSrcweir 
194cdf0e10cSrcweir         ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive >
195cdf0e10cSrcweir         	drawTextLayout( const ::com::sun::star::rendering::XCanvas* 	pCanvas,
196cdf0e10cSrcweir                             const ::com::sun::star::uno::Reference<
197cdf0e10cSrcweir                             	::com::sun::star::rendering::XTextLayout >& layoutetText,
198cdf0e10cSrcweir                             const ::com::sun::star::rendering::ViewState& 	viewState,
199cdf0e10cSrcweir                             const ::com::sun::star::rendering::RenderState& renderState );
200cdf0e10cSrcweir 
201cdf0e10cSrcweir         ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive >
202cdf0e10cSrcweir         	drawBitmap( const ::com::sun::star::rendering::XCanvas* 	pCanvas,
203cdf0e10cSrcweir                         const ::com::sun::star::uno::Reference<
204cdf0e10cSrcweir                         		::com::sun::star::rendering::XBitmap >& xBitmap,
205cdf0e10cSrcweir                         const ::com::sun::star::rendering::ViewState& 	viewState,
206cdf0e10cSrcweir                         const ::com::sun::star::rendering::RenderState& renderState );
207cdf0e10cSrcweir         ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive >
208cdf0e10cSrcweir         	drawBitmapModulated( const ::com::sun::star::rendering::XCanvas* 		pCanvas,
209cdf0e10cSrcweir                                  const ::com::sun::star::uno::Reference<
210cdf0e10cSrcweir                                  		::com::sun::star::rendering::XBitmap >&		xBitmap,
211cdf0e10cSrcweir                                  const ::com::sun::star::rendering::ViewState& 		viewState,
212cdf0e10cSrcweir                                  const ::com::sun::star::rendering::RenderState& 	renderState );
213cdf0e10cSrcweir         ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XGraphicDevice >
214cdf0e10cSrcweir         	getDevice();
215cdf0e10cSrcweir 
216cdf0e10cSrcweir         // BitmapCanvasHelper functionality
217cdf0e10cSrcweir         // ================================
218cdf0e10cSrcweir 
219cdf0e10cSrcweir         void copyRect( const ::com::sun::star::rendering::XCanvas* 			pCanvas,
220cdf0e10cSrcweir                        const ::com::sun::star::uno::Reference<
221cdf0e10cSrcweir                        		::com::sun::star::rendering::XBitmapCanvas >& 	sourceCanvas,
222cdf0e10cSrcweir                        const ::com::sun::star::geometry::RealRectangle2D& 	sourceRect,
223cdf0e10cSrcweir                        const ::com::sun::star::rendering::ViewState& 		sourceViewState,
224cdf0e10cSrcweir                        const ::com::sun::star::rendering::RenderState& 		sourceRenderState,
225cdf0e10cSrcweir                        const ::com::sun::star::geometry::RealRectangle2D& 	destRect,
226cdf0e10cSrcweir                        const ::com::sun::star::rendering::ViewState& 		destViewState,
227cdf0e10cSrcweir                        const ::com::sun::star::rendering::RenderState& 		destRenderState );
228cdf0e10cSrcweir 
229cdf0e10cSrcweir         ::com::sun::star::geometry::IntegerSize2D getSize();
230cdf0e10cSrcweir 
231cdf0e10cSrcweir         ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XBitmap >
232cdf0e10cSrcweir         	getScaledBitmap( const ::com::sun::star::geometry::RealSize2D& 	newSize,
233cdf0e10cSrcweir                              sal_Bool 										beFast );
234cdf0e10cSrcweir 
235cdf0e10cSrcweir         ::com::sun::star::uno::Sequence< sal_Int8 >
236cdf0e10cSrcweir 	        getData( ::com::sun::star::rendering::IntegerBitmapLayout& 		bitmapLayout,
237cdf0e10cSrcweir                      const ::com::sun::star::geometry::IntegerRectangle2D&  rect );
238cdf0e10cSrcweir 
239cdf0e10cSrcweir         void setData( const ::com::sun::star::uno::Sequence< sal_Int8 >&         data,
240cdf0e10cSrcweir                       const ::com::sun::star::rendering::IntegerBitmapLayout&    bitmapLayout,
241cdf0e10cSrcweir                       const ::com::sun::star::geometry::IntegerRectangle2D&      rect );
242cdf0e10cSrcweir 
243cdf0e10cSrcweir         void setPixel( const ::com::sun::star::uno::Sequence< sal_Int8 >&        color,
244cdf0e10cSrcweir                        const ::com::sun::star::rendering::IntegerBitmapLayout&   bitmapLayout,
245cdf0e10cSrcweir                        const ::com::sun::star::geometry::IntegerPoint2D&         pos );
246cdf0e10cSrcweir 
247cdf0e10cSrcweir         ::com::sun::star::uno::Sequence< sal_Int8 >
248cdf0e10cSrcweir 	        getPixel( ::com::sun::star::rendering::IntegerBitmapLayout& bitmapLayout,
249cdf0e10cSrcweir                       const ::com::sun::star::geometry::IntegerPoint2D& pos );
250cdf0e10cSrcweir 
251cdf0e10cSrcweir         ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XBitmapPalette > getPalette();
252cdf0e10cSrcweir 
253cdf0e10cSrcweir         ::com::sun::star::rendering::IntegerBitmapLayout getMemoryLayout();
254cdf0e10cSrcweir 
255cdf0e10cSrcweir         // Flush drawing queue to screen
256cdf0e10cSrcweir         void					flush() const;
257cdf0e10cSrcweir 
258cdf0e10cSrcweir         /** Called from XCanvas base classes, to notify that content
259cdf0e10cSrcweir             is _about_ to change
260cdf0e10cSrcweir         */
modifying()261cdf0e10cSrcweir         void modifying() {}
262cdf0e10cSrcweir 
263cdf0e10cSrcweir         bool hasAlpha() const;
264cdf0e10cSrcweir 
265cdf0e10cSrcweir         enum ColorType
266cdf0e10cSrcweir         {
267cdf0e10cSrcweir             LINE_COLOR, FILL_COLOR, TEXT_COLOR, IGNORE_COLOR
268cdf0e10cSrcweir         };
269cdf0e10cSrcweir 
270cdf0e10cSrcweir 	void doPolyPolygonPath( const ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XPolyPolygon2D >& xPolyPolygon,
271cdf0e10cSrcweir 				  Operation aOperation,
272cdf0e10cSrcweir                   bool bNoLineJoin = false,
273cdf0e10cSrcweir 				  const ::com::sun::star::uno::Sequence< ::com::sun::star::rendering::Texture >* pTextures=NULL,
274cdf0e10cSrcweir 				  ::cairo::Cairo* pCairo=NULL ) const;
275cdf0e10cSrcweir 
276cdf0e10cSrcweir         ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive >
277cdf0e10cSrcweir 	implDrawBitmapSurface(
278cdf0e10cSrcweir 			       const ::com::sun::star::rendering::XCanvas* 	    pCanvas,
279cdf0e10cSrcweir                    const ::cairo::SurfaceSharedPtr&                 pSurface,
280cdf0e10cSrcweir 			       const ::com::sun::star::rendering::ViewState& 	viewState,
281cdf0e10cSrcweir 			       const ::com::sun::star::rendering::RenderState&  renderState,
282cdf0e10cSrcweir 			       const ::com::sun::star::geometry::IntegerSize2D& rSize,
283cdf0e10cSrcweir 			       bool bModulateColors,
284cdf0e10cSrcweir 			       bool bHasAlpha );
285cdf0e10cSrcweir 
286cdf0e10cSrcweir         bool repaint( const ::cairo::SurfaceSharedPtr& pSurface,
287cdf0e10cSrcweir 		      const ::com::sun::star::rendering::ViewState&	viewState,
288cdf0e10cSrcweir 		      const ::com::sun::star::rendering::RenderState&	renderState );
289cdf0e10cSrcweir 
290cdf0e10cSrcweir     protected:
291cdf0e10cSrcweir         /** Surface provider
292cdf0e10cSrcweir 
293cdf0e10cSrcweir             Deliberately not a refcounted reference, because of
294cdf0e10cSrcweir             potential circular references for canvas. Provides us with
295cdf0e10cSrcweir             our output surface and associated functionality.
296cdf0e10cSrcweir          */
297cdf0e10cSrcweir         SurfaceProvider* mpSurfaceProvider;
298cdf0e10cSrcweir 
299cdf0e10cSrcweir         /** Phyical output device
300cdf0e10cSrcweir 
301cdf0e10cSrcweir             Deliberately not a refcounted reference, because of
302cdf0e10cSrcweir             potential circular references for spritecanvas.
303cdf0e10cSrcweir          */
304cdf0e10cSrcweir         ::com::sun::star::rendering::XGraphicDevice* mpDevice;
305cdf0e10cSrcweir 
306cdf0e10cSrcweir     private:
307cdf0e10cSrcweir 
308cdf0e10cSrcweir 		boost::shared_ptr<VirtualDevice> mpVirtualDevice;
309cdf0e10cSrcweir 
310cdf0e10cSrcweir 	void useStates( const ::com::sun::star::rendering::ViewState& viewState,
311cdf0e10cSrcweir 			const ::com::sun::star::rendering::RenderState& renderState,
312cdf0e10cSrcweir 			bool setColor );
313cdf0e10cSrcweir 
314cdf0e10cSrcweir         /// When true, content is able to represent alpha
315cdf0e10cSrcweir         bool mbHaveAlpha;
316cdf0e10cSrcweir 
317cdf0e10cSrcweir 		CairoSharedPtr     mpCairo;
318cdf0e10cSrcweir 		SurfaceSharedPtr   mpSurface;
319cdf0e10cSrcweir         ::basegfx::B2ISize maSize;
320cdf0e10cSrcweir     };
321cdf0e10cSrcweir 
322cdf0e10cSrcweir     /// also needed from SpriteHelper
323cdf0e10cSrcweir     void doPolyPolygonImplementation( ::basegfx::B2DPolyPolygon aPolyPolygon,
324cdf0e10cSrcweir                                       Operation aOperation,
325cdf0e10cSrcweir                                       ::cairo::Cairo* pCairo,
326cdf0e10cSrcweir                                       const ::com::sun::star::uno::Sequence< ::com::sun::star::rendering::Texture >* pTextures,
327cdf0e10cSrcweir                                       const SurfaceProviderRef& pDevice,
328cdf0e10cSrcweir                                       ::com::sun::star::rendering::FillRule eFillrule );
329cdf0e10cSrcweir }
330cdf0e10cSrcweir 
331cdf0e10cSrcweir #endif /* _CAIROCANVAS_CANVASHELPER_HXX_ */
332