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