| OLD | NEW |
| (Empty) |
| 1 /* | |
| 2 * Copyright 2012 Google Inc. | |
| 3 * | |
| 4 * Use of this source code is governed by a BSD-style license that can be | |
| 5 * found in the LICENSE file. | |
| 6 */ | |
| 7 | |
| 8 #include "path_utils.h" | |
| 9 #include "SkPath.h" | |
| 10 #include "SkStream.h" | |
| 11 | |
| 12 namespace sk_tools { | |
| 13 static int gCurPathID = 0; | |
| 14 | |
| 15 void dump_path_prefix(SkFILEWStream* pathStream) { | |
| 16 if (NULL == pathStream) { | |
| 17 return; | |
| 18 } | |
| 19 | |
| 20 pathStream->writeText("#include \"SkScalar.h\"\n"); | |
| 21 pathStream->writeText("#include \"SkPoint.h\"\n"); | |
| 22 pathStream->writeText("#include \"SkBitmap.h\"\n"); | |
| 23 pathStream->writeText("#include \"SkDevice.h\"\n"); | |
| 24 pathStream->writeText("#include \"SkString.h\"\n"); | |
| 25 pathStream->writeText("#include \"SkImageEncoder.h\"\n"); | |
| 26 } | |
| 27 | |
| 28 void dump_path(SkFILEWStream* pathStream, const SkPath& path) { | |
| 29 if (NULL == pathStream) { | |
| 30 return; | |
| 31 } | |
| 32 | |
| 33 static const int kMaxPts = 200; | |
| 34 static const int kMaxVerbs = 200; | |
| 35 | |
| 36 int numPts = path.countPoints(); | |
| 37 int numVerbs = path.countVerbs(); | |
| 38 | |
| 39 SkASSERT(numPts <= kMaxPts); | |
| 40 SkASSERT(numVerbs <= kMaxVerbs); | |
| 41 | |
| 42 SkPoint pts[kMaxPts]; | |
| 43 uint8_t verbs[kMaxVerbs]; | |
| 44 | |
| 45 path.getPoints(pts, kMaxPts); | |
| 46 path.getVerbs(verbs, kMaxVerbs); | |
| 47 | |
| 48 const char* gStrs[] = { | |
| 49 "kMove_Verb", | |
| 50 "kLine_Verb", | |
| 51 "kQuad_Verb", | |
| 52 "kCubic_Verb", | |
| 53 "kClose_Verb", | |
| 54 "kDone_Verb" | |
| 55 }; | |
| 56 | |
| 57 pathStream->writeText("static const int numPts"); | |
| 58 pathStream->writeDecAsText(gCurPathID); | |
| 59 pathStream->writeText(" = "); | |
| 60 pathStream->writeDecAsText(numPts); | |
| 61 pathStream->writeText(";\n"); | |
| 62 | |
| 63 pathStream->writeText("SkPoint pts"); | |
| 64 pathStream->writeDecAsText(gCurPathID); | |
| 65 pathStream->writeText("[] = {\n"); | |
| 66 | |
| 67 for (int i = 0; i < numPts; ++i) { | |
| 68 SkString temp; | |
| 69 | |
| 70 pathStream->writeText(" { "); | |
| 71 temp.appendScalar(pts[i].fX); | |
| 72 temp.append("f, "); | |
| 73 temp.appendScalar(pts[i].fY); | |
| 74 temp.append("f },\n"); | |
| 75 pathStream->writeText(temp.c_str()); | |
| 76 } | |
| 77 pathStream->writeText("};\n"); | |
| 78 | |
| 79 pathStream->writeText("static const int numVerbs"); | |
| 80 pathStream->writeDecAsText(gCurPathID); | |
| 81 pathStream->writeText(" = "); | |
| 82 pathStream->writeDecAsText(numVerbs); | |
| 83 pathStream->writeText(";\n"); | |
| 84 | |
| 85 pathStream->writeText("uint8_t verbs"); | |
| 86 pathStream->writeDecAsText(gCurPathID); | |
| 87 pathStream->writeText("[] = {\n"); | |
| 88 | |
| 89 for (int i = 0; i < numVerbs; ++i) { | |
| 90 pathStream->writeText("\tSkPath::"); | |
| 91 pathStream->writeText(gStrs[verbs[i]]); | |
| 92 pathStream->writeText(",\n"); | |
| 93 } | |
| 94 pathStream->writeText("};\n"); | |
| 95 | |
| 96 gCurPathID++; | |
| 97 } | |
| 98 | |
| 99 void dump_path_suffix(SkFILEWStream* pathStream) { | |
| 100 if (NULL == pathStream) { | |
| 101 return; | |
| 102 } | |
| 103 | |
| 104 pathStream->writeText("int numPaths = "); | |
| 105 pathStream->writeDecAsText(gCurPathID); | |
| 106 pathStream->writeText(";\n"); | |
| 107 | |
| 108 pathStream->writeText("int sizes[] = {\n"); | |
| 109 for (int i = 0; i < gCurPathID; ++i) { | |
| 110 pathStream->writeText("\t numPts"); | |
| 111 pathStream->writeDecAsText(i); | |
| 112 pathStream->writeText(", numVerbs"); | |
| 113 pathStream->writeDecAsText(i); | |
| 114 pathStream->writeText(",\n"); | |
| 115 } | |
| 116 pathStream->writeText("};\n"); | |
| 117 | |
| 118 pathStream->writeText("const SkPoint* points[] = {\n"); | |
| 119 for (int i = 0; i < gCurPathID; ++i) { | |
| 120 pathStream->writeText("\tpts"); | |
| 121 pathStream->writeDecAsText(i); | |
| 122 pathStream->writeText(",\n"); | |
| 123 } | |
| 124 pathStream->writeText("};\n"); | |
| 125 | |
| 126 pathStream->writeText("const uint8_t* verbs[] = {\n"); | |
| 127 for (int i = 0; i < gCurPathID; ++i) { | |
| 128 pathStream->writeText("\t(const uint8_t*)verbs"); | |
| 129 pathStream->writeDecAsText(i); | |
| 130 pathStream->writeText(",\n"); | |
| 131 } | |
| 132 pathStream->writeText("};\n"); | |
| 133 } | |
| 134 } | |
| OLD | NEW |