@@ -27,26 +27,14 @@ static Font ToFont(const SkTextBlobRunIterator& run, Scalar scale) {
2727 Font::Metrics metrics;
2828 metrics.scale = scale;
2929 metrics.point_size = font.getSize ();
30- metrics.ascent = sk_metrics.fAscent ;
31- metrics.descent = sk_metrics.fDescent ;
32- metrics.min_extent = {sk_metrics.fXMin , sk_metrics.fTop };
33- metrics.max_extent = {sk_metrics.fXMax , sk_metrics.fBottom };
34-
35- std::vector<SkRect> glyph_bounds;
36- SkPaint paint;
37-
38- glyph_bounds.resize (run.glyphCount ());
39- run.font ().getBounds (run.glyphs (), run.glyphCount (), glyph_bounds.data (),
40- nullptr );
41- for (auto & bounds : glyph_bounds) {
42- metrics.min_extent = metrics.min_extent .Min ({bounds.fLeft , bounds.fTop });
43- metrics.max_extent =
44- metrics.max_extent .Max ({bounds.fRight , bounds.fBottom });
45- }
4630
4731 return Font{std::move (typeface), metrics};
4832}
4933
34+ static Rect ToRect (const SkRect& rect) {
35+ return Rect::MakeLTRB (rect.fLeft , rect.fTop , rect.fRight , rect.fBottom );
36+ }
37+
5038TextFrame TextFrameFromTextBlob (const sk_sp<SkTextBlob>& blob, Scalar scale) {
5139 if (!blob) {
5240 return {};
@@ -71,7 +59,11 @@ TextFrame TextFrameFromTextBlob(const sk_sp<SkTextBlob>& blob, Scalar scale) {
7159 case SkTextBlobRunIterator::kHorizontal_Positioning :
7260 FML_DLOG (ERROR ) << " Unimplemented." ;
7361 break ;
74- case SkTextBlobRunIterator::kFull_Positioning :
62+ case SkTextBlobRunIterator::kFull_Positioning : {
63+ std::vector<SkRect> glyph_bounds;
64+ glyph_bounds.resize (glyph_count);
65+ run.font ().getBounds (glyphs, glyph_count, glyph_bounds.data (), nullptr );
66+
7567 for (auto i = 0u ; i < glyph_count; i++) {
7668 // kFull_Positioning has two scalars per glyph.
7769 const SkPoint* glyph_points = run.points ();
@@ -80,10 +72,11 @@ TextFrame TextFrameFromTextBlob(const sk_sp<SkTextBlob>& blob, Scalar scale) {
8072 ? Glyph::Type::kBitmap
8173 : Glyph::Type::kPath ;
8274
83- text_run.AddGlyph (Glyph{glyphs[i], type},
75+ text_run.AddGlyph (Glyph{glyphs[i], type, ToRect (glyph_bounds[i]) },
8476 Point{point->x (), point->y ()});
8577 }
8678 break ;
79+ }
8780 case SkTextBlobRunIterator::kRSXform_Positioning :
8881 FML_DLOG (ERROR ) << " Unimplemented." ;
8982 break ;
0 commit comments