aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/shape/SkShaper_primitive.cpp
diff options
context:
space:
mode:
authorGravatar Ben Wagner <bungeman@google.com>2018-01-25 14:37:17 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-01-25 21:28:22 +0000
commit5d4dd8bef5d681648d1eff081959531aab3ecd30 (patch)
tree01757adbeb4cede8877ee27506da503ef87348d2 /tools/shape/SkShaper_primitive.cpp
parentc1ad0d1dff947e96889c4448675924f2beb388d8 (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.cpp23
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;
}