| /* |
| * Copyright 2012 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #include "path_utils.h" |
| #include "SkPath.h" |
| #include "SkStream.h" |
| |
| namespace sk_tools { |
| static int gCurPathID = 0; |
| |
| void dump_path_prefix(SkFILEWStream* pathStream) { |
| if (NULL == pathStream) { |
| return; |
| } |
| |
| pathStream->writeText("#include \"SkScalar.h\"\n"); |
| pathStream->writeText("#include \"SkPoint.h\"\n"); |
| pathStream->writeText("#include \"SkBitmap.h\"\n"); |
| pathStream->writeText("#include \"SkDevice.h\"\n"); |
| pathStream->writeText("#include \"SkString.h\"\n"); |
| pathStream->writeText("#include \"SkImageEncoder.h\"\n"); |
| } |
| |
| void dump_path(SkFILEWStream* pathStream, const SkPath& path) { |
| if (NULL == pathStream) { |
| return; |
| } |
| |
| static const int kMaxPts = 200; |
| static const int kMaxVerbs = 200; |
| |
| int numPts = path.countPoints(); |
| int numVerbs = path.countVerbs(); |
| |
| SkASSERT(numPts <= kMaxPts); |
| SkASSERT(numVerbs <= kMaxVerbs); |
| |
| SkPoint pts[kMaxPts]; |
| uint8_t verbs[kMaxVerbs]; |
| |
| path.getPoints(pts, kMaxPts); |
| path.getVerbs(verbs, kMaxVerbs); |
| |
| const char* gStrs[] = { |
| "kMove_Verb", |
| "kLine_Verb", |
| "kQuad_Verb", |
| "kCubic_Verb", |
| "kClose_Verb", |
| "kDone_Verb" |
| }; |
| |
| pathStream->writeText("static const int numPts"); |
| pathStream->writeDecAsText(gCurPathID); |
| pathStream->writeText(" = "); |
| pathStream->writeDecAsText(numPts); |
| pathStream->writeText(";\n"); |
| |
| pathStream->writeText("SkPoint pts"); |
| pathStream->writeDecAsText(gCurPathID); |
| pathStream->writeText("[] = {\n"); |
| |
| for (int i = 0; i < numPts; ++i) { |
| SkString temp; |
| |
| pathStream->writeText(" { "); |
| temp.appendScalar(pts[i].fX); |
| temp.append("f, "); |
| temp.appendScalar(pts[i].fY); |
| temp.append("f },\n"); |
| pathStream->writeText(temp.c_str()); |
| } |
| pathStream->writeText("};\n"); |
| |
| pathStream->writeText("static const int numVerbs"); |
| pathStream->writeDecAsText(gCurPathID); |
| pathStream->writeText(" = "); |
| pathStream->writeDecAsText(numVerbs); |
| pathStream->writeText(";\n"); |
| |
| pathStream->writeText("uint8_t verbs"); |
| pathStream->writeDecAsText(gCurPathID); |
| pathStream->writeText("[] = {\n"); |
| |
| for (int i = 0; i < numVerbs; ++i) { |
| pathStream->writeText("\tSkPath::"); |
| pathStream->writeText(gStrs[verbs[i]]); |
| pathStream->writeText(",\n"); |
| } |
| pathStream->writeText("};\n"); |
| |
| gCurPathID++; |
| } |
| |
| void dump_path_suffix(SkFILEWStream* pathStream) { |
| if (NULL == pathStream) { |
| return; |
| } |
| |
| pathStream->writeText("int numPaths = "); |
| pathStream->writeDecAsText(gCurPathID); |
| pathStream->writeText(";\n"); |
| |
| pathStream->writeText("int sizes[] = {\n"); |
| for (int i = 0; i < gCurPathID; ++i) { |
| pathStream->writeText("\t numPts"); |
| pathStream->writeDecAsText(i); |
| pathStream->writeText(", numVerbs"); |
| pathStream->writeDecAsText(i); |
| pathStream->writeText(",\n"); |
| } |
| pathStream->writeText("};\n"); |
| |
| pathStream->writeText("const SkPoint* points[] = {\n"); |
| for (int i = 0; i < gCurPathID; ++i) { |
| pathStream->writeText("\tpts"); |
| pathStream->writeDecAsText(i); |
| pathStream->writeText(",\n"); |
| } |
| pathStream->writeText("};\n"); |
| |
| pathStream->writeText("const uint8_t* verbs[] = {\n"); |
| for (int i = 0; i < gCurPathID; ++i) { |
| pathStream->writeText("\t(const uint8_t*)verbs"); |
| pathStream->writeDecAsText(i); |
| pathStream->writeText(",\n"); |
| } |
| pathStream->writeText("};\n"); |
| } |
| } |