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 #ifndef INCLUDED_CANVAS_CANVASBASE_HXX 25 #define INCLUDED_CANVAS_CANVASBASE_HXX 26 27 #include <com/sun/star/uno/Reference.hxx> 28 #include <com/sun/star/rendering/XCanvas.hpp> 29 #include <com/sun/star/rendering/TextDirection.hpp> 30 #include <osl/mutex.hxx> 31 #include <canvas/verifyinput.hxx> 32 33 34 namespace canvas 35 { 36 /** Helper template to handle XCanvas method forwarding to CanvasHelper 37 38 Use this helper to handle the XCanvas part of your 39 implementation. In theory, we could have provided CanvasHelper 40 and CanvasBase as a single template, but that would duplicate 41 a lot of code now residing in CanvasHelper only. 42 43 This template basically interposes itself between the full 44 interface you implement (i.e. not restricted to XCanvas. The 45 problem with UNO partial interface implementation actually is, 46 that you cannot do it the plain way, since deriving from a 47 common base subclass always introduces the whole set of pure 48 virtuals, that your baseclass helper just overrided) and your 49 implementation class. You then only have to implement the 50 functionality <em>besides</em> XCanvas. 51 52 <pre> 53 Example: 54 typedef ::cppu::WeakComponentImplHelper4< ::com::sun::star::rendering::XSpriteCanvas, 55 ::com::sun::star::lang::XInitialization, 56 ::com::sun::star::lang::XServiceInfo, 57 ::com::sun::star::lang::XServiceName > CanvasBase_Base; 58 typedef ::canvas::internal::CanvasBase< CanvasBase_Base, CanvasHelper > ExampleCanvas_Base; 59 60 class ExampleCanvas : public ExampleCanvas_Base, 61 public SpriteSurface, 62 public RepaintTarget 63 { 64 }; 65 </pre> 66 67 @tpl Base 68 Base class to use, most probably one of the 69 WeakComponentImplHelperN templates with the appropriate 70 interfaces. At least XCanvas should be among them (why else 71 would you use this template, then?). Base class must have an 72 Base( const Mutex& ) constructor (like the 73 WeakComponentImplHelperN templates have). As the very least, 74 the base class must be derived from uno::XInterface, as some 75 error reporting mechanisms rely on that. 76 77 @tpl CanvasHelper 78 Canvas helper implementation for the backend in question. This 79 object will be held as a member of this template class, and 80 basically gets forwarded all XCanvas API calls. Furthermore, 81 every time the canvas API semantically changes the content of 82 the canvas, CanvasHelper::modifying() will get called 83 (<em>before</em> the actual modification takes place). 84 85 @tpl Mutex 86 Lock strategy to use. Defaults to using the 87 OBaseMutex-provided lock. Every time one of the methods is 88 entered, an object of type Mutex is created with m_aMutex as 89 the sole parameter, and destroyed again when the method scope 90 is left. 91 92 @tpl UnambiguousBase 93 Optional unambiguous base class for XInterface of Base. It's 94 sometimes necessary to specify this parameter, e.g. if Base 95 derives from multiple UNO interface (were each provides its 96 own version of XInterface, making the conversion ambiguous) 97 */ 98 template< class Base, 99 class CanvasHelper, 100 class Mutex=::osl::MutexGuard, 101 class UnambiguousBase=::com::sun::star::uno::XInterface > class CanvasBase : 102 public Base 103 { 104 public: 105 typedef Base BaseType; 106 typedef CanvasHelper HelperType; 107 typedef Mutex MutexType; 108 typedef UnambiguousBase UnambiguousBaseType; 109 110 /** Create CanvasBase 111 */ CanvasBase()112 CanvasBase() : 113 maCanvasHelper(), 114 mbSurfaceDirty( true ) 115 { 116 } 117 118 #if defined __SUNPRO_CC 119 using Base::disposing; 120 #endif disposing()121 virtual void SAL_CALL disposing() 122 { 123 MutexType aGuard( BaseType::m_aMutex ); 124 125 maCanvasHelper.disposing(); 126 127 // pass on to base class 128 BaseType::disposing(); 129 } 130 131 // XCanvas clear()132 virtual void SAL_CALL clear() 133 { 134 MutexType aGuard( BaseType::m_aMutex ); 135 136 mbSurfaceDirty = true; 137 maCanvasHelper.modifying(); 138 139 maCanvasHelper.clear(); 140 } 141 drawPoint(const::com::sun::star::geometry::RealPoint2D & aPoint,const::com::sun::star::rendering::ViewState & viewState,const::com::sun::star::rendering::RenderState & renderState)142 virtual void SAL_CALL drawPoint( const ::com::sun::star::geometry::RealPoint2D& aPoint, 143 const ::com::sun::star::rendering::ViewState& viewState, 144 const ::com::sun::star::rendering::RenderState& renderState ) 145 { 146 tools::verifyArgs(aPoint, viewState, renderState, 147 BOOST_CURRENT_FUNCTION, 148 static_cast< UnambiguousBaseType* >(this)); 149 150 MutexType aGuard( BaseType::m_aMutex ); 151 152 mbSurfaceDirty = true; 153 maCanvasHelper.modifying(); 154 155 maCanvasHelper.drawPoint( this, aPoint, viewState, renderState ); 156 } 157 drawLine(const::com::sun::star::geometry::RealPoint2D & aStartPoint,const::com::sun::star::geometry::RealPoint2D & aEndPoint,const::com::sun::star::rendering::ViewState & viewState,const::com::sun::star::rendering::RenderState & renderState)158 virtual void SAL_CALL drawLine( const ::com::sun::star::geometry::RealPoint2D& aStartPoint, 159 const ::com::sun::star::geometry::RealPoint2D& aEndPoint, 160 const ::com::sun::star::rendering::ViewState& viewState, 161 const ::com::sun::star::rendering::RenderState& renderState ) 162 { 163 tools::verifyArgs(aStartPoint, aEndPoint, viewState, renderState, 164 BOOST_CURRENT_FUNCTION, 165 static_cast< UnambiguousBaseType* >(this)); 166 167 MutexType aGuard( BaseType::m_aMutex ); 168 169 mbSurfaceDirty = true; 170 maCanvasHelper.modifying(); 171 172 maCanvasHelper.drawLine( this, aStartPoint, aEndPoint, viewState, renderState ); 173 } 174 drawBezier(const::com::sun::star::geometry::RealBezierSegment2D & aBezierSegment,const::com::sun::star::geometry::RealPoint2D & aEndPoint,const::com::sun::star::rendering::ViewState & viewState,const::com::sun::star::rendering::RenderState & renderState)175 virtual void SAL_CALL drawBezier( const ::com::sun::star::geometry::RealBezierSegment2D& aBezierSegment, 176 const ::com::sun::star::geometry::RealPoint2D& aEndPoint, 177 const ::com::sun::star::rendering::ViewState& viewState, 178 const ::com::sun::star::rendering::RenderState& renderState ) 179 { 180 tools::verifyArgs(aBezierSegment, aEndPoint, viewState, renderState, 181 BOOST_CURRENT_FUNCTION, 182 static_cast< UnambiguousBaseType* >(this)); 183 184 MutexType aGuard( BaseType::m_aMutex ); 185 186 mbSurfaceDirty = true; 187 maCanvasHelper.modifying(); 188 189 maCanvasHelper.drawBezier( this, aBezierSegment, aEndPoint, viewState, renderState ); 190 } 191 192 virtual ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive > SAL_CALL drawPolyPolygon(const::com::sun::star::uno::Reference<::com::sun::star::rendering::XPolyPolygon2D> & xPolyPolygon,const::com::sun::star::rendering::ViewState & viewState,const::com::sun::star::rendering::RenderState & renderState)193 drawPolyPolygon( const ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XPolyPolygon2D >& xPolyPolygon, 194 const ::com::sun::star::rendering::ViewState& viewState, 195 const ::com::sun::star::rendering::RenderState& renderState ) 196 { 197 tools::verifyArgs(xPolyPolygon, viewState, renderState, 198 BOOST_CURRENT_FUNCTION, 199 static_cast< UnambiguousBaseType* >(this)); 200 201 MutexType aGuard( BaseType::m_aMutex ); 202 203 mbSurfaceDirty = true; 204 maCanvasHelper.modifying(); 205 206 return maCanvasHelper.drawPolyPolygon( this, xPolyPolygon, viewState, renderState ); 207 } 208 209 virtual ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive > SAL_CALL strokePolyPolygon(const::com::sun::star::uno::Reference<::com::sun::star::rendering::XPolyPolygon2D> & xPolyPolygon,const::com::sun::star::rendering::ViewState & viewState,const::com::sun::star::rendering::RenderState & renderState,const::com::sun::star::rendering::StrokeAttributes & strokeAttributes)210 strokePolyPolygon( const ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XPolyPolygon2D >& xPolyPolygon, 211 const ::com::sun::star::rendering::ViewState& viewState, 212 const ::com::sun::star::rendering::RenderState& renderState, 213 const ::com::sun::star::rendering::StrokeAttributes& strokeAttributes ) 214 { 215 tools::verifyArgs(xPolyPolygon, viewState, renderState, strokeAttributes, 216 BOOST_CURRENT_FUNCTION, 217 static_cast< UnambiguousBaseType* >(this)); 218 219 MutexType aGuard( BaseType::m_aMutex ); 220 221 mbSurfaceDirty = true; 222 maCanvasHelper.modifying(); 223 224 return maCanvasHelper.strokePolyPolygon( this, xPolyPolygon, viewState, renderState, strokeAttributes ); 225 } 226 227 virtual ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive > SAL_CALL strokeTexturedPolyPolygon(const::com::sun::star::uno::Reference<::com::sun::star::rendering::XPolyPolygon2D> & xPolyPolygon,const::com::sun::star::rendering::ViewState & viewState,const::com::sun::star::rendering::RenderState & renderState,const::com::sun::star::uno::Sequence<::com::sun::star::rendering::Texture> & textures,const::com::sun::star::rendering::StrokeAttributes & strokeAttributes)228 strokeTexturedPolyPolygon( const ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XPolyPolygon2D >& xPolyPolygon, 229 const ::com::sun::star::rendering::ViewState& viewState, 230 const ::com::sun::star::rendering::RenderState& renderState, 231 const ::com::sun::star::uno::Sequence< ::com::sun::star::rendering::Texture >& textures, 232 const ::com::sun::star::rendering::StrokeAttributes& strokeAttributes ) 233 { 234 tools::verifyArgs(xPolyPolygon, viewState, renderState, strokeAttributes, 235 BOOST_CURRENT_FUNCTION, 236 static_cast< UnambiguousBaseType* >(this)); 237 238 MutexType aGuard( BaseType::m_aMutex ); 239 240 mbSurfaceDirty = true; 241 maCanvasHelper.modifying(); 242 243 return maCanvasHelper.strokeTexturedPolyPolygon( this, xPolyPolygon, viewState, renderState, textures, strokeAttributes ); 244 } 245 246 virtual ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive > SAL_CALL strokeTextureMappedPolyPolygon(const::com::sun::star::uno::Reference<::com::sun::star::rendering::XPolyPolygon2D> & xPolyPolygon,const::com::sun::star::rendering::ViewState & viewState,const::com::sun::star::rendering::RenderState & renderState,const::com::sun::star::uno::Sequence<::com::sun::star::rendering::Texture> & textures,const::com::sun::star::uno::Reference<::com::sun::star::geometry::XMapping2D> & xMapping,const::com::sun::star::rendering::StrokeAttributes & strokeAttributes)247 strokeTextureMappedPolyPolygon( const ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XPolyPolygon2D >& xPolyPolygon, 248 const ::com::sun::star::rendering::ViewState& viewState, 249 const ::com::sun::star::rendering::RenderState& renderState, 250 const ::com::sun::star::uno::Sequence< ::com::sun::star::rendering::Texture >& textures, 251 const ::com::sun::star::uno::Reference< ::com::sun::star::geometry::XMapping2D >& xMapping, 252 const ::com::sun::star::rendering::StrokeAttributes& strokeAttributes ) 253 { 254 tools::verifyArgs(xPolyPolygon, viewState, renderState, textures, xMapping, strokeAttributes, 255 BOOST_CURRENT_FUNCTION, 256 static_cast< UnambiguousBaseType* >(this)); 257 258 MutexType aGuard( BaseType::m_aMutex ); 259 260 mbSurfaceDirty = true; 261 maCanvasHelper.modifying(); 262 263 return maCanvasHelper.strokeTextureMappedPolyPolygon( this, xPolyPolygon, viewState, renderState, textures, xMapping, strokeAttributes ); 264 } 265 266 virtual ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XPolyPolygon2D > SAL_CALL queryStrokeShapes(const::com::sun::star::uno::Reference<::com::sun::star::rendering::XPolyPolygon2D> & xPolyPolygon,const::com::sun::star::rendering::ViewState & viewState,const::com::sun::star::rendering::RenderState & renderState,const::com::sun::star::rendering::StrokeAttributes & strokeAttributes)267 queryStrokeShapes( const ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XPolyPolygon2D >& xPolyPolygon, 268 const ::com::sun::star::rendering::ViewState& viewState, 269 const ::com::sun::star::rendering::RenderState& renderState, 270 const ::com::sun::star::rendering::StrokeAttributes& strokeAttributes ) 271 { 272 tools::verifyArgs(xPolyPolygon, viewState, renderState, strokeAttributes, 273 BOOST_CURRENT_FUNCTION, 274 static_cast< UnambiguousBaseType* >(this)); 275 276 MutexType aGuard( BaseType::m_aMutex ); 277 278 mbSurfaceDirty = true; 279 maCanvasHelper.modifying(); 280 281 return maCanvasHelper.queryStrokeShapes( this, xPolyPolygon, viewState, renderState, strokeAttributes ); 282 } 283 284 virtual ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive > SAL_CALL fillPolyPolygon(const::com::sun::star::uno::Reference<::com::sun::star::rendering::XPolyPolygon2D> & xPolyPolygon,const::com::sun::star::rendering::ViewState & viewState,const::com::sun::star::rendering::RenderState & renderState)285 fillPolyPolygon( const ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XPolyPolygon2D >& xPolyPolygon, 286 const ::com::sun::star::rendering::ViewState& viewState, 287 const ::com::sun::star::rendering::RenderState& renderState ) 288 { 289 tools::verifyArgs(xPolyPolygon, viewState, renderState, 290 BOOST_CURRENT_FUNCTION, 291 static_cast< UnambiguousBaseType* >(this)); 292 293 MutexType aGuard( BaseType::m_aMutex ); 294 295 mbSurfaceDirty = true; 296 maCanvasHelper.modifying(); 297 298 return maCanvasHelper.fillPolyPolygon( this, xPolyPolygon, viewState, renderState ); 299 } 300 301 virtual ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive > SAL_CALL fillTexturedPolyPolygon(const::com::sun::star::uno::Reference<::com::sun::star::rendering::XPolyPolygon2D> & xPolyPolygon,const::com::sun::star::rendering::ViewState & viewState,const::com::sun::star::rendering::RenderState & renderState,const::com::sun::star::uno::Sequence<::com::sun::star::rendering::Texture> & textures)302 fillTexturedPolyPolygon( const ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XPolyPolygon2D >& xPolyPolygon, 303 const ::com::sun::star::rendering::ViewState& viewState, 304 const ::com::sun::star::rendering::RenderState& renderState, 305 const ::com::sun::star::uno::Sequence< ::com::sun::star::rendering::Texture >& textures ) 306 { 307 tools::verifyArgs(xPolyPolygon, viewState, renderState, textures, 308 BOOST_CURRENT_FUNCTION, 309 static_cast< UnambiguousBaseType* >(this)); 310 311 MutexType aGuard( BaseType::m_aMutex ); 312 313 mbSurfaceDirty = true; 314 maCanvasHelper.modifying(); 315 316 return maCanvasHelper.fillTexturedPolyPolygon( this, xPolyPolygon, viewState, renderState, textures ); 317 } 318 319 virtual ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive > SAL_CALL fillTextureMappedPolyPolygon(const::com::sun::star::uno::Reference<::com::sun::star::rendering::XPolyPolygon2D> & xPolyPolygon,const::com::sun::star::rendering::ViewState & viewState,const::com::sun::star::rendering::RenderState & renderState,const::com::sun::star::uno::Sequence<::com::sun::star::rendering::Texture> & textures,const::com::sun::star::uno::Reference<::com::sun::star::geometry::XMapping2D> & xMapping)320 fillTextureMappedPolyPolygon( const ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XPolyPolygon2D >& xPolyPolygon, 321 const ::com::sun::star::rendering::ViewState& viewState, 322 const ::com::sun::star::rendering::RenderState& renderState, 323 const ::com::sun::star::uno::Sequence< ::com::sun::star::rendering::Texture >& textures, 324 const ::com::sun::star::uno::Reference< ::com::sun::star::geometry::XMapping2D >& xMapping ) 325 { 326 tools::verifyArgs(xPolyPolygon, viewState, renderState, textures, xMapping, 327 BOOST_CURRENT_FUNCTION, 328 static_cast< UnambiguousBaseType* >(this)); 329 330 MutexType aGuard( BaseType::m_aMutex ); 331 332 mbSurfaceDirty = true; 333 maCanvasHelper.modifying(); 334 335 return maCanvasHelper.fillTextureMappedPolyPolygon( this, xPolyPolygon, viewState, renderState, textures, xMapping ); 336 } 337 338 339 virtual ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCanvasFont > SAL_CALL createFont(const::com::sun::star::rendering::FontRequest & fontRequest,const::com::sun::star::uno::Sequence<::com::sun::star::beans::PropertyValue> & extraFontProperties,const::com::sun::star::geometry::Matrix2D & fontMatrix)340 createFont( const ::com::sun::star::rendering::FontRequest& fontRequest, 341 const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& extraFontProperties, 342 const ::com::sun::star::geometry::Matrix2D& fontMatrix ) 343 { 344 tools::verifyArgs(fontRequest, 345 // dummy, to keep argPos in sync 346 fontRequest, 347 fontMatrix, 348 BOOST_CURRENT_FUNCTION, 349 static_cast< UnambiguousBaseType* >(this)); 350 351 MutexType aGuard( BaseType::m_aMutex ); 352 353 return maCanvasHelper.createFont( this, fontRequest, extraFontProperties, fontMatrix ); 354 } 355 356 357 virtual ::com::sun::star::uno::Sequence< ::com::sun::star::rendering::FontInfo > SAL_CALL queryAvailableFonts(const::com::sun::star::rendering::FontInfo & aFilter,const::com::sun::star::uno::Sequence<::com::sun::star::beans::PropertyValue> & aFontProperties)358 queryAvailableFonts( const ::com::sun::star::rendering::FontInfo& aFilter, 359 const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aFontProperties ) 360 { 361 tools::verifyArgs(aFilter, 362 BOOST_CURRENT_FUNCTION, 363 static_cast< UnambiguousBaseType* >(this)); 364 365 MutexType aGuard( BaseType::m_aMutex ); 366 367 return maCanvasHelper.queryAvailableFonts( this, aFilter, aFontProperties ); 368 } 369 370 371 virtual ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive > SAL_CALL drawText(const::com::sun::star::rendering::StringContext & text,const::com::sun::star::uno::Reference<::com::sun::star::rendering::XCanvasFont> & xFont,const::com::sun::star::rendering::ViewState & viewState,const::com::sun::star::rendering::RenderState & renderState,sal_Int8 textDirection)372 drawText( const ::com::sun::star::rendering::StringContext& text, 373 const ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCanvasFont >& xFont, 374 const ::com::sun::star::rendering::ViewState& viewState, 375 const ::com::sun::star::rendering::RenderState& renderState, 376 sal_Int8 textDirection ) 377 { 378 tools::verifyArgs(xFont, viewState, renderState, 379 BOOST_CURRENT_FUNCTION, 380 static_cast< UnambiguousBaseType* >(this)); 381 tools::verifyRange( textDirection, 382 ::com::sun::star::rendering::TextDirection::WEAK_LEFT_TO_RIGHT, 383 ::com::sun::star::rendering::TextDirection::STRONG_RIGHT_TO_LEFT ); 384 385 MutexType aGuard( BaseType::m_aMutex ); 386 387 mbSurfaceDirty = true; 388 maCanvasHelper.modifying(); 389 390 return maCanvasHelper.drawText( this, text, xFont, viewState, renderState, textDirection ); 391 } 392 393 394 virtual ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive > SAL_CALL drawTextLayout(const::com::sun::star::uno::Reference<::com::sun::star::rendering::XTextLayout> & layoutetText,const::com::sun::star::rendering::ViewState & viewState,const::com::sun::star::rendering::RenderState & renderState)395 drawTextLayout( const ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XTextLayout >& layoutetText, 396 const ::com::sun::star::rendering::ViewState& viewState, 397 const ::com::sun::star::rendering::RenderState& renderState ) 398 { 399 tools::verifyArgs(layoutetText, viewState, renderState, 400 BOOST_CURRENT_FUNCTION, 401 static_cast< UnambiguousBaseType* >(this)); 402 403 MutexType aGuard( BaseType::m_aMutex ); 404 405 mbSurfaceDirty = true; 406 maCanvasHelper.modifying(); 407 408 return maCanvasHelper.drawTextLayout( this, layoutetText, viewState, renderState ); 409 } 410 411 412 virtual ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive > SAL_CALL drawBitmap(const::com::sun::star::uno::Reference<::com::sun::star::rendering::XBitmap> & xBitmap,const::com::sun::star::rendering::ViewState & viewState,const::com::sun::star::rendering::RenderState & renderState)413 drawBitmap( const ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XBitmap >& xBitmap, 414 const ::com::sun::star::rendering::ViewState& viewState, 415 const ::com::sun::star::rendering::RenderState& renderState ) 416 { 417 tools::verifyArgs(xBitmap, viewState, renderState, 418 BOOST_CURRENT_FUNCTION, 419 static_cast< UnambiguousBaseType* >(this)); 420 421 MutexType aGuard( BaseType::m_aMutex ); 422 423 mbSurfaceDirty = true; 424 maCanvasHelper.modifying(); 425 426 return maCanvasHelper.drawBitmap( this, xBitmap, viewState, renderState ); 427 } 428 429 virtual ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive > SAL_CALL drawBitmapModulated(const::com::sun::star::uno::Reference<::com::sun::star::rendering::XBitmap> & xBitmap,const::com::sun::star::rendering::ViewState & viewState,const::com::sun::star::rendering::RenderState & renderState)430 drawBitmapModulated( const ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XBitmap >& xBitmap, 431 const ::com::sun::star::rendering::ViewState& viewState, 432 const ::com::sun::star::rendering::RenderState& renderState ) 433 { 434 tools::verifyArgs(xBitmap, viewState, renderState, 435 BOOST_CURRENT_FUNCTION, 436 static_cast< UnambiguousBaseType* >(this)); 437 438 MutexType aGuard( BaseType::m_aMutex ); 439 440 mbSurfaceDirty = true; 441 maCanvasHelper.modifying(); 442 443 return maCanvasHelper.drawBitmapModulated( this, xBitmap, viewState, renderState ); 444 } 445 446 virtual ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XGraphicDevice > SAL_CALL getDevice()447 getDevice() 448 { 449 MutexType aGuard( BaseType::m_aMutex ); 450 451 return maCanvasHelper.getDevice(); 452 } 453 454 protected: ~CanvasBase()455 ~CanvasBase() {} // we're a ref-counted UNO class. _We_ destroy ourselves. 456 457 HelperType maCanvasHelper; 458 mutable bool mbSurfaceDirty; 459 460 private: 461 CanvasBase( const CanvasBase& ); 462 CanvasBase& operator=( const CanvasBase& ); 463 }; 464 } 465 466 #endif /* INCLUDED_CANVAS_CANVASBASE_HXX */ 467