1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2012 Google Inc. 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 "gm/gm.h" 9cb93a386Sopenharmony_ci#include "include/core/SkCanvas.h" 10cb93a386Sopenharmony_ci#include "include/core/SkColor.h" 11cb93a386Sopenharmony_ci#include "include/core/SkFont.h" 12cb93a386Sopenharmony_ci#include "include/core/SkFontTypes.h" 13cb93a386Sopenharmony_ci#include "include/core/SkPaint.h" 14cb93a386Sopenharmony_ci#include "include/core/SkPath.h" 15cb93a386Sopenharmony_ci#include "include/core/SkPoint.h" 16cb93a386Sopenharmony_ci#include "include/core/SkScalar.h" 17cb93a386Sopenharmony_ci#include "include/core/SkTextBlob.h" 18cb93a386Sopenharmony_ci#include "include/core/SkTypeface.h" 19cb93a386Sopenharmony_ci#include "include/private/SkTemplates.h" 20cb93a386Sopenharmony_ci#include "include/utils/SkRandom.h" 21cb93a386Sopenharmony_ci#include "src/core/SkFontPriv.h" 22cb93a386Sopenharmony_ci#include "tools/ToolUtils.h" 23cb93a386Sopenharmony_ci 24cb93a386Sopenharmony_ci#include <string.h> 25cb93a386Sopenharmony_ci 26cb93a386Sopenharmony_cistatic void strokePath(SkCanvas* canvas, const SkPath& path) { 27cb93a386Sopenharmony_ci SkPaint paint; 28cb93a386Sopenharmony_ci paint.setAntiAlias(true); 29cb93a386Sopenharmony_ci paint.setColor(SK_ColorRED); 30cb93a386Sopenharmony_ci paint.setStyle(SkPaint::kStroke_Style); 31cb93a386Sopenharmony_ci canvas->drawPath(path, paint); 32cb93a386Sopenharmony_ci} 33cb93a386Sopenharmony_ciDEF_SIMPLE_GM(getpostextpath, canvas, 480, 780) { 34cb93a386Sopenharmony_ci // explicitly add spaces, to test a prev. bug 35cb93a386Sopenharmony_ci const char* text = "Ham bur ge fons"; 36cb93a386Sopenharmony_ci size_t len = strlen(text); 37cb93a386Sopenharmony_ci SkPath path; 38cb93a386Sopenharmony_ci 39cb93a386Sopenharmony_ci SkFont font; 40cb93a386Sopenharmony_ci font.setTypeface(ToolUtils::create_portable_typeface()); 41cb93a386Sopenharmony_ci font.setSize(48); 42cb93a386Sopenharmony_ci 43cb93a386Sopenharmony_ci SkPaint paint; 44cb93a386Sopenharmony_ci paint.setAntiAlias(true); 45cb93a386Sopenharmony_ci 46cb93a386Sopenharmony_ci canvas->translate(SkIntToScalar(10), SkIntToScalar(64)); 47cb93a386Sopenharmony_ci 48cb93a386Sopenharmony_ci canvas->drawSimpleText(text, len, SkTextEncoding::kUTF8, 0, 0, font, paint); 49cb93a386Sopenharmony_ci ToolUtils::get_text_path(font, text, len, SkTextEncoding::kUTF8, &path, nullptr); 50cb93a386Sopenharmony_ci strokePath(canvas, path); 51cb93a386Sopenharmony_ci path.reset(); 52cb93a386Sopenharmony_ci 53cb93a386Sopenharmony_ci SkAutoToGlyphs atg(font, text, len, SkTextEncoding::kUTF8); 54cb93a386Sopenharmony_ci const int count = atg.count(); 55cb93a386Sopenharmony_ci SkAutoTArray<SkPoint> pos(count); 56cb93a386Sopenharmony_ci SkAutoTArray<SkScalar> widths(count); 57cb93a386Sopenharmony_ci font.getWidths(atg.glyphs(), count, &widths[0]); 58cb93a386Sopenharmony_ci 59cb93a386Sopenharmony_ci SkRandom rand; 60cb93a386Sopenharmony_ci SkScalar x = SkIntToScalar(20); 61cb93a386Sopenharmony_ci SkScalar y = SkIntToScalar(100); 62cb93a386Sopenharmony_ci for (int i = 0; i < count; ++i) { 63cb93a386Sopenharmony_ci pos[i].set(x, y + rand.nextSScalar1() * 24); 64cb93a386Sopenharmony_ci x += widths[i]; 65cb93a386Sopenharmony_ci } 66cb93a386Sopenharmony_ci 67cb93a386Sopenharmony_ci canvas->translate(0, SkIntToScalar(64)); 68cb93a386Sopenharmony_ci 69cb93a386Sopenharmony_ci canvas->drawTextBlob(SkTextBlob::MakeFromPosText(text, len, &pos[0], font), 0, 0, paint); 70cb93a386Sopenharmony_ci ToolUtils::get_text_path(font, text, len, SkTextEncoding::kUTF8, &path, &pos[0]); 71cb93a386Sopenharmony_ci strokePath(canvas, path); 72cb93a386Sopenharmony_ci} 73