From 8a6348e6d2ef095358cfc7d29d2a50d684cc719e Mon Sep 17 00:00:00 2001 From: Herb Derby Date: Thu, 12 Jul 2018 15:30:35 -0400 Subject: 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 Reviewed-by: Herb Derby Reviewed-by: Mike Klein --- tests/GlyphRunTest.cpp | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'tests') 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(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; + } +} -- cgit v1.2.3