diff options
author | Herb Derby <herb@google.com> | 2018-06-18 19:13:37 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-06-22 15:26:17 +0000 |
commit | b9177cfaa8f56cc2f561669dc4e68cf6d43f529d (patch) | |
tree | e616eff6c9a54b7f21218e1d647e51914ec529e4 /tests | |
parent | 198498b010b92fae139df506a39fd4da8e846238 (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.cpp | 66 |
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 |