diff --git a/modules/skparagraph/include/TextStyle.h b/modules/skparagraph/include/TextStyle.h index 4bc2fb9dbcdf..24b1fc679b2a 100644 --- a/modules/skparagraph/include/TextStyle.h +++ b/modules/skparagraph/include/TextStyle.h @@ -287,6 +287,15 @@ class TextStyle { bool isPlaceholder() const { return fIsPlaceholder; } void setPlaceholder() { fIsPlaceholder = true; } + void setFontEdging(SkFont::Edging edging) { fEdging = edging; } + SkFont::Edging getFontEdging() const { return fEdging; } + + void setSubpixel(bool subpixel) { fSubpixel = subpixel; } + bool getSubpixel() const { return fSubpixel; } + + void setFontHinting(SkFontHinting hinting) { fHinting = hinting; } + SkFontHinting getFontHinting() const { return fHinting; } + private: static const std::vector* kDefaultFontFamilies; @@ -305,6 +314,9 @@ class TextStyle { std::vector fFontFamilies = *kDefaultFontFamilies; SkScalar fFontSize = 14.0; + SkFont::Edging fEdging = SkFont::Edging::kAntiAlias; + bool fSubpixel = true; + SkFontHinting fHinting = SkFontHinting::kSlight; SkScalar fHeight = 1.0; bool fHeightOverride = false; SkScalar fBaselineShift = 0.0f; diff --git a/modules/skparagraph/src/OneLineShaper.cpp b/modules/skparagraph/src/OneLineShaper.cpp index de1362cbf8cc..ded346e67c97 100644 --- a/modules/skparagraph/src/OneLineShaper.cpp +++ b/modules/skparagraph/src/OneLineShaper.cpp @@ -649,9 +649,9 @@ bool OneLineShaper::shape() { // Create one more font to try SkFont font(std::move(typeface), block.fStyle.getFontSize()); - font.setEdging(SkFont::Edging::kAntiAlias); - font.setHinting(SkFontHinting::kSlight); - font.setSubpixel(true); + font.setEdging(block.fStyle.getFontEdging()); + font.setHinting(block.fStyle.getFontHinting()); + font.setSubpixel(block.fStyle.getSubpixel()); // Apply fake bold and/or italic settings to the font if the // typeface's attributes do not match the intended font style. diff --git a/modules/skparagraph/src/TextLine.cpp b/modules/skparagraph/src/TextLine.cpp index fc7e6d44cf8b..f58b7620ed94 100644 --- a/modules/skparagraph/src/TextLine.cpp +++ b/modules/skparagraph/src/TextLine.cpp @@ -684,9 +684,9 @@ std::unique_ptr TextLine::shapeEllipsis(const SkString& ellipsis, const Clu auto shaped = [&](sk_sp typeface, sk_sp fallback) -> std::unique_ptr { ShapeHandler handler(run.heightMultiplier(), run.useHalfLeading(), run.baselineShift(), ellipsis); SkFont font(std::move(typeface), textStyle.getFontSize()); - font.setEdging(SkFont::Edging::kAntiAlias); - font.setHinting(SkFontHinting::kSlight); - font.setSubpixel(true); + font.setEdging(textStyle.getFontEdging()); + font.setHinting(textStyle.getFontHinting()); + font.setSubpixel(textStyle.getSubpixel()); std::unique_ptr shaper = SkShapers::HB::ShapeDontWrapOrReorder( fOwner->getUnicode(), fallback ? fallback : SkFontMgr::RefEmpty()); diff --git a/modules/skparagraph/src/TextStyle.cpp b/modules/skparagraph/src/TextStyle.cpp index 492f94fe106e..26a7a9eb5925 100644 --- a/modules/skparagraph/src/TextStyle.cpp +++ b/modules/skparagraph/src/TextStyle.cpp @@ -166,9 +166,9 @@ bool TextStyle::matchOneAttribute(StyleType styleType, const TextStyle& other) c void TextStyle::getFontMetrics(SkFontMetrics* metrics) const { SkFont font(fTypeface, fFontSize); - font.setEdging(SkFont::Edging::kAntiAlias); - font.setSubpixel(true); - font.setHinting(SkFontHinting::kSlight); + font.setEdging(fEdging); + font.setSubpixel(fSubpixel); + font.setHinting(fHinting); font.getMetrics(metrics); if (fHeightOverride) { auto multiplier = fHeight * fFontSize;