21#include <com/sun/star/rendering/XCanvas.hpp>
46 class PolyPolyAction :
public CachedPrimitiveBase
49 PolyPolyAction( const ::basegfx::B2DPolyPolygon&,
54 PolyPolyAction( const ::basegfx::B2DPolyPolygon&,
61 virtual bool renderSubset( const ::basegfx::B2DHomMatrix& rTransformation,
62 const Subset& rSubset )
const override;
64 virtual ::basegfx::B2DRange getBounds( const ::basegfx::B2DHomMatrix& rTransformation )
const override;
65 virtual ::basegfx::B2DRange getBounds( const ::basegfx::B2DHomMatrix& rTransformation,
66 const Subset& rSubset )
const override;
68 virtual sal_Int32 getActionCount()
const override;
72 virtual bool renderPrimitive( uno::Reference< rendering::XCachedPrimitive >& rCachedPrimitive,
73 const ::basegfx::B2DHomMatrix& rTransformation )
const override;
75 const uno::Reference< rendering::XPolyPolygon2D >
mxPolyPoly;
85 PolyPolyAction::PolyPolyAction( const ::basegfx::B2DPolyPolygon& rPolyPoly,
87 const OutDevState& rState,
90 CachedPrimitiveBase( rCanvas, false ),
101 maState.DeviceColor = rState.lineColor;
104 PolyPolyAction::PolyPolyAction( const ::basegfx::B2DPolyPolygon& rPolyPoly,
106 const OutDevState& rState,
109 int nTransparency ) :
110 CachedPrimitiveBase( rCanvas, false ),
126 maFillColor.getArray()[3] = 1.0 - nTransparency / 100.0;
131 maState.DeviceColor = rState.lineColor;
133 if(
maState.DeviceColor.getLength() < 4 )
134 maState.DeviceColor.realloc( 4 );
138 maState.DeviceColor.getArray()[3] = 1.0 - nTransparency / 100.0;
142 bool PolyPolyAction::renderPrimitive( uno::Reference< rendering::XCachedPrimitive >& rCachedPrimitive,
143 const ::basegfx::B2DHomMatrix& rTransformation )
const
145 SAL_INFO(
"cppcanvas.emf",
"::cppcanvas::internal::PolyPolyAction::renderPrimitive()" );
146 SAL_INFO(
"cppcanvas.emf",
"::cppcanvas::internal::PolyPolyAction: 0x" << std::hex <<
this );
148 rendering::RenderState aLocalState(
maState );
149 ::canvas::tools::prependToRenderState(aLocalState, rTransformation);
155 const uno::Sequence< double > aTmpColor( aLocalState.DeviceColor );
162 aLocalState.DeviceColor = aTmpColor;
165 if( aLocalState.DeviceColor.hasElements() )
175 bool PolyPolyAction::renderSubset( const ::basegfx::B2DHomMatrix& rTransformation,
176 const Subset& rSubset )
const
183 if( rSubset.mnSubsetBegin != 0 ||
184 rSubset.mnSubsetEnd != 1 )
187 return CachedPrimitiveBase::render( rTransformation );
190 ::basegfx::B2DRange PolyPolyAction::getBounds( const ::basegfx::B2DHomMatrix& rTransformation )
const
192 rendering::RenderState aLocalState(
maState );
193 ::canvas::tools::prependToRenderState(aLocalState, rTransformation);
201 ::basegfx::B2DRange PolyPolyAction::getBounds( const ::basegfx::B2DHomMatrix& rTransformation,
202 const Subset& rSubset )
const
209 if( rSubset.mnSubsetBegin != 0 ||
210 rSubset.mnSubsetEnd != 1 )
211 return ::basegfx::B2DRange();
213 return getBounds( rTransformation );
216 sal_Int32 PolyPolyAction::getActionCount()
const
224 class TexturedPolyPolyAction :
public CachedPrimitiveBase
227 TexturedPolyPolyAction( const ::basegfx::B2DPolyPolygon& rPoly,
229 const OutDevState& rState,
230 const rendering::Texture& rTexture );
232 virtual bool renderSubset( const ::basegfx::B2DHomMatrix& rTransformation,
233 const Subset& rSubset )
const override;
235 virtual ::basegfx::B2DRange getBounds( const ::basegfx::B2DHomMatrix& rTransformation )
const override;
236 virtual ::basegfx::B2DRange getBounds( const ::basegfx::B2DHomMatrix& rTransformation,
237 const Subset& rSubset )
const override;
239 virtual sal_Int32 getActionCount()
const override;
242 using Action::render;
243 virtual bool renderPrimitive( uno::Reference< rendering::XCachedPrimitive >& rCachedPrimitive,
244 const ::basegfx::B2DHomMatrix& rTransformation )
const override;
246 const uno::Reference< rendering::XPolyPolygon2D >
mxPolyPoly;
247 const ::basegfx::B2DRectangle
maBounds;
251 rendering::RenderState
maState;
255 TexturedPolyPolyAction::TexturedPolyPolyAction( const ::basegfx::B2DPolyPolygon& rPolyPoly,
257 const OutDevState& rState,
258 const rendering::Texture& rTexture ) :
259 CachedPrimitiveBase( rCanvas, true ),
268 bool TexturedPolyPolyAction::renderPrimitive( uno::Reference< rendering::XCachedPrimitive >& rCachedPrimitive,
269 const ::basegfx::B2DHomMatrix& rTransformation )
const
271 SAL_INFO(
"cppcanvas.emf",
"::cppcanvas::internal::PolyPolyAction::renderPrimitive()" );
272 SAL_INFO(
"cppcanvas.emf",
"::cppcanvas::internal::PolyPolyAction: 0x" << std::hex <<
this );
274 rendering::RenderState aLocalState(
maState );
275 ::canvas::tools::prependToRenderState(aLocalState, rTransformation);
286 bool TexturedPolyPolyAction::renderSubset( const ::basegfx::B2DHomMatrix& rTransformation,
287 const Subset& rSubset )
const
294 if( rSubset.mnSubsetBegin != 0 ||
295 rSubset.mnSubsetEnd != 1 )
298 return CachedPrimitiveBase::render( rTransformation );
301 ::basegfx::B2DRange TexturedPolyPolyAction::getBounds( const ::basegfx::B2DHomMatrix& rTransformation )
const
303 rendering::RenderState aLocalState(
maState );
304 ::canvas::tools::prependToRenderState(aLocalState, rTransformation);
312 ::basegfx::B2DRange TexturedPolyPolyAction::getBounds( const ::basegfx::B2DHomMatrix& rTransformation,
313 const Subset& rSubset )
const
320 if( rSubset.mnSubsetBegin != 0 ||
321 rSubset.mnSubsetEnd != 1 )
322 return ::basegfx::B2DRange();
324 return getBounds( rTransformation );
327 sal_Int32 TexturedPolyPolyAction::getActionCount()
const
335 class StrokedPolyPolyAction :
public CachedPrimitiveBase
338 StrokedPolyPolyAction( const ::basegfx::B2DPolyPolygon& rPoly,
340 const OutDevState& rState,
341 rendering::StrokeAttributes aStrokeAttributes );
343 virtual bool renderSubset( const ::basegfx::B2DHomMatrix& rTransformation,
344 const Subset& rSubset )
const override;
346 virtual ::basegfx::B2DRange getBounds( const ::basegfx::B2DHomMatrix& rTransformation )
const override;
347 virtual ::basegfx::B2DRange getBounds( const ::basegfx::B2DHomMatrix& rTransformation,
348 const Subset& rSubset )
const override;
350 virtual sal_Int32 getActionCount()
const override;
353 using Action::render;
354 virtual bool renderPrimitive( uno::Reference< rendering::XCachedPrimitive >& rCachedPrimitive,
355 const ::basegfx::B2DHomMatrix& rTransformation )
const override;
357 const uno::Reference< rendering::XPolyPolygon2D >
mxPolyPoly;
358 const ::basegfx::B2DRectangle
maBounds;
360 rendering::RenderState
maState;
364 StrokedPolyPolyAction::StrokedPolyPolyAction( const ::basegfx::B2DPolyPolygon& rPolyPoly,
366 const OutDevState& rState,
367 rendering::StrokeAttributes aStrokeAttributes ) :
368 CachedPrimitiveBase( rCanvas, false ),
375 maState.DeviceColor = rState.lineColor;
378 bool StrokedPolyPolyAction::renderPrimitive( uno::Reference< rendering::XCachedPrimitive >& rCachedPrimitive,
379 const ::basegfx::B2DHomMatrix& rTransformation )
const
381 SAL_INFO(
"cppcanvas.emf",
"::cppcanvas::internal::PolyPolyAction::renderPrimitive()" );
382 SAL_INFO(
"cppcanvas.emf",
"::cppcanvas::internal::PolyPolyAction: 0x" << std::hex <<
this );
384 rendering::RenderState aLocalState(
maState );
385 ::canvas::tools::prependToRenderState(aLocalState, rTransformation);
394 bool StrokedPolyPolyAction::renderSubset( const ::basegfx::B2DHomMatrix& rTransformation,
395 const Subset& rSubset )
const
402 if( rSubset.mnSubsetBegin != 0 ||
403 rSubset.mnSubsetEnd != 1 )
406 return CachedPrimitiveBase::render( rTransformation );
409 ::basegfx::B2DRange StrokedPolyPolyAction::getBounds( const ::basegfx::B2DHomMatrix& rTransformation )
const
411 rendering::RenderState aLocalState(
maState );
412 ::canvas::tools::prependToRenderState(aLocalState, rTransformation);
420 ::basegfx::B2DRange StrokedPolyPolyAction::getBounds( const ::basegfx::B2DHomMatrix& rTransformation,
421 const Subset& rSubset )
const
428 if( rSubset.mnSubsetBegin != 0 ||
429 rSubset.mnSubsetEnd != 1 )
430 return ::basegfx::B2DRange();
432 return getBounds( rTransformation );
435 sal_Int32 StrokedPolyPolyAction::getActionCount()
const
448 "PolyPolyActionFactory::createPolyPolyAction() with empty line and fill color" );
449 return std::make_shared<PolyPolyAction>( rPoly, rCanvas, rState,
457 const rendering::Texture& rTexture )
459 return std::make_shared<TexturedPolyPolyAction>( rPoly, rCanvas, rState, rTexture );
467 "PolyPolyActionFactory::createLinePolyPolyAction() called with empty line color" );
469 return std::make_shared<PolyPolyAction>( rPoly, rCanvas, rState,
477 const rendering::StrokeAttributes& rStrokeAttributes )
480 "PolyPolyActionFactory::createPolyPolyAction() for strokes called with empty line color" );
481 return std::make_shared<StrokedPolyPolyAction>( rPoly, rCanvas, rState, rStrokeAttributes );
490 "PolyPolyActionFactory::createPolyPolyAction() with empty line and fill color" );
491 return std::make_shared<PolyPolyAction>( rPoly, rCanvas, rState,
virtual bool render(const ::basegfx::B2DHomMatrix &rTransformation) const =0
Render this action to the associated canvas.
Sequence< sal_Int8 > aSeq
#define SAL_INFO(area, stream)
B2DRange getRange(const B2DPolygon &rCandidate)
std::shared_ptr< Action > createLinePolyPolyAction(const ::basegfx::B2DPolyPolygon &, const CanvasSharedPtr &, const OutDevState &)
Create line polygon (always stroked, not filled)
std::shared_ptr< Action > createPolyPolyAction(const ::basegfx::B2DPolyPolygon &, const CanvasSharedPtr &, const OutDevState &)
Create polygon, fill/stroke according to state.
std::shared_ptr< Canvas > CanvasSharedPtr
const ::basegfx::B2DRange maBounds
const CanvasSharedPtr mpCanvas
rendering::RenderState maState
const uno::Reference< rendering::XPolyPolygon2D > mxPolyPoly
const rendering::Texture maTexture
uno::Sequence< double > maFillColor
const rendering::StrokeAttributes maStrokeAttributes