aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/GlyphRunTest.cpp
diff options
context:
space:
mode:
authorGravatar Herb Derby <herb@google.com>2018-06-18 19:13:37 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-06-21 19:11:47 +0000
commitf2e4a039df33d9246bd0ec68602d4d06e6199553 (patch)
tree1372f66fea4fab088a1402f1f15a3e23d0822b7e /tests/GlyphRunTest.cpp
parent5083f5f3d2e2f3bc08cdf903666b649c8218ce8c (diff)
Add SkGlyphRunList
Extend the glyph run system with a glyph run list. This allows the processing of text blobs. Add original text an cluster to runs for PDF. Change-Id: If4867d000e45f8975a30e982fc8fdbe104ef4332 Reviewed-on: https://skia-review.googlesource.com/135627 Reviewed-by: Ben Wagner <bungeman@google.com> Commit-Queue: Herb Derby <herb@google.com>
Diffstat (limited to 'tests/GlyphRunTest.cpp')
-rw-r--r--tests/GlyphRunTest.cpp46
1 files changed, 45 insertions, 1 deletions
diff --git a/tests/GlyphRunTest.cpp b/tests/GlyphRunTest.cpp
index 3b25625a7a..9dc5b55978 100644
--- a/tests/GlyphRunTest.cpp
+++ b/tests/GlyphRunTest.cpp
@@ -7,9 +7,11 @@
#include "SkGlyphRun.h"
+#include "SkTextBlob.h"
+
#include "Test.h"
-DEF_TEST(GlyphRunInfo, reporter) {
+DEF_TEST(GlyphRunBasic, reporter) {
SkGlyphID glyphs[] = {100, 3, 240, 3, 234, 111, 3, 4, 10, 11};
uint16_t count = SK_ARRAY_COUNT(glyphs);
@@ -18,5 +20,47 @@ DEF_TEST(GlyphRunInfo, reporter) {
SkGlyphRunBuilder builder;
builder.prepareDrawText(paint, glyphs, count, SkPoint::Make(0, 0));
+}
+
+DEF_TEST(GlyphRunBlob, reporter) {
+ uint16_t count = 10;
+
+ auto tf = SkTypeface::MakeFromName("monospace", SkFontStyle());
+
+ SkPaint font;
+ font.setTypeface(tf);
+ font.setTextEncoding(SkPaint::kGlyphID_TextEncoding);
+ font.setTextAlign(SkPaint::kLeft_Align);
+ font.setStyle(SkPaint::kFill_Style);
+ font.setHinting(SkPaint::kNormal_Hinting);
+ font.setTextSize(1u);
+
+ SkTextBlobBuilder blobBuilder;
+ SkRect bounds = SkRect::MakeWH(10, 10);
+ for (int runNum = 0; runNum < 2; runNum++) {
+ const auto& runBuffer = blobBuilder.allocRunPosH(font, count, runNum, &bounds);
+ SkASSERT(runBuffer.utf8text == nullptr);
+ SkASSERT(runBuffer.clusters == nullptr);
+
+ for (int i = 0; i < count; i++) {
+ runBuffer.glyphs[i] = static_cast<SkGlyphID>(i + runNum * 10);
+ runBuffer.pos[i] = SkIntToScalar(i + runNum * 10);
+ }
+ }
+
+ auto blob = blobBuilder.make();
+
+ SkPaint paint;
+ paint.setTextEncoding(SkPaint::kGlyphID_TextEncoding);
+
+ SkGlyphRunBuilder runBuilder;
+ runBuilder.prepareTextBlob(font, *blob, SkPoint::Make(0, 0));
+
+ auto runList = runBuilder.useGlyphRunList();
+ REPORTER_ASSERT(reporter, runList->size() == 2);
+ for (auto& run : *runList) {
+ REPORTER_ASSERT(reporter, run.runSize() == 10);
+ REPORTER_ASSERT(reporter, run.uniqueSize() == 10);
+ }
} \ No newline at end of file