1cb93a386Sopenharmony_ci// Copyright 2020 Google LLC. 2cb93a386Sopenharmony_ci// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. 3cb93a386Sopenharmony_ci#include "tools/fiddle/examples.h" 4cb93a386Sopenharmony_ciREG_FIDDLE(count_verbs, 256, 256, false, 0) { 5cb93a386Sopenharmony_ci#include "include/utils/SkTextUtils.h" 6cb93a386Sopenharmony_ci 7cb93a386Sopenharmony_cistatic SkPath make_path(const SkFont& font) { 8cb93a386Sopenharmony_ci SkPath path; 9cb93a386Sopenharmony_ci const char text[] = "SKIA"; 10cb93a386Sopenharmony_ci SkTextUtils::GetPath(text, strlen(text), SkTextEncoding::kUTF8, 0, 0, font, &path); 11cb93a386Sopenharmony_ci return path; 12cb93a386Sopenharmony_ci} 13cb93a386Sopenharmony_ci 14cb93a386Sopenharmony_cistatic void count_verbs(const SkPath& path, int counts[6]) { 15cb93a386Sopenharmony_ci SkPath::Iter it(path, false); 16cb93a386Sopenharmony_ci for (int i = 0; i < 6; ++i) { 17cb93a386Sopenharmony_ci counts[i] = 0; 18cb93a386Sopenharmony_ci } 19cb93a386Sopenharmony_ci while (true) { 20cb93a386Sopenharmony_ci SkPoint pts[4]; 21cb93a386Sopenharmony_ci SkPath::Verb verb = it.next(pts); 22cb93a386Sopenharmony_ci if (verb == SkPath::kDone_Verb) { 23cb93a386Sopenharmony_ci break; 24cb93a386Sopenharmony_ci } 25cb93a386Sopenharmony_ci if ((unsigned)verb < 6) { 26cb93a386Sopenharmony_ci counts[(unsigned)verb]++; 27cb93a386Sopenharmony_ci } 28cb93a386Sopenharmony_ci } 29cb93a386Sopenharmony_ci} 30cb93a386Sopenharmony_ci 31cb93a386Sopenharmony_civoid draw(SkCanvas* canvas) { 32cb93a386Sopenharmony_ci SkFont font(SkTypeface::MakeFromName("DejaVu Sans Mono", SkFontStyle()), 30); 33cb93a386Sopenharmony_ci SkPath path = make_path(font); 34cb93a386Sopenharmony_ci int counts[6]; 35cb93a386Sopenharmony_ci count_verbs(path, counts); 36cb93a386Sopenharmony_ci 37cb93a386Sopenharmony_ci // output results: 38cb93a386Sopenharmony_ci const char* verbs[6] = {"Move", "Line", "Quad", "Conic", "Cubic", "Close"}; 39cb93a386Sopenharmony_ci SkPoint pt = SkPoint::Make(10.0f, 5.0f + font.getSpacing()); 40cb93a386Sopenharmony_ci SkPaint p; 41cb93a386Sopenharmony_ci canvas->clear(SK_ColorWHITE); 42cb93a386Sopenharmony_ci for (int i = 0; i < 6; ++i) { 43cb93a386Sopenharmony_ci canvas->drawString(SkStringPrintf("%-5s %3d", verbs[i], counts[i]), pt.fX, pt.fY, font, 44cb93a386Sopenharmony_ci p); 45cb93a386Sopenharmony_ci pt.fY += font.getSpacing(); 46cb93a386Sopenharmony_ci } 47cb93a386Sopenharmony_ci} 48cb93a386Sopenharmony_ci} // END FIDDLE 49