Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Unified Diff: tools/create_test_font.cpp

Issue 348323003: use platform-independent font for gm (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: add include tools for skimage Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/fonts/SkTestScalerContext.cpp ('k') | tools/sk_tool_utils.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/create_test_font.cpp
diff --git a/tools/create_test_font.cpp b/tools/create_test_font.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b0f70efaee7403938135ecb57cfc4b2ef3730fc0
--- /dev/null
+++ b/tools/create_test_font.cpp
@@ -0,0 +1,169 @@
+/*
+ * Copyright 2014 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "SkPaint.h"
+#include "SkPath.h"
+#include "SkStream.h"
+#include "SkTArray.h"
+#include "SkTSort.h"
+#include "SkTypeface.h"
+#include <stdio.h>
+
+enum {
+ kEmSize = 4096
+};
+
+static void output_fixed(FILE* out, SkScalar num) {
+ SkASSERT(floor(num) == num);
+ int hex = (int) num * (65536 / kEmSize);
+ fprintf(out, "0x%08x", hex);
+}
+
+static void output_scalar(FILE* out, SkScalar num) {
+ num /= kEmSize;
+ if (num == (int) num) {
+ fprintf(out, "%d", (int) num);
+ } else {
+ SkString str;
+ str.printf("%1.6g", num);
+ int width = (int) str.size();
+ const char* cStr = str.c_str();
+ while (cStr[width - 1] == '0') {
+ --width;
+ }
+ str.resize(width);
+ fprintf(out, "%sf", str.c_str());
+ }
+}
+
+static void output_points(FILE* out, const SkPoint* pts, int count) {
+ for (int index = 0; index < count; ++index) {
+ SkASSERT(floor(pts[index].fX) == pts[index].fX);
+ output_scalar(out, pts[index].fX);
+ fprintf(out, ", ");
+ SkASSERT(floor(pts[index].fY) == pts[index].fY);
+ output_scalar(out, pts[index].fY);
+ if (index + 1 < count) {
+ fprintf(out, ", ");
+ }
+ }
+ fprintf(out, ");\n");
+}
+
+const char header[] =
+"/*\n"
+" * Copyright 2014 Google Inc.\n"
+" *\n"
+" * Use of this source code is governed by a BSD-style license that can be\n"
+" * found in the LICENSE file.\n"
+" */\n"
+"\n"
+"// this was auto-generated by TestFontCreator.cpp\n"
+"\n"
+"#include \"SkPaint.h\"\n"
+"#include \"SkPath.h\"\n"
+"#include \"SkTDArray.h\"\n"
+"\n"
+"namespace sk_tool_utils {\n"
+"\n"
+"SkPaint::FontMetrics create_font(SkTDArray<SkPath*>& pathArray,\n"
+" SkTDArray<SkFixed>& widthArray) {";
+
+int tool_main(int argc, char** argv);
+int tool_main(int argc, char** argv) {
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ paint.setTextAlign(SkPaint::kLeft_Align);
+ paint.setTextEncoding(SkPaint::kUTF16_TextEncoding);
+ paint.setTextSize(kEmSize);
+ SkString filename("resources/DroidSans.ttf");
+ SkAutoTUnref<SkFILEStream> stream(new SkFILEStream(filename.c_str()));
+ if (!stream->isValid()) {
+ SkDebugf("Could not find resources/Roboto-Regular.ttf.\n");
+ return 1;
+ }
+ SkTypeface* typeface = SkTypeface::CreateFromStream(stream);
+ SkSafeUnref(paint.setTypeface(typeface));
+ FILE* out = fopen("./out/sk_tool_utils_font.cpp", "w");
+ fprintf(out, "%s\n", header);
+ fprintf(out, " SkPath* path;\n");
+ for (unsigned short index = 0x20; index < 0x7F; ++index) {
+ SkPath path;
+ paint.getTextPath((const void*) &index, 2, 0, 0, &path);
+ SkPath::RawIter iter(path);
+ uint8_t verb;
+ SkPoint pts[4];
+ fprintf(out, " path = SkNEW(SkPath); //");
+ if (index == '\\') {
+ fprintf(out, " blackslash\n");
+ } else if (index == ' ') {
+ fprintf(out, " space\n");
+ } else {
+ fprintf(out, " %c\n", (char) index);
+ }
+ fprintf(out, " *pathArray.append() = path;\n");
+ while ((verb = iter.next(pts)) != SkPath::kDone_Verb) {
+ switch (verb) {
+ case SkPath::kMove_Verb:
+ fprintf(out, " path->moveTo(");
+ output_points(out, &pts[0], 1);
+ continue;
+ case SkPath::kLine_Verb:
+ fprintf(out, " path->lineTo(");
+ output_points(out, &pts[1], 1);
+ break;
+ case SkPath::kQuad_Verb:
+ fprintf(out, " path->quadTo(");
+ output_points(out, &pts[1], 2);
+ break;
+ case SkPath::kCubic_Verb:
+ fprintf(out, " path->cubicTo(");
+ output_points(out, &pts[1], 3);
+ break;
+ case SkPath::kClose_Verb:
+ fprintf(out, " path->close();\n");
+ break;
+ default:
+ SkDEBUGFAIL("bad verb");
+ return 1;
+ }
+ }
+ SkScalar width;
+ SkDEBUGCODE(int charCount =) paint.getTextWidths((const void*) &index, 2, &width);
+ SkASSERT(charCount == 1);
+ fprintf(out, " *widthArray.append() = ");
+ output_fixed(out, width);
+ fprintf(out, ";\n\n");
+ }
+ SkPaint::FontMetrics metrics;
+ paint.getFontMetrics(&metrics);
+ fprintf(out, " SkPaint::FontMetrics metrics = {\n");
+ fprintf(out, " 0x%08x, ", metrics.fFlags);
+ output_scalar(out, metrics.fTop); fprintf(out, ", ");
+ output_scalar(out, metrics.fAscent); fprintf(out, ", ");
+ output_scalar(out, metrics.fDescent); fprintf(out, ", ");
+ output_scalar(out, metrics.fBottom); fprintf(out, ", ");
+ output_scalar(out, metrics.fLeading); fprintf(out, ",\n ");
+ output_scalar(out, metrics.fAvgCharWidth); fprintf(out, ", ");
+ output_scalar(out, metrics.fMaxCharWidth); fprintf(out, ", ");
+ output_scalar(out, metrics.fXMin); fprintf(out, ", ");
+ output_scalar(out, metrics.fXMax); fprintf(out, ",\n ");
+ output_scalar(out, metrics.fXHeight); fprintf(out, ", ");
+ output_scalar(out, metrics.fCapHeight); fprintf(out, ", ");
+ output_scalar(out, metrics.fUnderlineThickness); fprintf(out, ", ");
+ output_scalar(out, metrics.fUnderlinePosition); fprintf(out, "\n };\n");
+ fprintf(out, " return metrics;\n");
+ fprintf(out, "}\n\n}\n");
+ fclose(out);
+ return 0;
+}
+
+#if !defined SK_BUILD_FOR_IOS
+int main(int argc, char * const argv[]) {
+ return tool_main(argc, (char**) argv);
+}
+#endif
« no previous file with comments | « src/fonts/SkTestScalerContext.cpp ('k') | tools/sk_tool_utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698