// Copyright 2020 Google LLC. // Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. #include "tools/fiddle/examples.h" REG_FIDDLE(count_verbs, 256, 256, false, 0) { #include "include/utils/SkTextUtils.h" static SkPath make_path(const SkFont& font) { SkPath path; const char text[] = "SKIA"; SkTextUtils::GetPath(text, strlen(text), SkTextEncoding::kUTF8, 0, 0, font, &path); return path; } static void count_verbs(const SkPath& path, int counts[6]) { SkPath::Iter it(path, false); for (int i = 0; i < 6; ++i) { counts[i] = 0; } while (true) { SkPoint pts[4]; SkPath::Verb verb = it.next(pts); if (verb == SkPath::kDone_Verb) { break; } if ((unsigned)verb < 6) { counts[(unsigned)verb]++; } } } void draw(SkCanvas* canvas) { SkFont font(SkTypeface::MakeFromName("DejaVu Sans Mono", SkFontStyle()), 30); SkPath path = make_path(font); int counts[6]; count_verbs(path, counts); // output results: const char* verbs[6] = {"Move", "Line", "Quad", "Conic", "Cubic", "Close"}; SkPoint pt = SkPoint::Make(10.0f, 5.0f + font.getSpacing()); SkPaint p; canvas->clear(SK_ColorWHITE); for (int i = 0; i < 6; ++i) { canvas->drawString(SkStringPrintf("%-5s %3d", verbs[i], counts[i]), pt.fX, pt.fY, font, p); pt.fY += font.getSpacing(); } } } // END FIDDLE