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