summaryrefslogtreecommitdiff
path: root/canvas
diff options
context:
space:
mode:
authorLuboš Luňák <l.lunak@collabora.com>2021-02-19 15:06:14 +0100
committerLuboš Luňák <l.lunak@collabora.com>2021-02-24 12:39:45 +0100
commitf57872d2da23c8a3f90c67b6ad4a3ad0f699a276 (patch)
tree1a2f4e9907dca88f1bec0f08b6978636148ec8c8 /canvas
parent9c00f3f9cfb0eeb2e4d8524381fbf2367103d0fc (diff)
simply use drawTransformedBitmap()
At least with Skia this is faster than GraphicObject trying to handle it manually, even in raster mode. Change-Id: If77d108751f5621878d4ea87a996c2ea0253d111 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111246 Tested-by: Jenkins Reviewed-by: Luboš Luňák <l.lunak@collabora.com>
Diffstat (limited to 'canvas')
-rw-r--r--canvas/source/vcl/canvashelper.cxx22
1 files changed, 22 insertions, 0 deletions
diff --git a/canvas/source/vcl/canvashelper.cxx b/canvas/source/vcl/canvashelper.cxx
index 501741301d8e..89ee207989c6 100644
--- a/canvas/source/vcl/canvashelper.cxx
+++ b/canvas/source/vcl/canvashelper.cxx
@@ -723,6 +723,28 @@ namespace vclcanvas
// itself serves this purpose
return uno::Reference< rendering::XCachedPrimitive >(nullptr);
}
+ else if( !bModulateColors && mpOutDevProvider->getOutDev().HasFastDrawTransformedBitmap())
+ {
+ ::basegfx::B2DHomMatrix aSizeTransform;
+ aSizeTransform.scale( aBmpEx.GetSizePixel().Width(), aBmpEx.GetSizePixel().Height() );
+ aMatrix = aMatrix * aSizeTransform;
+
+ mpOutDevProvider->getOutDev().DrawTransformedBitmapEx( aMatrix, aBmpEx );
+ if( mp2ndOutDevProvider )
+ {
+ // HACK. Normally, CanvasHelper does not care about
+ // actually what mp2ndOutDev is... well, here we do &
+ // assume a 1bpp target - everything beyond 97%
+ // transparency is fully transparent
+ if( aBmpEx.IsAlpha() )
+ {
+ BitmapFilter::Filter(aBmpEx, BitmapAlphaClampFilter(253));
+ }
+
+ mp2ndOutDevProvider->getOutDev().DrawTransformedBitmapEx( aMatrix, aBmpEx );
+ }
+ return uno::Reference< rendering::XCachedPrimitive >(nullptr);
+ }
else
{
// Matrix contains non-trivial transformation (or