Use SkFont for managing distance field text
Change-Id: I4512a98063301e91bbcefe3f55de16f26601d39b
Reviewed-on: https://skia-review.googlesource.com/c/178283
Reviewed-by: Jim Van Verth <jvanverth@google.com>
Commit-Queue: Herb Derby <herb@google.com>
diff --git a/src/core/SkGlyphRunPainter.cpp b/src/core/SkGlyphRunPainter.cpp
index bd1c55f..0059870 100644
--- a/src/core/SkGlyphRunPainter.cpp
+++ b/src/core/SkGlyphRunPainter.cpp
@@ -721,10 +721,16 @@
// Setup distance field runPaint and text ratio
SkScalar textScale;
SkPaint distanceFieldPaint{runPaint};
- runFont.LEGACY_applyToPaint(&distanceFieldPaint);
+ SkFont distanceFieldFont{runFont};
SkScalerContextFlags flags;
- GrTextContext::InitDistanceFieldPaint(this, &distanceFieldPaint, viewMatrix,
- options, &textScale, &flags);
+ GrTextContext::InitDistanceFieldPaint(runFont.getSize(),
+ viewMatrix,
+ options,
+ this,
+ &distanceFieldPaint,
+ &distanceFieldFont,
+ &textScale,
+ &flags);
this->setHasDistanceField();
run->setSubRunHasDistanceFields(
runFont.getEdging() == SkFont::Edging::kSubpixelAntiAlias,
@@ -732,8 +738,8 @@
hasWCoord);
{
- SkFont font = SkFont::LEGACY_ExtractFromPaint(distanceFieldPaint);
- auto cache = run->setupCache(distanceFieldPaint, font, props, flags, SkMatrix::I());
+ auto cache = run->setupCache(
+ distanceFieldPaint, distanceFieldFont, props, flags, SkMatrix::I());
sk_sp<GrTextStrike> currStrike = glyphCache->getStrike(cache.get());
@@ -1011,13 +1017,18 @@
}
SkScalar textRatio;
- SkPaint dfPaint(runPaint);
- runFont.LEGACY_applyToPaint(&dfPaint);
+ SkPaint dfPaint{runPaint};
+ SkFont dfFont{runFont};
SkScalerContextFlags flags;
- GrTextContext::InitDistanceFieldPaint(nullptr, &dfPaint, runMatrix, options, &textRatio,
+ GrTextContext::InitDistanceFieldPaint(runFont.getSize(),
+ runMatrix,
+ options,
+ nullptr,
+ &dfPaint,
+ &dfFont,
+ &textRatio,
&flags);
SkScalerContextEffects effects;
- SkFont dfFont = SkFont::LEGACY_ExtractFromPaint(dfPaint);
auto* sdfCache = fStrikeServer->getOrCreateCache(dfPaint, dfFont, this->surfaceProps(),
SkMatrix::I(), flags, &effects);
diff --git a/src/gpu/text/GrTextContext.cpp b/src/gpu/text/GrTextContext.cpp
index 4e9b42b..2d8d163 100644
--- a/src/gpu/text/GrTextContext.cpp
+++ b/src/gpu/text/GrTextContext.cpp
@@ -129,13 +129,14 @@
return true;
}
-void GrTextContext::InitDistanceFieldPaint(GrTextBlob* blob,
- SkPaint* skPaint,
+void GrTextContext::InitDistanceFieldPaint(const SkScalar textSize,
const SkMatrix& viewMatrix,
const Options& options,
+ GrTextBlob* blob,
+ SkPaint* skPaint,
+ SkFont* skFont,
SkScalar* textRatio,
SkScalerContextFlags* flags) {
- SkScalar textSize = skPaint->getTextSize();
SkScalar scaledTextSize = textSize;
if (viewMatrix.hasPerspective()) {
@@ -160,17 +161,17 @@
dfMaskScaleFloor = options.fMinDistanceFieldFontSize;
dfMaskScaleCeil = kSmallDFFontLimit;
*textRatio = textSize / kSmallDFFontSize;
- skPaint->setTextSize(SkIntToScalar(kSmallDFFontSize));
+ skFont->setSize(SkIntToScalar(kSmallDFFontSize));
} else if (scaledTextSize <= kMediumDFFontLimit) {
dfMaskScaleFloor = kSmallDFFontLimit;
dfMaskScaleCeil = kMediumDFFontLimit;
*textRatio = textSize / kMediumDFFontSize;
- skPaint->setTextSize(SkIntToScalar(kMediumDFFontSize));
+ skFont->setSize(SkIntToScalar(kMediumDFFontSize));
} else {
dfMaskScaleFloor = kMediumDFFontLimit;
dfMaskScaleCeil = options.fMaxDistanceFieldFontSize;
*textRatio = textSize / kLargeDFFontSize;
- skPaint->setTextSize(SkIntToScalar(kLargeDFFontSize));
+ skFont->setSize(SkIntToScalar(kLargeDFFontSize));
}
// Because there can be multiple runs in the blob, we want the overall maxMinScale, and
@@ -186,11 +187,10 @@
dfMaskScaleCeil / scaledTextSize);
}
- skPaint->setAntiAlias(true);
- skPaint->setLCDRenderText(false);
- skPaint->setAutohinted(false);
- skPaint->setHinting(kNormal_SkFontHinting);
- skPaint->setSubpixelText(true);
+ skFont->setEdging(SkFont::Edging::kAntiAlias);
+ skFont->setForceAutoHinting(false);
+ skFont->setHinting(kNormal_SkFontHinting);
+ skFont->setSubpixel(true);
skPaint->setMaskFilter(GrSDFMaskFilter::Make());
diff --git a/src/gpu/text/GrTextContext.h b/src/gpu/text/GrTextContext.h
index 604f168..46f5d3f 100644
--- a/src/gpu/text/GrTextContext.h
+++ b/src/gpu/text/GrTextContext.h
@@ -61,10 +61,12 @@
const SkSurfaceProps& props,
bool contextSupportsDistanceFieldText,
const Options& options);
- static void InitDistanceFieldPaint(GrTextBlob* blob,
- SkPaint* skPaint,
+ static void InitDistanceFieldPaint(SkScalar textSize,
const SkMatrix& viewMatrix,
const Options& options,
+ GrTextBlob* blob,
+ SkPaint* skPaint,
+ SkFont* skFont,
SkScalar* textRatio,
SkScalerContextFlags* flags);