From 1ad3f6b8d9e0ef1e921c3ed5526ea352d67265cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubo=C5=A1=20Lu=C5=88=C3=A1k?= Date: Wed, 18 Mar 2020 12:10:29 +0100 Subject: [PATCH] (do not) use SK_GAMMA_APPLY_TO_A8 also for Skia text on Windows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is the Windows variant of the SK_GAMMA_APPLY_TO_A8 disabling, again I don't quite understand why we need to disable this, but with this patch Skia text rendering on Windows seems to be pixel-perfect when compared with the VCL gen backend. Change-Id: Iafc1e6353430e695dafa67d19eefd968d4f02ae2 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/90696 Tested-by: Jenkins Reviewed-by: Luboš Luňák --- external/skia/UnpackedTarball_skia.mk | 1 + external/skia/windows-text-gamma.patch.0 | 28 ++++++++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 external/skia/windows-text-gamma.patch.0 diff --git a/external/skia/UnpackedTarball_skia.mk b/external/skia/UnpackedTarball_skia.mk index 58818a840e3d..fd05e8d5b3e3 100644 --- a/external/skia/UnpackedTarball_skia.mk +++ b/external/skia/UnpackedTarball_skia.mk @@ -30,6 +30,7 @@ skia_patches := \ clang-attributes-warning.patch.1 \ fontconfig-get-typeface.patch.0 \ windows-hfont-typeface.patch.0 \ + windows-text-gamma.patch.0 \ $(eval $(call gb_UnpackedTarball_set_patchlevel,skia,1)) diff --git a/external/skia/windows-text-gamma.patch.0 b/external/skia/windows-text-gamma.patch.0 new file mode 100644 index 000000000000..366b67f15a65 --- /dev/null +++ b/external/skia/windows-text-gamma.patch.0 @@ -0,0 +1,28 @@ +--- ./src/ports/SkFontHost_win.cpp.sav 2020-03-18 10:26:52.470184300 +0100 ++++ ./src/ports/SkFontHost_win.cpp 2020-03-18 12:08:04.598406700 +0100 +@@ -1215,17 +1215,23 @@ + // since the caller may require A8 for maskfilters, we can't check for BW + // ... until we have the caller tell us that explicitly + const SkGdiRGB* src = (const SkGdiRGB*)bits; ++#if defined(SK_GAMMA_APPLY_TO_A8) + if (fPreBlend.isApplicable()) { + RGBToA8(src, srcRB, glyph, fPreBlend.fG); +- } else { ++ } else ++#endif ++ { + RGBToA8(src, srcRB, glyph, fPreBlend.fG); + } + } else { // LCD16 + const SkGdiRGB* src = (const SkGdiRGB*)bits; + SkASSERT(SkMask::kLCD16_Format == glyph.fMaskFormat); ++#if defined(SK_GAMMA_APPLY_TO_A8) + if (fPreBlend.isApplicable()) { + RGBToLcd16(src, srcRB, glyph, fPreBlend.fR, fPreBlend.fG, fPreBlend.fB); +- } else { ++ } else ++#endif ++ { + RGBToLcd16(src, srcRB, glyph, fPreBlend.fR, fPreBlend.fG, fPreBlend.fB); + } + }