summaryrefslogtreecommitdiff
path: root/canvas/source/cairo/cairo_spritehelper.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'canvas/source/cairo/cairo_spritehelper.cxx')
-rw-r--r--canvas/source/cairo/cairo_spritehelper.cxx132
1 files changed, 66 insertions, 66 deletions
diff --git a/canvas/source/cairo/cairo_spritehelper.cxx b/canvas/source/cairo/cairo_spritehelper.cxx
index 8faf7be3a974..aafab160c51d 100644
--- a/canvas/source/cairo/cairo_spritehelper.cxx
+++ b/canvas/source/cairo/cairo_spritehelper.cxx
@@ -83,75 +83,75 @@ namespace cairocanvas
const double fAlpha( getAlpha() );
const ::basegfx::B2DHomMatrix aTransform( getTransformation() );
- if( isActive() && !::basegfx::fTools::equalZero( fAlpha ) )
+ if( !(isActive() && !::basegfx::fTools::equalZero( fAlpha )) )
+ return;
+
+ SAL_INFO( "canvas.cairo", "CanvasCustomSprite::redraw called");
+ if( !pCairo )
+ return;
+
+ basegfx::B2DVector aSize = getSizePixel();
+ cairo_save( pCairo.get() );
+
+ double fX, fY;
+
+ fX = rPos.getX();
+ fY = rPos.getY();
+
+ if( !aTransform.isIdentity() )
+ {
+ cairo_matrix_t aMatrix, aInverseMatrix;
+ cairo_matrix_init( &aMatrix,
+ aTransform.get( 0, 0 ), aTransform.get( 1, 0 ), aTransform.get( 0, 1 ),
+ aTransform.get( 1, 1 ), aTransform.get( 0, 2 ), aTransform.get( 1, 2 ) );
+
+ aMatrix.x0 = basegfx::fround( aMatrix.x0 );
+ aMatrix.y0 = basegfx::fround( aMatrix.y0 );
+
+ cairo_matrix_init( &aInverseMatrix, aMatrix.xx, aMatrix.yx, aMatrix.xy, aMatrix.yy, aMatrix.x0, aMatrix.y0 );
+ cairo_matrix_invert( &aInverseMatrix );
+ cairo_matrix_transform_distance( &aInverseMatrix, &fX, &fY );
+
+ cairo_set_matrix( pCairo.get(), &aMatrix );
+ }
+
+ fX = basegfx::fround( fX );
+ fY = basegfx::fround( fY );
+
+ cairo_matrix_t aOrigMatrix;
+ cairo_get_matrix( pCairo.get(), &aOrigMatrix );
+ cairo_translate( pCairo.get(), fX, fY );
+
+ if( getClip().is() )
{
- SAL_INFO( "canvas.cairo", "CanvasCustomSprite::redraw called");
- if( pCairo )
- {
- basegfx::B2DVector aSize = getSizePixel();
- cairo_save( pCairo.get() );
-
- double fX, fY;
-
- fX = rPos.getX();
- fY = rPos.getY();
-
- if( !aTransform.isIdentity() )
- {
- cairo_matrix_t aMatrix, aInverseMatrix;
- cairo_matrix_init( &aMatrix,
- aTransform.get( 0, 0 ), aTransform.get( 1, 0 ), aTransform.get( 0, 1 ),
- aTransform.get( 1, 1 ), aTransform.get( 0, 2 ), aTransform.get( 1, 2 ) );
-
- aMatrix.x0 = basegfx::fround( aMatrix.x0 );
- aMatrix.y0 = basegfx::fround( aMatrix.y0 );
-
- cairo_matrix_init( &aInverseMatrix, aMatrix.xx, aMatrix.yx, aMatrix.xy, aMatrix.yy, aMatrix.x0, aMatrix.y0 );
- cairo_matrix_invert( &aInverseMatrix );
- cairo_matrix_transform_distance( &aInverseMatrix, &fX, &fY );
-
- cairo_set_matrix( pCairo.get(), &aMatrix );
- }
-
- fX = basegfx::fround( fX );
- fY = basegfx::fround( fY );
-
- cairo_matrix_t aOrigMatrix;
- cairo_get_matrix( pCairo.get(), &aOrigMatrix );
- cairo_translate( pCairo.get(), fX, fY );
-
- if( getClip().is() )
- {
- const uno::Reference<rendering::XPolyPolygon2D>& rClip( getClip() );
-
- ::basegfx::B2DPolyPolygon aClipPoly(
- ::basegfx::unotools::b2DPolyPolygonFromXPolyPolygon2D(
- rClip ));
-
- doPolyPolygonImplementation( aClipPoly, Clip, pCairo.get(),
- nullptr, SurfaceProviderRef(mpSpriteCanvas.get()),
- rClip->getFillRule() );
- }
-
- SAL_INFO( "canvas.cairo","aSize " << aSize.getX() << " x " << aSize.getY() << " position: " << fX << "," << fY );
- cairo_rectangle( pCairo.get(), 0, 0, floor( aSize.getX() ), floor( aSize.getY() ) );
- cairo_clip( pCairo.get() );
- cairo_set_matrix( pCairo.get(), &aOrigMatrix );
-
- if( isContentFullyOpaque() )
- cairo_set_operator( pCairo.get(), CAIRO_OPERATOR_SOURCE );
- cairo_set_source_surface( pCairo.get(),
- mpBufferSurface->getCairoSurface().get(),
- fX, fY );
- if( ::rtl::math::approxEqual( fAlpha, 1.0 ) )
- cairo_paint( pCairo.get() );
- else
- cairo_paint_with_alpha( pCairo.get(), fAlpha );
-
- cairo_restore( pCairo.get() );
- }
+ const uno::Reference<rendering::XPolyPolygon2D>& rClip( getClip() );
+
+ ::basegfx::B2DPolyPolygon aClipPoly(
+ ::basegfx::unotools::b2DPolyPolygonFromXPolyPolygon2D(
+ rClip ));
+
+ doPolyPolygonImplementation( aClipPoly, Clip, pCairo.get(),
+ nullptr, SurfaceProviderRef(mpSpriteCanvas.get()),
+ rClip->getFillRule() );
}
+ SAL_INFO( "canvas.cairo","aSize " << aSize.getX() << " x " << aSize.getY() << " position: " << fX << "," << fY );
+ cairo_rectangle( pCairo.get(), 0, 0, floor( aSize.getX() ), floor( aSize.getY() ) );
+ cairo_clip( pCairo.get() );
+ cairo_set_matrix( pCairo.get(), &aOrigMatrix );
+
+ if( isContentFullyOpaque() )
+ cairo_set_operator( pCairo.get(), CAIRO_OPERATOR_SOURCE );
+ cairo_set_source_surface( pCairo.get(),
+ mpBufferSurface->getCairoSurface().get(),
+ fX, fY );
+ if( ::rtl::math::approxEqual( fAlpha, 1.0 ) )
+ cairo_paint( pCairo.get() );
+ else
+ cairo_paint_with_alpha( pCairo.get(), fAlpha );
+
+ cairo_restore( pCairo.get() );
+
#ifdef CAIRO_CANVAS_PERF_TRACE
mxDevice->stopPerfTrace( &aTimer, "sprite redraw" );
#endif