Skip to content

Commit 8281f63

Browse files
committed
Add support for configuring font edging/hinting/subpixel to SkParagraph
1 parent e279839 commit 8281f63

File tree

4 files changed

+21
-9
lines changed

4 files changed

+21
-9
lines changed

modules/skparagraph/include/TextStyle.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,15 @@ class TextStyle {
287287
bool isPlaceholder() const { return fIsPlaceholder; }
288288
void setPlaceholder() { fIsPlaceholder = true; }
289289

290+
void setFontEdging(SkFont::Edging edging) { fEdging = edging; }
291+
SkFont::Edging getFontEdging() const { return fEdging; }
292+
293+
void setSubpixel(bool subpixel) { fSubpixel = subpixel; }
294+
bool getSubpixel() const { return fSubpixel; }
295+
296+
void setFontHinting(SkFontHinting hinting) { fHinting = hinting; }
297+
SkFontHinting getFontHinting() const { return fHinting; }
298+
290299
private:
291300
static const std::vector<SkString>* kDefaultFontFamilies;
292301

@@ -305,6 +314,9 @@ class TextStyle {
305314
std::vector<SkString> fFontFamilies = *kDefaultFontFamilies;
306315

307316
SkScalar fFontSize = 14.0;
317+
SkFont::Edging fEdging = SkFont::Edging::kAntiAlias;
318+
bool fSubpixel = true;
319+
SkFontHinting fHinting = SkFontHinting::kSlight;
308320
SkScalar fHeight = 1.0;
309321
bool fHeightOverride = false;
310322
SkScalar fBaselineShift = 0.0f;

modules/skparagraph/src/OneLineShaper.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -649,9 +649,9 @@ bool OneLineShaper::shape() {
649649

650650
// Create one more font to try
651651
SkFont font(std::move(typeface), block.fStyle.getFontSize());
652-
font.setEdging(SkFont::Edging::kAntiAlias);
653-
font.setHinting(SkFontHinting::kSlight);
654-
font.setSubpixel(true);
652+
font.setEdging(block.fStyle.getFontEdging());
653+
font.setHinting(block.fStyle.getFontHinting());
654+
font.setSubpixel(block.fStyle.getSubpixel());
655655

656656
// Apply fake bold and/or italic settings to the font if the
657657
// typeface's attributes do not match the intended font style.

modules/skparagraph/src/TextLine.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -684,9 +684,9 @@ std::unique_ptr<Run> TextLine::shapeEllipsis(const SkString& ellipsis, const Clu
684684
auto shaped = [&](sk_sp<SkTypeface> typeface, sk_sp<SkFontMgr> fallback) -> std::unique_ptr<Run> {
685685
ShapeHandler handler(run.heightMultiplier(), run.useHalfLeading(), run.baselineShift(), ellipsis);
686686
SkFont font(std::move(typeface), textStyle.getFontSize());
687-
font.setEdging(SkFont::Edging::kAntiAlias);
688-
font.setHinting(SkFontHinting::kSlight);
689-
font.setSubpixel(true);
687+
font.setEdging(textStyle.getFontEdging());
688+
font.setHinting(textStyle.getFontHinting());
689+
font.setSubpixel(textStyle.getSubpixel());
690690

691691
std::unique_ptr<SkShaper> shaper = SkShapers::HB::ShapeDontWrapOrReorder(
692692
fOwner->getUnicode(), fallback ? fallback : SkFontMgr::RefEmpty());

modules/skparagraph/src/TextStyle.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -166,9 +166,9 @@ bool TextStyle::matchOneAttribute(StyleType styleType, const TextStyle& other) c
166166

167167
void TextStyle::getFontMetrics(SkFontMetrics* metrics) const {
168168
SkFont font(fTypeface, fFontSize);
169-
font.setEdging(SkFont::Edging::kAntiAlias);
170-
font.setSubpixel(true);
171-
font.setHinting(SkFontHinting::kSlight);
169+
font.setEdging(fEdging);
170+
font.setSubpixel(fSubpixel);
171+
font.setHinting(fHinting);
172172
font.getMetrics(metrics);
173173
if (fHeightOverride) {
174174
auto multiplier = fHeight * fFontSize;

0 commit comments

Comments
 (0)