xref: /AOO41X/main/canvas/source/null/null_canvashelper.cxx (revision 25ea7f451e822ec0589487f23a9b6cc31f03fcc3)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_canvas.hxx"
26 
27 #include <canvas/debug.hxx>
28 #include <tools/diagnose_ex.h>
29 
30 #include <rtl/logfile.hxx>
31 #include <rtl/math.hxx>
32 
33 #include <com/sun/star/util/Endianness.hpp>
34 #include <com/sun/star/rendering/TexturingMode.hpp>
35 #include <com/sun/star/rendering/CompositeOperation.hpp>
36 #include <com/sun/star/rendering/RepaintResult.hpp>
37 #include <com/sun/star/rendering/PathCapType.hpp>
38 #include <com/sun/star/rendering/PathJoinType.hpp>
39 
40 #include <basegfx/matrix/b2dhommatrix.hxx>
41 #include <basegfx/point/b2dpoint.hxx>
42 #include <basegfx/tools/canvastools.hxx>
43 
44 #include <comphelper/sequence.hxx>
45 #include <canvas/canvastools.hxx>
46 
47 #include "null_spritecanvas.hxx"
48 #include "null_canvasfont.hxx"
49 #include "null_textlayout.hxx"
50 #include "null_canvashelper.hxx"
51 
52 #include <algorithm>
53 
54 
55 using namespace ::com::sun::star;
56 
57 namespace nullcanvas
58 {
CanvasHelper()59     CanvasHelper::CanvasHelper() :
60         mpDevice( NULL ),
61         maSize(),
62         mbHaveAlpha()
63     {
64     }
65 
disposing()66     void CanvasHelper::disposing()
67     {
68         mpDevice = NULL;
69     }
70 
init(const::basegfx::B2ISize & rSize,SpriteCanvas & rDevice,bool bHasAlpha)71     void CanvasHelper::init( const ::basegfx::B2ISize& rSize,
72                              SpriteCanvas&             rDevice,
73                              bool                      bHasAlpha )
74     {
75         mpDevice = &rDevice;
76         maSize = rSize;
77         mbHaveAlpha = bHasAlpha;
78     }
79 
clear()80     void CanvasHelper::clear()
81     {
82     }
83 
drawPoint(const rendering::XCanvas *,const geometry::RealPoint2D &,const rendering::ViewState &,const rendering::RenderState &)84     void CanvasHelper::drawPoint( const rendering::XCanvas*     /*pCanvas*/,
85                                   const geometry::RealPoint2D&  /*aPoint*/,
86                                   const rendering::ViewState&   /*viewState*/,
87                                   const rendering::RenderState& /*renderState*/ )
88     {
89     }
90 
drawLine(const rendering::XCanvas *,const geometry::RealPoint2D &,const geometry::RealPoint2D &,const rendering::ViewState &,const rendering::RenderState &)91     void CanvasHelper::drawLine( const rendering::XCanvas*      /*pCanvas*/,
92                                  const geometry::RealPoint2D&   /*aPoint1*/,
93                                  const geometry::RealPoint2D&   /*aPoint2*/,
94                                  const rendering::ViewState&    /*viewState*/,
95                                  const rendering::RenderState&  /*renderState*/ )
96     {
97     }
98 
drawBezier(const rendering::XCanvas *,const geometry::RealBezierSegment2D &,const geometry::RealPoint2D &,const rendering::ViewState &,const rendering::RenderState &)99     void CanvasHelper::drawBezier( const rendering::XCanvas*            /*pCanvas*/,
100                                    const geometry::RealBezierSegment2D& /*aBezierSegment*/,
101                                    const geometry::RealPoint2D&         /*aEndPoint*/,
102                                    const rendering::ViewState&          /*viewState*/,
103                                    const rendering::RenderState&        /*renderState*/ )
104     {
105     }
106 
drawPolyPolygon(const rendering::XCanvas *,const uno::Reference<rendering::XPolyPolygon2D> &,const rendering::ViewState &,const rendering::RenderState &)107     uno::Reference< rendering::XCachedPrimitive > CanvasHelper::drawPolyPolygon( const rendering::XCanvas*                          /*pCanvas*/,
108                                                                                  const uno::Reference< rendering::XPolyPolygon2D >& /*xPolyPolygon*/,
109                                                                                  const rendering::ViewState&                        /*viewState*/,
110                                                                                  const rendering::RenderState&                      /*renderState*/ )
111     {
112         // TODO(P1): Provide caching here.
113         return uno::Reference< rendering::XCachedPrimitive >(NULL);
114     }
115 
strokePolyPolygon(const rendering::XCanvas *,const uno::Reference<rendering::XPolyPolygon2D> &,const rendering::ViewState &,const rendering::RenderState &,const rendering::StrokeAttributes &)116     uno::Reference< rendering::XCachedPrimitive > CanvasHelper::strokePolyPolygon( const rendering::XCanvas*                            /*pCanvas*/,
117                                                                                    const uno::Reference< rendering::XPolyPolygon2D >&   /*xPolyPolygon*/,
118                                                                                    const rendering::ViewState&                          /*viewState*/,
119                                                                                    const rendering::RenderState&                        /*renderState*/,
120                                                                                    const rendering::StrokeAttributes&                   /*strokeAttributes*/ )
121     {
122         // TODO(P1): Provide caching here.
123         return uno::Reference< rendering::XCachedPrimitive >(NULL);
124     }
125 
strokeTexturedPolyPolygon(const rendering::XCanvas *,const uno::Reference<rendering::XPolyPolygon2D> &,const rendering::ViewState &,const rendering::RenderState &,const uno::Sequence<rendering::Texture> &,const rendering::StrokeAttributes &)126     uno::Reference< rendering::XCachedPrimitive > CanvasHelper::strokeTexturedPolyPolygon( const rendering::XCanvas*                            /*pCanvas*/,
127                                                                                            const uno::Reference< rendering::XPolyPolygon2D >&   /*xPolyPolygon*/,
128                                                                                            const rendering::ViewState&                          /*viewState*/,
129                                                                                            const rendering::RenderState&                        /*renderState*/,
130                                                                                            const uno::Sequence< rendering::Texture >&           /*textures*/,
131                                                                                            const rendering::StrokeAttributes&                   /*strokeAttributes*/ )
132     {
133         // TODO
134         return uno::Reference< rendering::XCachedPrimitive >(NULL);
135     }
136 
strokeTextureMappedPolyPolygon(const rendering::XCanvas *,const uno::Reference<rendering::XPolyPolygon2D> &,const rendering::ViewState &,const rendering::RenderState &,const uno::Sequence<rendering::Texture> &,const uno::Reference<geometry::XMapping2D> &,const rendering::StrokeAttributes &)137     uno::Reference< rendering::XCachedPrimitive > CanvasHelper::strokeTextureMappedPolyPolygon( const rendering::XCanvas*                           /*pCanvas*/,
138                                                                                                 const uno::Reference< rendering::XPolyPolygon2D >&  /*xPolyPolygon*/,
139                                                                                                 const rendering::ViewState&                         /*viewState*/,
140                                                                                                 const rendering::RenderState&                       /*renderState*/,
141                                                                                                 const uno::Sequence< rendering::Texture >&          /*textures*/,
142                                                                                                 const uno::Reference< geometry::XMapping2D >&       /*xMapping*/,
143                                                                                                 const rendering::StrokeAttributes&                  /*strokeAttributes*/ )
144     {
145         // TODO
146         return uno::Reference< rendering::XCachedPrimitive >(NULL);
147     }
148 
queryStrokeShapes(const rendering::XCanvas *,const uno::Reference<rendering::XPolyPolygon2D> &,const rendering::ViewState &,const rendering::RenderState &,const rendering::StrokeAttributes &)149     uno::Reference< rendering::XPolyPolygon2D >   CanvasHelper::queryStrokeShapes( const rendering::XCanvas*                            /*pCanvas*/,
150                                                                                    const uno::Reference< rendering::XPolyPolygon2D >&   /*xPolyPolygon*/,
151                                                                                    const rendering::ViewState&                          /*viewState*/,
152                                                                                    const rendering::RenderState&                        /*renderState*/,
153                                                                                    const rendering::StrokeAttributes&                   /*strokeAttributes*/ )
154     {
155         // TODO
156         return uno::Reference< rendering::XPolyPolygon2D >(NULL);
157     }
158 
fillPolyPolygon(const rendering::XCanvas *,const uno::Reference<rendering::XPolyPolygon2D> &,const rendering::ViewState &,const rendering::RenderState &)159     uno::Reference< rendering::XCachedPrimitive > CanvasHelper::fillPolyPolygon( const rendering::XCanvas*                          /*pCanvas*/,
160                                                                                  const uno::Reference< rendering::XPolyPolygon2D >& /*xPolyPolygon*/,
161                                                                                  const rendering::ViewState&                        /*viewState*/,
162                                                                                  const rendering::RenderState&                      /*renderState*/ )
163     {
164         // TODO(P1): Provide caching here.
165         return uno::Reference< rendering::XCachedPrimitive >(NULL);
166     }
167 
fillTexturedPolyPolygon(const rendering::XCanvas *,const uno::Reference<rendering::XPolyPolygon2D> &,const rendering::ViewState &,const rendering::RenderState &,const uno::Sequence<rendering::Texture> &)168     uno::Reference< rendering::XCachedPrimitive > CanvasHelper::fillTexturedPolyPolygon( const rendering::XCanvas*                          /*pCanvas*/,
169                                                                                          const uno::Reference< rendering::XPolyPolygon2D >& /*xPolyPolygon*/,
170                                                                                          const rendering::ViewState&                        /*viewState*/,
171                                                                                          const rendering::RenderState&                      /*renderState*/,
172                                                                                          const uno::Sequence< rendering::Texture >&         /*textures*/ )
173     {
174         // TODO(P1): Provide caching here.
175         return uno::Reference< rendering::XCachedPrimitive >(NULL);
176     }
177 
fillTextureMappedPolyPolygon(const rendering::XCanvas *,const uno::Reference<rendering::XPolyPolygon2D> &,const rendering::ViewState &,const rendering::RenderState &,const uno::Sequence<rendering::Texture> &,const uno::Reference<geometry::XMapping2D> &)178     uno::Reference< rendering::XCachedPrimitive > CanvasHelper::fillTextureMappedPolyPolygon( const rendering::XCanvas*                             /*pCanvas*/,
179                                                                                               const uno::Reference< rendering::XPolyPolygon2D >&    /*xPolyPolygon*/,
180                                                                                               const rendering::ViewState&                           /*viewState*/,
181                                                                                               const rendering::RenderState&                         /*renderState*/,
182                                                                                               const uno::Sequence< rendering::Texture >&            /*textures*/,
183                                                                                               const uno::Reference< geometry::XMapping2D >&         /*xMapping*/ )
184     {
185         // TODO
186         return uno::Reference< rendering::XCachedPrimitive >(NULL);
187     }
188 
createFont(const rendering::XCanvas *,const rendering::FontRequest & fontRequest,const uno::Sequence<beans::PropertyValue> & extraFontProperties,const geometry::Matrix2D & fontMatrix)189     uno::Reference< rendering::XCanvasFont > CanvasHelper::createFont( const rendering::XCanvas*                    /*pCanvas*/,
190                                                                        const rendering::FontRequest&                fontRequest,
191                                                                        const uno::Sequence< beans::PropertyValue >& extraFontProperties,
192                                                                        const geometry::Matrix2D&                    fontMatrix )
193     {
194         return uno::Reference< rendering::XCanvasFont >(
195             new CanvasFont(fontRequest, extraFontProperties, fontMatrix ) );
196     }
197 
queryAvailableFonts(const rendering::XCanvas *,const rendering::FontInfo &,const uno::Sequence<beans::PropertyValue> &)198     uno::Sequence< rendering::FontInfo > CanvasHelper::queryAvailableFonts( const rendering::XCanvas*                       /*pCanvas*/,
199                                                                             const rendering::FontInfo&                      /*aFilter*/,
200                                                                             const uno::Sequence< beans::PropertyValue >&    /*aFontProperties*/ )
201     {
202         // TODO
203         return uno::Sequence< rendering::FontInfo >();
204     }
205 
drawText(const rendering::XCanvas *,const rendering::StringContext &,const uno::Reference<rendering::XCanvasFont> &,const rendering::ViewState &,const rendering::RenderState &,sal_Int8)206     uno::Reference< rendering::XCachedPrimitive > CanvasHelper::drawText( const rendering::XCanvas*                         /*pCanvas*/,
207                                                                           const rendering::StringContext&                   /*text*/,
208                                                                           const uno::Reference< rendering::XCanvasFont >&   /*xFont*/,
209                                                                           const rendering::ViewState&                       /*viewState*/,
210                                                                           const rendering::RenderState&                     /*renderState*/,
211                                                                           sal_Int8                                          /*textDirection*/ )
212     {
213         return uno::Reference< rendering::XCachedPrimitive >(NULL);
214     }
215 
drawTextLayout(const rendering::XCanvas *,const uno::Reference<rendering::XTextLayout> & xLayoutetText,const rendering::ViewState & viewState,const rendering::RenderState & renderState)216     uno::Reference< rendering::XCachedPrimitive > CanvasHelper::drawTextLayout( const rendering::XCanvas*                       /*pCanvas*/,
217                                                                                 const uno::Reference< rendering::XTextLayout >& xLayoutetText,
218                                                                                 const rendering::ViewState&                     viewState,
219                                                                                 const rendering::RenderState&                   renderState )
220     {
221         ENSURE_OR_THROW( xLayoutetText.is(),
222                           "CanvasHelper::drawTextLayout: layout is NULL");
223 
224         TextLayout* pTextLayout =
225             dynamic_cast< TextLayout* >( xLayoutetText.get() );
226 
227         ENSURE_OR_THROW( pTextLayout,
228                           "CanvasHelper::drawTextLayout(): TextLayout not compatible with this canvas" );
229 
230         pTextLayout->draw( viewState,
231                            renderState,
232                            mpDevice );
233 
234         return uno::Reference< rendering::XCachedPrimitive >(NULL);
235     }
236 
drawBitmap(const rendering::XCanvas *,const uno::Reference<rendering::XBitmap> &,const rendering::ViewState &,const rendering::RenderState &)237     uno::Reference< rendering::XCachedPrimitive > CanvasHelper::drawBitmap( const rendering::XCanvas*                   /*pCanvas*/,
238                                                                             const uno::Reference< rendering::XBitmap >& /*xBitmap*/,
239                                                                             const rendering::ViewState&                 /*viewState*/,
240                                                                             const rendering::RenderState&               /*renderState*/ )
241     {
242         // TODO(P1): Provide caching here.
243         return uno::Reference< rendering::XCachedPrimitive >(NULL);
244     }
245 
drawBitmapModulated(const rendering::XCanvas *,const uno::Reference<rendering::XBitmap> &,const rendering::ViewState &,const rendering::RenderState &)246     uno::Reference< rendering::XCachedPrimitive > CanvasHelper::drawBitmapModulated( const rendering::XCanvas*                      /*pCanvas*/,
247                                                                                      const uno::Reference< rendering::XBitmap >&    /*xBitmap*/,
248                                                                                      const rendering::ViewState&                    /*viewState*/,
249                                                                                      const rendering::RenderState&                  /*renderState*/ )
250     {
251         // TODO(P1): Provide caching here.
252         return uno::Reference< rendering::XCachedPrimitive >(NULL);
253     }
254 
getDevice()255     uno::Reference< rendering::XGraphicDevice > CanvasHelper::getDevice()
256     {
257         return uno::Reference< rendering::XGraphicDevice >(mpDevice);
258     }
259 
copyRect(const rendering::XCanvas *,const uno::Reference<rendering::XBitmapCanvas> &,const geometry::RealRectangle2D &,const rendering::ViewState &,const rendering::RenderState &,const geometry::RealRectangle2D &,const rendering::ViewState &,const rendering::RenderState &)260     void CanvasHelper::copyRect( const rendering::XCanvas*                          /*pCanvas*/,
261                                  const uno::Reference< rendering::XBitmapCanvas >&  /*sourceCanvas*/,
262                                  const geometry::RealRectangle2D&                   /*sourceRect*/,
263                                  const rendering::ViewState&                        /*sourceViewState*/,
264                                  const rendering::RenderState&                      /*sourceRenderState*/,
265                                  const geometry::RealRectangle2D&                   /*destRect*/,
266                                  const rendering::ViewState&                        /*destViewState*/,
267                                  const rendering::RenderState&                      /*destRenderState*/ )
268     {
269         // TODO(F2): copyRect NYI
270     }
271 
getSize()272     geometry::IntegerSize2D CanvasHelper::getSize()
273     {
274         if( !mpDevice )
275             geometry::IntegerSize2D(1, 1); // we're disposed
276 
277         return ::basegfx::unotools::integerSize2DFromB2ISize( maSize );
278     }
279 
getScaledBitmap(const geometry::RealSize2D &,sal_Bool)280     uno::Reference< rendering::XBitmap > CanvasHelper::getScaledBitmap( const geometry::RealSize2D& /*newSize*/,
281                                                                         sal_Bool                    /*beFast*/ )
282     {
283         // TODO(F1):
284         return uno::Reference< rendering::XBitmap >();
285     }
286 
getData(rendering::IntegerBitmapLayout &,const geometry::IntegerRectangle2D &)287     uno::Sequence< sal_Int8 > CanvasHelper::getData( rendering::IntegerBitmapLayout&     /*bitmapLayout*/,
288                                                      const geometry::IntegerRectangle2D& /*rect*/ )
289     {
290         // TODO
291         return uno::Sequence< sal_Int8 >();
292     }
293 
setData(const uno::Sequence<sal_Int8> &,const rendering::IntegerBitmapLayout &,const geometry::IntegerRectangle2D &)294     void CanvasHelper::setData( const uno::Sequence< sal_Int8 >&        /*data*/,
295                                 const rendering::IntegerBitmapLayout&   /*bitmapLayout*/,
296                                 const geometry::IntegerRectangle2D&     /*rect*/ )
297     {
298     }
299 
setPixel(const uno::Sequence<sal_Int8> &,const rendering::IntegerBitmapLayout &,const geometry::IntegerPoint2D &)300     void CanvasHelper::setPixel( const uno::Sequence< sal_Int8 >&       /*color*/,
301                                  const rendering::IntegerBitmapLayout&  /*bitmapLayout*/,
302                                  const geometry::IntegerPoint2D&        /*pos*/ )
303     {
304     }
305 
getPixel(rendering::IntegerBitmapLayout &,const geometry::IntegerPoint2D &)306     uno::Sequence< sal_Int8 > CanvasHelper::getPixel( rendering::IntegerBitmapLayout&   /*bitmapLayout*/,
307                                                       const geometry::IntegerPoint2D&   /*pos*/ )
308     {
309         return uno::Sequence< sal_Int8 >();
310     }
311 
getPalette()312     uno::Reference< rendering::XBitmapPalette > CanvasHelper::getPalette()
313     {
314         // TODO(F1): Palette bitmaps NYI
315         return uno::Reference< rendering::XBitmapPalette >();
316     }
317 
getMemoryLayout()318     rendering::IntegerBitmapLayout CanvasHelper::getMemoryLayout()
319     {
320         return ::canvas::tools::getStdMemoryLayout(getSize());
321     }
322 
flush() const323     void CanvasHelper::flush() const
324     {
325     }
326 
hasAlpha() const327     bool CanvasHelper::hasAlpha() const
328     {
329         return mbHaveAlpha;
330     }
331 
332 }
333