зеркало из https://github.com/mozilla/moz-skia.git
135 строки
4.0 KiB
C++
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");
|
|
}
|
|
}
|