Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*************************************************************************
3 : : *
4 : : * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 : : *
6 : : * Copyright 2000, 2010 Oracle and/or its affiliates.
7 : : *
8 : : * OpenOffice.org - a multi-platform office productivity suite
9 : : *
10 : : * This file is part of OpenOffice.org.
11 : : *
12 : : * OpenOffice.org is free software: you can redistribute it and/or modify
13 : : * it under the terms of the GNU Lesser General Public License version 3
14 : : * only, as published by the Free Software Foundation.
15 : : *
16 : : * OpenOffice.org is distributed in the hope that it will be useful,
17 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : : * GNU Lesser General Public License version 3 for more details
20 : : * (a copy is included in the LICENSE file that accompanied this code).
21 : : *
22 : : * You should have received a copy of the GNU Lesser General Public License
23 : : * version 3 along with OpenOffice.org. If not, see
24 : : * <http://www.openoffice.org/license.html>
25 : : * for a copy of the LGPLv3 License.
26 : : *
27 : : ************************************************************************/
28 : :
29 : : #ifndef _NULLCANVAS_CANVASHELPER_HXX_
30 : : #define _NULLCANVAS_CANVASHELPER_HXX_
31 : :
32 : : #include <com/sun/star/rendering/XCanvas.hpp>
33 : : #include <com/sun/star/rendering/XIntegerBitmap.hpp>
34 : :
35 : : #include <basegfx/vector/b2isize.hxx>
36 : : #include <basegfx/vector/b2dsize.hxx>
37 : :
38 : : #include <boost/utility.hpp>
39 : :
40 : :
41 : : namespace nullcanvas
42 : : {
43 : : class SpriteCanvas;
44 : :
45 : : /** Helper class for basic canvas functionality. Also offers
46 : : optional backbuffer painting, when providing it with a second
47 : : HDC to render into.
48 : : */
49 : 0 : class CanvasHelper : private ::boost::noncopyable
50 : : {
51 : : public:
52 : : CanvasHelper();
53 : :
54 : : /// Release all references
55 : : void disposing();
56 : :
57 : : /** Initialize canvas helper
58 : :
59 : : This method late-initializes the canvas helper, providing
60 : : it with the necessary device and size. Note that the
61 : : CanvasHelper does <em>not</em> take ownership of the
62 : : passed rDevice reference, nor does it perform any
63 : : reference counting. Thus, to prevent the reference counted
64 : : SpriteCanvas object from deletion, the user of this class
65 : : is responsible for holding ref-counted references itself!
66 : :
67 : : @param rSizePixel
68 : : Size of the output surface in pixel.
69 : :
70 : : @param rDevice
71 : : Reference device this canvas is associated with
72 : :
73 : : */
74 : : void init( const ::basegfx::B2ISize& rSizePixel,
75 : : SpriteCanvas& rDevice,
76 : : bool bHasAlpha );
77 : :
78 : :
79 : : // CanvasHelper functionality
80 : : // ==========================
81 : :
82 : : // XCanvas (only providing, not implementing the
83 : : // interface. Also note subtle method parameter differences)
84 : : void clear();
85 : : void drawPoint( const ::com::sun::star::rendering::XCanvas* pCanvas,
86 : : const ::com::sun::star::geometry::RealPoint2D& aPoint,
87 : : const ::com::sun::star::rendering::ViewState& viewState,
88 : : const ::com::sun::star::rendering::RenderState& renderState );
89 : : void drawLine( const ::com::sun::star::rendering::XCanvas* pCanvas,
90 : : const ::com::sun::star::geometry::RealPoint2D& aStartPoint,
91 : : const ::com::sun::star::geometry::RealPoint2D& aEndPoint,
92 : : const ::com::sun::star::rendering::ViewState& viewState,
93 : : const ::com::sun::star::rendering::RenderState& renderState );
94 : : void drawBezier( const ::com::sun::star::rendering::XCanvas* pCanvas,
95 : : const ::com::sun::star::geometry::RealBezierSegment2D& aBezierSegment,
96 : : const ::com::sun::star::geometry::RealPoint2D& aEndPoint,
97 : : const ::com::sun::star::rendering::ViewState& viewState,
98 : : const ::com::sun::star::rendering::RenderState& renderState );
99 : : ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive >
100 : : drawPolyPolygon( const ::com::sun::star::rendering::XCanvas* pCanvas,
101 : : const ::com::sun::star::uno::Reference<
102 : : ::com::sun::star::rendering::XPolyPolygon2D >& xPolyPolygon,
103 : : const ::com::sun::star::rendering::ViewState& viewState,
104 : : const ::com::sun::star::rendering::RenderState& renderState );
105 : : ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive >
106 : : strokePolyPolygon( const ::com::sun::star::rendering::XCanvas* pCanvas,
107 : : const ::com::sun::star::uno::Reference<
108 : : ::com::sun::star::rendering::XPolyPolygon2D >& xPolyPolygon,
109 : : const ::com::sun::star::rendering::ViewState& viewState,
110 : : const ::com::sun::star::rendering::RenderState& renderState,
111 : : const ::com::sun::star::rendering::StrokeAttributes& strokeAttributes );
112 : : ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive >
113 : : strokeTexturedPolyPolygon( const ::com::sun::star::rendering::XCanvas* pCanvas,
114 : : const ::com::sun::star::uno::Reference<
115 : : ::com::sun::star::rendering::XPolyPolygon2D >& xPolyPolygon,
116 : : const ::com::sun::star::rendering::ViewState& viewState,
117 : : const ::com::sun::star::rendering::RenderState& renderState,
118 : : const ::com::sun::star::uno::Sequence<
119 : : ::com::sun::star::rendering::Texture >& textures,
120 : : const ::com::sun::star::rendering::StrokeAttributes& strokeAttributes );
121 : : ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive >
122 : : strokeTextureMappedPolyPolygon( const ::com::sun::star::rendering::XCanvas* pCanvas,
123 : : const ::com::sun::star::uno::Reference<
124 : : ::com::sun::star::rendering::XPolyPolygon2D >& xPolyPolygon,
125 : : const ::com::sun::star::rendering::ViewState& viewState,
126 : : const ::com::sun::star::rendering::RenderState& renderState,
127 : : const ::com::sun::star::uno::Sequence<
128 : : ::com::sun::star::rendering::Texture >& textures,
129 : : const ::com::sun::star::uno::Reference<
130 : : ::com::sun::star::geometry::XMapping2D >& xMapping,
131 : : const ::com::sun::star::rendering::StrokeAttributes& strokeAttributes );
132 : : ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XPolyPolygon2D >
133 : : queryStrokeShapes( const ::com::sun::star::rendering::XCanvas* pCanvas,
134 : : const ::com::sun::star::uno::Reference<
135 : : ::com::sun::star::rendering::XPolyPolygon2D >& xPolyPolygon,
136 : : const ::com::sun::star::rendering::ViewState& viewState,
137 : : const ::com::sun::star::rendering::RenderState& renderState,
138 : : const ::com::sun::star::rendering::StrokeAttributes& strokeAttributes );
139 : : ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive >
140 : : fillPolyPolygon( const ::com::sun::star::rendering::XCanvas* pCanvas,
141 : : const ::com::sun::star::uno::Reference<
142 : : ::com::sun::star::rendering::XPolyPolygon2D >& xPolyPolygon,
143 : : const ::com::sun::star::rendering::ViewState& viewState,
144 : : const ::com::sun::star::rendering::RenderState& renderState );
145 : : ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive >
146 : : fillTexturedPolyPolygon( const ::com::sun::star::rendering::XCanvas* pCanvas,
147 : : const ::com::sun::star::uno::Reference<
148 : : ::com::sun::star::rendering::XPolyPolygon2D >& xPolyPolygon,
149 : : const ::com::sun::star::rendering::ViewState& viewState,
150 : : const ::com::sun::star::rendering::RenderState& renderState,
151 : : const ::com::sun::star::uno::Sequence<
152 : : ::com::sun::star::rendering::Texture >& textures );
153 : : ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive >
154 : : fillTextureMappedPolyPolygon( const ::com::sun::star::rendering::XCanvas* pCanvas,
155 : : const ::com::sun::star::uno::Reference<
156 : : ::com::sun::star::rendering::XPolyPolygon2D >& xPolyPolygon,
157 : : const ::com::sun::star::rendering::ViewState& viewState,
158 : : const ::com::sun::star::rendering::RenderState& renderState,
159 : : const ::com::sun::star::uno::Sequence<
160 : : ::com::sun::star::rendering::Texture >& textures,
161 : : const ::com::sun::star::uno::Reference<
162 : : ::com::sun::star::geometry::XMapping2D >& xMapping );
163 : :
164 : : ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCanvasFont > SAL_CALL
165 : : createFont( const ::com::sun::star::rendering::XCanvas* pCanvas,
166 : : const ::com::sun::star::rendering::FontRequest& fontRequest,
167 : : const ::com::sun::star::uno::Sequence<
168 : : ::com::sun::star::beans::PropertyValue >& extraFontProperties,
169 : : const ::com::sun::star::geometry::Matrix2D& fontMatrix );
170 : :
171 : : ::com::sun::star::uno::Sequence< ::com::sun::star::rendering::FontInfo >
172 : : queryAvailableFonts( const ::com::sun::star::rendering::XCanvas* pCanvas,
173 : : const ::com::sun::star::rendering::FontInfo& aFilter,
174 : : const ::com::sun::star::uno::Sequence<
175 : : ::com::sun::star::beans::PropertyValue >& aFontProperties );
176 : :
177 : : ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive >
178 : : drawText( const ::com::sun::star::rendering::XCanvas* pCanvas,
179 : : const ::com::sun::star::rendering::StringContext& text,
180 : : const ::com::sun::star::uno::Reference<
181 : : ::com::sun::star::rendering::XCanvasFont >& xFont,
182 : : const ::com::sun::star::rendering::ViewState& viewState,
183 : : const ::com::sun::star::rendering::RenderState& renderState,
184 : : sal_Int8 textDirection );
185 : :
186 : : ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive >
187 : : drawTextLayout( const ::com::sun::star::rendering::XCanvas* pCanvas,
188 : : const ::com::sun::star::uno::Reference<
189 : : ::com::sun::star::rendering::XTextLayout >& layoutetText,
190 : : const ::com::sun::star::rendering::ViewState& viewState,
191 : : const ::com::sun::star::rendering::RenderState& renderState );
192 : :
193 : : ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive >
194 : : drawBitmap( const ::com::sun::star::rendering::XCanvas* pCanvas,
195 : : const ::com::sun::star::uno::Reference<
196 : : ::com::sun::star::rendering::XBitmap >& xBitmap,
197 : : const ::com::sun::star::rendering::ViewState& viewState,
198 : : const ::com::sun::star::rendering::RenderState& renderState );
199 : : ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive >
200 : : drawBitmapModulated( const ::com::sun::star::rendering::XCanvas* pCanvas,
201 : : const ::com::sun::star::uno::Reference<
202 : : ::com::sun::star::rendering::XBitmap >& xBitmap,
203 : : const ::com::sun::star::rendering::ViewState& viewState,
204 : : const ::com::sun::star::rendering::RenderState& renderState );
205 : : ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XGraphicDevice >
206 : : getDevice();
207 : :
208 : : // BitmapCanvasHelper functionality
209 : : // ================================
210 : :
211 : : void copyRect( const ::com::sun::star::rendering::XCanvas* pCanvas,
212 : : const ::com::sun::star::uno::Reference<
213 : : ::com::sun::star::rendering::XBitmapCanvas >& sourceCanvas,
214 : : const ::com::sun::star::geometry::RealRectangle2D& sourceRect,
215 : : const ::com::sun::star::rendering::ViewState& sourceViewState,
216 : : const ::com::sun::star::rendering::RenderState& sourceRenderState,
217 : : const ::com::sun::star::geometry::RealRectangle2D& destRect,
218 : : const ::com::sun::star::rendering::ViewState& destViewState,
219 : : const ::com::sun::star::rendering::RenderState& destRenderState );
220 : :
221 : : ::com::sun::star::geometry::IntegerSize2D getSize();
222 : :
223 : : ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XBitmap >
224 : : getScaledBitmap( const ::com::sun::star::geometry::RealSize2D& newSize,
225 : : sal_Bool beFast );
226 : :
227 : : ::com::sun::star::uno::Sequence< sal_Int8 >
228 : : getData( ::com::sun::star::rendering::IntegerBitmapLayout& bitmapLayout,
229 : : const ::com::sun::star::geometry::IntegerRectangle2D& rect );
230 : :
231 : : void setData( const ::com::sun::star::uno::Sequence< sal_Int8 >& data,
232 : : const ::com::sun::star::rendering::IntegerBitmapLayout& bitmapLayout,
233 : : const ::com::sun::star::geometry::IntegerRectangle2D& rect );
234 : :
235 : : void setPixel( const ::com::sun::star::uno::Sequence< sal_Int8 >& color,
236 : : const ::com::sun::star::rendering::IntegerBitmapLayout& bitmapLayout,
237 : : const ::com::sun::star::geometry::IntegerPoint2D& pos );
238 : :
239 : : ::com::sun::star::uno::Sequence< sal_Int8 >
240 : : getPixel( ::com::sun::star::rendering::IntegerBitmapLayout& bitmapLayout,
241 : : const ::com::sun::star::geometry::IntegerPoint2D& pos );
242 : :
243 : : ::com::sun::star::rendering::IntegerBitmapLayout getMemoryLayout();
244 : :
245 : : /** Called from XCanvas base classes, to notify that content
246 : : is _about_ to change
247 : : */
248 : 0 : void modifying() {}
249 : :
250 : : bool hasAlpha() const;
251 : :
252 : : protected:
253 : : /** Phyical output device
254 : :
255 : : Deliberately not a refcounted reference, because of
256 : : potential circular references for spritecanvas.
257 : : */
258 : : SpriteCanvas* mpDevice;
259 : :
260 : : private:
261 : : /// Current size of the output surface in pixel
262 : : ::basegfx::B2ISize maSize;
263 : :
264 : : /// When true, content is able to represent alpha
265 : : bool mbHaveAlpha;
266 : : };
267 : : }
268 : :
269 : : #endif /* _NULLCANVAS_CANVASHELPER_HXX_ */
270 : :
271 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|