diff options
author | Ben Wagner <bungeman@google.com> | 2018-01-25 14:37:17 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-01-25 21:28:22 +0000 |
commit | 5d4dd8bef5d681648d1eff081959531aab3ecd30 (patch) | |
tree | 01757adbeb4cede8877ee27506da503ef87348d2 /tools/shape/SkShaper_primitive.cpp | |
parent | c1ad0d1dff947e96889c4448675924f2beb388d8 (diff) |
SkShaper to account for line wrap.
Now that line wrap is possible, handle it.
Change-Id: Ibe2c849cedfd91167c2d48352999052b61d47e9d
Reviewed-on: https://skia-review.googlesource.com/99885
Reviewed-by: Hal Canary <halcanary@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
Diffstat (limited to 'tools/shape/SkShaper_primitive.cpp')
-rw-r--r-- | tools/shape/SkShaper_primitive.cpp | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/tools/shape/SkShaper_primitive.cpp b/tools/shape/SkShaper_primitive.cpp index f236d89a2a..06a8bec41c 100644 --- a/tools/shape/SkShaper_primitive.cpp +++ b/tools/shape/SkShaper_primitive.cpp @@ -29,13 +29,13 @@ unsigned utf8_lead_byte_to_count(const char* ptr) { return (((0xE5 << 24) >> ((unsigned)c >> 4 << 1)) & 3) + 1; } -SkScalar SkShaper::shape(SkTextBlobBuilder* builder, - const SkPaint& srcPaint, - const char* utf8text, - size_t textBytes, - bool leftToRight, - SkPoint point, - SkScalar width) const { +SkPoint SkShaper::shape(SkTextBlobBuilder* builder, + const SkPaint& srcPaint, + const char* utf8text, + size_t textBytes, + bool leftToRight, + SkPoint point, + SkScalar width) const { sk_ignore_unused_variable(leftToRight); SkPaint paint(srcPaint); @@ -43,9 +43,12 @@ SkScalar SkShaper::shape(SkTextBlobBuilder* builder, paint.setTextEncoding(SkPaint::kUTF8_TextEncoding); int glyphCount = paint.countText(utf8text, textBytes); if (glyphCount <= 0) { - return 0; + return point; } SkRect bounds; + SkPaint::FontMetrics metrics; + paint.getFontMetrics(&metrics); + point.fY -= metrics.fAscent; (void)paint.measureText(utf8text, textBytes, &bounds); paint.setTextEncoding(SkPaint::kGlyphID_TextEncoding); const SkTextBlobBuilder::RunBuffer& runBuffer = @@ -67,5 +70,7 @@ SkScalar SkShaper::shape(SkTextBlobBuilder* builder, runBuffer.pos[i] = x; x += w; } - return (SkScalar)x; + point.fY += metrics.fDescent + metrics.fLeading; + + return point; } |