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