From 6f2e5d0fcc3c44dff36a0544fdbe02e9696727d8 Mon Sep 17 00:00:00 2001 From: Brandon DeRosier Date: Fri, 3 Feb 2023 14:58:33 -0800 Subject: [PATCH] [Impeller] Retain embolden/skew font properties when rendering text glyphs --- impeller/typographer/backends/skia/text_frame_skia.cc | 2 ++ .../typographer/backends/skia/text_render_context_skia.cc | 5 +++++ impeller/typographer/font.h | 6 +++++- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/impeller/typographer/backends/skia/text_frame_skia.cc b/impeller/typographer/backends/skia/text_frame_skia.cc index bd082ffb71c76..e717a8ab77f59 100644 --- a/impeller/typographer/backends/skia/text_frame_skia.cc +++ b/impeller/typographer/backends/skia/text_frame_skia.cc @@ -27,6 +27,8 @@ static Font ToFont(const SkTextBlobRunIterator& run, Scalar scale) { Font::Metrics metrics; metrics.scale = scale; metrics.point_size = font.getSize(); + metrics.embolden = font.isEmbolden(); + metrics.skewX = font.getSkewX(); return Font{std::move(typeface), metrics}; } diff --git a/impeller/typographer/backends/skia/text_render_context_skia.cc b/impeller/typographer/backends/skia/text_render_context_skia.cc index 332cc93b81e72..a45b7d5821cba 100644 --- a/impeller/typographer/backends/skia/text_render_context_skia.cc +++ b/impeller/typographer/backends/skia/text_render_context_skia.cc @@ -296,6 +296,11 @@ static void DrawGlyph(SkCanvas* canvas, SkFont sk_font( TypefaceSkia::Cast(*font_glyph.font.GetTypeface()).GetSkiaTypeface(), metrics.point_size); + sk_font.setEdging(SkFont::Edging::kAntiAlias); + sk_font.setHinting(SkFontHinting::kSlight); + sk_font.setEmbolden(metrics.embolden); + sk_font.setSkewX(metrics.skewX); + auto glyph_color = SK_ColorWHITE; SkPaint glyph_paint; diff --git a/impeller/typographer/font.h b/impeller/typographer/font.h index 3e56981206f52..c25a278d99161 100644 --- a/impeller/typographer/font.h +++ b/impeller/typographer/font.h @@ -11,6 +11,7 @@ #include "impeller/base/comparable.h" #include "impeller/typographer/glyph.h" #include "impeller/typographer/typeface.h" +#include "include/core/SkFont.h" namespace impeller { @@ -38,9 +39,12 @@ class Font : public Comparable { /// The point size of the font. /// Scalar point_size = 12.0f; + bool embolden = false; + Scalar skewX = 0.0f; constexpr bool operator==(const Metrics& o) const { - return scale == o.scale && point_size == o.point_size; + return scale == o.scale && point_size == o.point_size && + embolden == o.embolden && skewX == o.skewX; } };