1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2018 The Android Open Source Project 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#include "src/core/SkGlyphRun.h" 9cb93a386Sopenharmony_ci 10cb93a386Sopenharmony_ci#include "include/core/SkTextBlob.h" 11cb93a386Sopenharmony_ci#include "tests/Test.h" 12cb93a386Sopenharmony_ci 13cb93a386Sopenharmony_ci#include <algorithm> 14cb93a386Sopenharmony_ci#include <memory> 15cb93a386Sopenharmony_ci 16cb93a386Sopenharmony_ci 17cb93a386Sopenharmony_ci#if 0 // should we revitalize this by consing up a device for drawTextBlob() ? 18cb93a386Sopenharmony_ciDEF_TEST(GlyphRunBlob, reporter) { 19cb93a386Sopenharmony_ci constexpr uint16_t count = 5; 20cb93a386Sopenharmony_ci constexpr int runCount = 2; 21cb93a386Sopenharmony_ci 22cb93a386Sopenharmony_ci auto tf = SkTypeface::MakeFromName("monospace", SkFontStyle()); 23cb93a386Sopenharmony_ci 24cb93a386Sopenharmony_ci SkFont font; 25cb93a386Sopenharmony_ci font.setTypeface(tf); 26cb93a386Sopenharmony_ci font.setHinting(SkFontHinting::kNormal); 27cb93a386Sopenharmony_ci font.setSize(1u); 28cb93a386Sopenharmony_ci 29cb93a386Sopenharmony_ci SkTextBlobBuilder blobBuilder; 30cb93a386Sopenharmony_ci for (int runNum = 0; runNum < runCount; runNum++) { 31cb93a386Sopenharmony_ci const auto& runBuffer = blobBuilder.allocRunPosH(font, count, runNum); 32cb93a386Sopenharmony_ci SkASSERT(runBuffer.utf8text == nullptr); 33cb93a386Sopenharmony_ci SkASSERT(runBuffer.clusters == nullptr); 34cb93a386Sopenharmony_ci 35cb93a386Sopenharmony_ci for (int i = 0; i < count; i++) { 36cb93a386Sopenharmony_ci runBuffer.glyphs[i] = static_cast<SkGlyphID>(i + runNum * count); 37cb93a386Sopenharmony_ci runBuffer.pos[i] = SkIntToScalar(i + runNum * count); 38cb93a386Sopenharmony_ci } 39cb93a386Sopenharmony_ci } 40cb93a386Sopenharmony_ci 41cb93a386Sopenharmony_ci auto blob = blobBuilder.make(); 42cb93a386Sopenharmony_ci 43cb93a386Sopenharmony_ci SkGlyphRunBuilder runBuilder; 44cb93a386Sopenharmony_ci SkPaint legacy_paint; 45cb93a386Sopenharmony_ci font.LEGACY_applyToPaint(&legacy_paint); 46cb93a386Sopenharmony_ci runBuilder.drawTextBlob(legacy_paint, *blob, SkPoint::Make(0, 0)); 47cb93a386Sopenharmony_ci 48cb93a386Sopenharmony_ci auto runList = runBuilder.useGlyphRunList(); 49cb93a386Sopenharmony_ci 50cb93a386Sopenharmony_ci REPORTER_ASSERT(reporter, runList.size() == runCount); 51cb93a386Sopenharmony_ci int runIndex = 0; 52cb93a386Sopenharmony_ci for (auto& run : runList) { 53cb93a386Sopenharmony_ci REPORTER_ASSERT(reporter, run.runSize() == count); 54cb93a386Sopenharmony_ci 55cb93a386Sopenharmony_ci int index = 0; 56cb93a386Sopenharmony_ci for (auto p : run.positions()) { 57cb93a386Sopenharmony_ci if (p.x() != runIndex * count + index) { 58cb93a386Sopenharmony_ci ERRORF(reporter, "x: %g != k: %d", p.x(), runIndex * count + index); 59cb93a386Sopenharmony_ci break; 60cb93a386Sopenharmony_ci } 61cb93a386Sopenharmony_ci index += 1; 62cb93a386Sopenharmony_ci } 63cb93a386Sopenharmony_ci 64cb93a386Sopenharmony_ci runIndex += 1; 65cb93a386Sopenharmony_ci } 66cb93a386Sopenharmony_ci} 67cb93a386Sopenharmony_ci#endif 68