diff options
author | Herb Derby <herb@google.com> | 2018-07-12 15:30:35 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-07-13 03:21:54 +0000 |
commit | 8a6348e6d2ef095358cfc7d29d2a50d684cc719e (patch) | |
tree | 0554d2811a9550190ebca43f847b1c48e987f8cc /tests | |
parent | 1c5fd18927d5a128a12d7d5fe27f08d898be1e5b (diff) |
Introduce text blob processing but don't wire it up
Have all the old code paths start using lists in preparation
for introducing text blobs.
Change-Id: I65cc02ee3da63bc3c9492db78a08b0eee3b1f931
Reviewed-on: https://skia-review.googlesource.com/141081
Commit-Queue: Herb Derby <herb@google.com>
Reviewed-by: Herb Derby <herb@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/GlyphRunTest.cpp | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/tests/GlyphRunTest.cpp b/tests/GlyphRunTest.cpp index b87edc7731..49d7340aca 100644 --- a/tests/GlyphRunTest.cpp +++ b/tests/GlyphRunTest.cpp @@ -49,3 +49,57 @@ DEF_TEST(GlyphRunBasic, reporter) { SkGlyphRunBuilder builder; builder.drawText(paint, glyphs, count, SkPoint::Make(0, 0)); } + +DEF_TEST(GlyphRunBlob, reporter) { + constexpr uint16_t count = 5; + constexpr int runCount = 2; + + 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 < runCount; 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 * count); + runBuffer.pos[i] = SkIntToScalar(i + runNum * count); + } + } + + auto blob = blobBuilder.make(); + + SkPaint paint; + paint.setTextEncoding(SkPaint::kGlyphID_TextEncoding); + + SkGlyphRunBuilder runBuilder; + runBuilder.drawTextBlob(font, *blob, SkPoint::Make(0, 0)); + + auto runList = runBuilder.useGlyphRunList(); + + REPORTER_ASSERT(reporter, runList->size() == runCount); + int runIndex = 0; + for (auto& run : *runList) { + REPORTER_ASSERT(reporter, run.runSize() == count); + + int index = 0; + for (auto p : run.positions()) { + if (p.x() != runIndex * count + index) { + ERRORF(reporter, "x: %g != k: %d", p.x(), runIndex * count + index); + break; + } + index += 1; + } + + runIndex += 1; + } +} |