summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorLuboš Luňák <l.lunak@collabora.com>2020-05-25 12:55:45 +0200
committerLuboš Luňák <l.lunak@collabora.com>2020-05-25 13:52:08 +0200
commita6f9edbd3bf74022083302c6d857b644d71d2b48 (patch)
tree3080fe5f79a7c2e576a26eace18e0dc075e52150 /vcl
parented2c880a691a0b179bbc92a8ce4ee49eac004035 (diff)
high quality scale when drawing scaled Skia image (tdf#133339)
Apparently even drawBitmap() may lead to image scaling. Change-Id: I8665dfc4d12768c3824bbc45aaa72277168acc8d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/94781 Tested-by: Jenkins Reviewed-by: Luboš Luňák <l.lunak@collabora.com>
Diffstat (limited to 'vcl')
-rw-r--r--vcl/skia/gdiimpl.cxx8
1 files changed, 7 insertions, 1 deletions
diff --git a/vcl/skia/gdiimpl.cxx b/vcl/skia/gdiimpl.cxx
index b280f732425f..a2ccb12d406d 100644
--- a/vcl/skia/gdiimpl.cxx
+++ b/vcl/skia/gdiimpl.cxx
@@ -978,6 +978,9 @@ void SkiaSalGraphicsImpl::copyBits(const SalTwoRect& rPosAry, SalGraphics* pSrcG
sk_sp<SkImage> image = src->mSurface->makeImageSnapshot();
SkPaint paint;
paint.setBlendMode(SkBlendMode::kSrc); // copy as is, including alpha
+ if (rPosAry.mnSrcWidth != rPosAry.mnDestWidth
+ || rPosAry.mnSrcHeight != rPosAry.mnDestHeight)
+ paint.setFilterQuality(kHigh_SkFilterQuality);
getDrawCanvas()->drawImageRect(image,
SkIRect::MakeXYWH(rPosAry.mnSrcX, rPosAry.mnSrcY,
rPosAry.mnSrcWidth, rPosAry.mnSrcHeight),
@@ -1365,9 +1368,12 @@ void SkiaSalGraphicsImpl::drawImage(const SalTwoRect& rPosAry, const sk_sp<SkIma
SkPaint aPaint;
aPaint.setBlendMode(eBlendMode);
+ if (rPosAry.mnSrcWidth != rPosAry.mnDestWidth || rPosAry.mnSrcHeight != rPosAry.mnDestHeight)
+ aPaint.setFilterQuality(kHigh_SkFilterQuality);
preDraw();
- SAL_INFO("vcl.skia.trace", "drawimage(" << this << "): " << rPosAry << ":" << int(eBlendMode));
+ SAL_INFO("vcl.skia.trace",
+ "drawimage(" << this << "): " << rPosAry << ":" << SkBlendMode_Name(eBlendMode));
getDrawCanvas()->drawImageRect(aImage, aSourceRect, aDestinationRect, &aPaint);
addXorRegion(aDestinationRect);
postDraw();