22 #include <com/sun/star/rendering/XPolyPolygon2D.hpp>
23 #include <com/sun/star/geometry/RealSize2D.hpp>
24 #include <com/sun/star/rendering/XBitmap.hpp>
25 #include <com/sun/star/geometry/IntegerSize2D.hpp>
32 #include <rtl/math.hxx>
53 const sal_Int32 nNumClipPolygons(
mxClipPoly->getNumberOfPolygons() );
64 const ::basegfx::B2DRectangle& rClipBounds(
67 const ::basegfx::B2DRectangle aBounds( 0.0, 0.0,
81 aClipBoundsA.
intersect( aSpriteRectPixel );
83 if( nNumClipPolygons != 1 )
94 const bool bNewClipIsRect(
99 const bool bUseOptimizedUpdate( bNewClipIsRect &&
109 bUseOptimizedUpdate )
113 std::vector< ::basegfx::B2DRectangle > aClipDifferences;
117 ::basegfx::computeSetDifference(aClipDifferences,
128 for(
const auto& rClipDiff : aClipDifferences )
158 mbIsCurrClipRectangle(true),
159 mbIsContentFullyOpaque( false ),
160 mbTransformDirty( true )
168 "CanvasCustomSpriteHelper::init(): Invalid owning sprite canvas" );
172 ceil( rSpriteSize.Width ) ) );
176 ceil( rSpriteSize.Height ) ) );
191 const uno::Reference< rendering::XBitmap >& xBitmap,
192 const rendering::ViewState& viewState,
193 const rendering::RenderState& renderState )
197 if( xBitmap->hasAlpha() )
200 const geometry::IntegerSize2D& rInputSize(
201 xBitmap->getSize() );
202 const ::basegfx::B2DSize& rOurSize(
203 rSprite->getSizePixel() );
243 const geometry::RealPoint2D& aNewPos,
244 const rendering::ViewState& viewState,
245 const rendering::RenderState& renderState )
258 aPoint *= aTransform;
263 const ::basegfx::B2DRectangle& rBounds
271 rBounds.getMinimum(),
273 rBounds.getRange() );
280 const geometry::AffineMatrix2D& aTransformation )
283 ::basegfx::unotools::homMatrixFromAffineMatrix(aMatrix,
290 const ::basegfx::B2DRectangle& rPrevBounds(
getUpdateArea() );
309 const uno::Reference< rendering::XPolyPolygon2D >& xClip )
314 const ::basegfx::B2DRectangle& rPrevBounds(
getUpdateArea() );
397 !::rtl::math::approxEqual(
mfAlpha, 1.0) )
441 return ::basegfx::B2DRectangle(
SpriteSurface::Reference mpSpriteCanvas
Owning sprite canvas.
void setAlpha(const Sprite::Reference &rSprite, double alpha)
void move(const Sprite::Reference &rSprite, const css::geometry::RealPoint2D &aNewPos, const css::rendering::ViewState &viewState, const css::rendering::RenderState &renderState)
void clearingContent(const Sprite::Reference &rSprite)
need to call this method for XCanvas::clear(), for opacity tracking
CanvasCustomSpriteHelper()
::basegfx::B2DRange maCurrClipBounds
Currently active clip area.
bool isAreaUpdateOpaque(const ::basegfx::B2DRange &rUpdateArea) const
const cppcanvas::SpriteCanvasSharedPtr mpSpriteCanvas
geometry::RealPoint2D maPosition
B2DPoint getMaximum() const
bool isInside(const B2DTuple &rTuple) const
void checkDrawBitmap(const Sprite::Reference &rSprite, const css::uno::Reference< css::rendering::XBitmap > &xBitmap, const css::rendering::ViewState &viewState, const css::rendering::RenderState &renderState)
need to call this method for XCanvas::drawBitmap(), for opacity tracking
void show(const Sprite::Reference &rSprite)
bool mbIsCurrClipRectangle
If true, denotes that the current sprite clip is a true rectangle, i.e.
::basegfx::B2DHomMatrix maTransform
void transform(const Sprite::Reference &rSprite, const css::geometry::AffineMatrix2D &aTransformation)
void intersect(const B2DRange &rRange)
B2DRange getRange(const B2DPolygon &rCandidate)
void hide(const Sprite::Reference &rSprite)
bool mbTransformDirty
True, iff maTransform has changed.
#define ENSURE_OR_THROW(c, m)
css::uno::Reference< css::rendering::XPolyPolygon2D > mxClipPoly
::basegfx::B2DVector maSize
::basegfx::B2DRange getUpdateArea() const
bool mbIsContentFullyOpaque
Redraw speedup.
void disposing()
Object is being disposed, release all internal references.
B2DPoint getMinimum() const
void clip(const Sprite::Reference &rSprite, const css::uno::Reference< css::rendering::XPolyPolygon2D > &aClip)
void translate(double fX, double fY)
::basegfx::B2DPoint maPosition
void setPriority(const Sprite::Reference &rSprite, double nPriority)
void init(const css::geometry::RealSize2D &rSpriteSize, const SpriteSurface::Reference &rOwningSpriteCanvas)
Init helper.
bool isRectangle(const B2DPolygon &rPoly)
::basegfx::B2IVector maSize
virtual ::basegfx::B2DPolyPolygon polyPolygonFromXPolyPolygon2D(css::uno::Reference< css::rendering::XPolyPolygon2D > &xPoly) const =0
Called to convert an API polygon to a basegfx polygon.
bool updateClipState(const Sprite::Reference &rSprite)
Update clip information from current state.