| // 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 |