moz-skia/tools/path_utils.cpp

135 строки
4.0 KiB
C++

/*
* 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");
}
}