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 } 135