Move SkScalerContext_DW::fIsColorFont to typeface.

There is no advantage to having every SkScalerContext_DW recompute and
store fIsColorFont when this is a constant on the typeface. Have the
typeface compute the value once and store and have the scaler contexts
look it up on the typeface.

Change-Id: Ib0441e4bc078da2bb9aa0cf5a97de7fe84947ce2
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/508177
Reviewed-by: Herb Derby <herb@google.com>
This commit is contained in:
Ben Wagner 2022-02-12 18:51:05 -05:00 committed by SkCQ
parent f55a0f7a48
commit baa0be10a2
3 changed files with 7 additions and 7 deletions

View File

@ -262,9 +262,6 @@ SkScalerContext_DW::SkScalerContext_DW(sk_sp<DWriteFontTypeface> typefaceRef,
{
DWriteFontTypeface* typeface = this->getDWriteTypeface();
fGlyphCount = typeface->fDWriteFontFace->GetGlyphCount();
fIsColorFont = typeface->fFactory2 &&
typeface->fDWriteFontFace2 &&
typeface->fDWriteFontFace2->IsColorFont();
// In general, all glyphs should use NATURAL_SYMMETRIC
// except when bi-level rendering is requested or there are embedded
@ -744,13 +741,14 @@ void SkScalerContext_DW::generateMetrics(SkGlyph* glyph, SkArenaAlloc* alloc) {
return;
}
if (fIsColorFont && isColorGlyph(*glyph) && generateColorMetrics(glyph)) {
DWriteFontTypeface* typeface = this->getDWriteTypeface();
if (typeface->fIsColorFont && isColorGlyph(*glyph) && generateColorMetrics(glyph)) {
glyph->fMaskFormat = SkMask::kARGB32_Format;
glyph->setPath(alloc, nullptr, false);
return;
}
if (fIsColorFont && isPngGlyph(*glyph) && generatePngMetrics(glyph)) {
if (typeface->fIsColorFont && isPngGlyph(*glyph) && generatePngMetrics(glyph)) {
glyph->fMaskFormat = SkMask::kARGB32_Format;
glyph->setPath(alloc, nullptr, false);
return;
@ -1174,7 +1172,7 @@ void SkScalerContext_DW::generateImage(const SkGlyph& glyph) {
}
if (SkMask::kARGB32_Format == glyph.fMaskFormat) {
if (fIsColorFont) {
if (this->getDWriteTypeface()->fIsColorFont) {
if (isColorGlyph(glyph)) {
generateColorGlyphImage(glyph);
return;

View File

@ -93,7 +93,6 @@ private:
DWRITE_MEASURING_MODE fMeasuringMode;
DWRITE_TEXT_ANTIALIAS_MODE fAntiAliasMode;
DWRITE_GRID_FIT_MODE fGridFitMode;
bool fIsColorFont;
};
#endif

View File

@ -90,6 +90,8 @@ private:
if (fDWriteFontFace1 && fDWriteFontFace1->IsMonospacedFont()) {
this->setIsFixedPitch(true);
}
fIsColorFont = fFactory2 && fDWriteFontFace2 && fDWriteFontFace2->IsColorFont();
}
public:
@ -101,6 +103,7 @@ public:
SkTScopedComPtr<IDWriteFontFace1> fDWriteFontFace1;
SkTScopedComPtr<IDWriteFontFace2> fDWriteFontFace2;
SkTScopedComPtr<IDWriteFontFace4> fDWriteFontFace4;
bool fIsColorFont;
static sk_sp<DWriteFontTypeface> Make(
IDWriteFactory* factory,