Avoid GDI measuring modes with CBDT fonts.
This fixes the scaledemoji_rendering GM CBDT font test for native fonts
with DirectWrite.
Change-Id: I60aaf4fe015e08192b4ac16ddd4436499d4a74ee
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/290820
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
diff --git a/src/ports/SkScalerContext_win_dw.cpp b/src/ports/SkScalerContext_win_dw.cpp
index b820890..f95f6c6 100644
--- a/src/ports/SkScalerContext_win_dw.cpp
+++ b/src/ports/SkScalerContext_win_dw.cpp
@@ -368,6 +368,15 @@
fTextSizeMeasure = realTextSize;
fMeasuringMode = DWRITE_MEASURING_MODE_NATURAL;
}
+
+ // The GDI measuring modes don't seem to work well with CBDT fonts (DWrite.dll 10.0.18362.836).
+ if (fMeasuringMode != DWRITE_MEASURING_MODE_NATURAL) {
+ constexpr UINT32 CBDTTag = DWRITE_MAKE_OPENTYPE_TAG('C','B','D','T');
+ AutoDWriteTable CBDT(typeface->fDWriteFontFace.get(), CBDTTag);
+ if (CBDT.fExists) {
+ fMeasuringMode = DWRITE_MEASURING_MODE_NATURAL;
+ }
+ }
}
SkScalerContext_DW::~SkScalerContext_DW() {