aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests
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-22 15:26:17 +0000
commitb9177cfaa8f56cc2f561669dc4e68cf6d43f529d (patch)
treee616eff6c9a54b7f21218e1d647e51914ec529e4 /tests
parent198498b010b92fae139df506a39fd4da8e846238 (diff)
Add SkGlyphRunList - v2
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. PS - the original had read off the end of a buffer problem. Change-Id: I9430f0c27aaa3d9458bfe3caba5f433b72fdf84c Reviewed-on: https://skia-review.googlesource.com/136792 Reviewed-by: Ben Wagner <bungeman@google.com> Commit-Queue: Herb Derby <herb@google.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/GlyphRunTest.cpp66
1 files changed, 65 insertions, 1 deletions
diff --git a/tests/GlyphRunTest.cpp b/tests/GlyphRunTest.cpp
index 3b25625a7a..ca97404e7c 100644
--- a/tests/GlyphRunTest.cpp
+++ b/tests/GlyphRunTest.cpp
@@ -7,9 +7,32 @@
#include "SkGlyphRun.h"
+#include "SkTextBlob.h"
+
#include "Test.h"
-DEF_TEST(GlyphRunInfo, reporter) {
+DEF_TEST(GlyphSetBasic, reporter) {
+ SkGlyphSet set;
+
+ std::vector<SkGlyphID> unique;
+
+ set.reuse(10, &unique);
+ REPORTER_ASSERT(reporter, set.add(7) == 0);
+ REPORTER_ASSERT(reporter, set.add(3) == 1);
+ set.reuse(10, &unique);
+ REPORTER_ASSERT(reporter, set.add(5) == 0);
+ REPORTER_ASSERT(reporter, set.add(8) == 1);
+ REPORTER_ASSERT(reporter, set.add(3) == 2);
+
+ REPORTER_ASSERT(reporter, unique.size() == 5);
+ REPORTER_ASSERT(reporter, unique[0] == 7);
+ REPORTER_ASSERT(reporter, unique[1] == 3);
+ REPORTER_ASSERT(reporter, unique[2] == 5);
+ REPORTER_ASSERT(reporter, unique[3] == 8);
+ REPORTER_ASSERT(reporter, unique[4] == 3);
+}
+
+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 +41,46 @@ DEF_TEST(GlyphRunInfo, reporter) {
SkGlyphRunBuilder builder;
builder.prepareDrawText(paint, glyphs, count, SkPoint::Make(0, 0));
+}
+
+DEF_TEST(GlyphRunBlob, reporter) {
+ constexpr 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;
+ for (int runNum = 0; runNum < 2; runNum++) {
+ const auto& runBuffer = blobBuilder.allocRunPosH(font, count, runNum);
+ 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