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

Unified Diff: tools/skhello.cpp

Issue 16660002: SkDocument base for pdf, xps, etc. (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: add Done proc, so caller can delete the stream automatically when the doc is done with it Created 7 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
« src/doc/SkDocument.cpp ('K') | « src/doc/SkDocument_PDF.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/skhello.cpp
diff --git a/tools/skhello.cpp b/tools/skhello.cpp
index 668c3a993d901cf1899cb0adfabc1d8e8dd21c8f..036b08a00ef9702cb33d676255f8b1d5b6408b7f 100644
--- a/tools/skhello.cpp
+++ b/tools/skhello.cpp
@@ -8,22 +8,62 @@
#include "SkCanvas.h"
#include "SkCommandLineFlags.h"
#include "SkData.h"
+#include "SkDocument.h"
#include "SkGraphics.h"
#include "SkSurface.h"
#include "SkImage.h"
#include "SkStream.h"
#include "SkString.h"
-DEFINE_string2(outFile, o, "skhello.png", "The filename to write the image.");
+DEFINE_string2(outFile, o, "skhello", "The filename to write the image.");
DEFINE_string2(text, t, "Hello", "The string to write.");
+static void doDraw(SkCanvas* canvas, const SkPaint& paint, const char text[]) {
+ SkRect bounds;
+ canvas->getClipBounds(&bounds);
+
+ canvas->drawColor(SK_ColorWHITE);
+ canvas->drawText(text, strlen(text),
+ bounds.centerX(), bounds.centerY(),
+ paint);
+}
+
+static bool do_surface(int w, int h, const char path[], const char text[],
+ const SkPaint& paint) {
+ SkImage::Info info = {
+ w, h, SkImage::kPMColor_ColorType, SkImage::kPremul_AlphaType
+ };
+ SkAutoTUnref<SkSurface> surface(SkSurface::NewRaster(info));
+ doDraw(surface->getCanvas(), paint, text);
+
+ SkAutoTUnref<SkImage> image(surface->newImageSnapshot());
+ SkAutoDataUnref data(image->encode());
+ if (NULL == data.get()) {
+ return false;
+ }
+ SkFILEWStream stream(path);
+ return stream.write(data->data(), data->size());
+}
+
+static bool do_document(int w, int h, const char path[], const char text[],
+ const SkPaint& paint) {
+ SkAutoTUnref<SkDocument> doc(SkDocument::CreatePDF(path));
+ if (doc.get()) {
+ SkScalar width = SkIntToScalar(w);
+ SkScalar height = SkIntToScalar(h);
+ doDraw(doc->beginPage(width, height, NULL), paint, text);
+ return true;
+ }
+ return false;
+}
+
int tool_main(int argc, char** argv);
int tool_main(int argc, char** argv) {
SkCommandLineFlags::SetUsage("");
SkCommandLineFlags::Parse(argc, argv);
SkAutoGraphics ag;
- SkString path("skhello.png");
+ SkString path("skhello");
SkString text("Hello");
if (!FLAGS_outFile.isEmpty()) {
@@ -44,24 +84,23 @@ int tool_main(int argc, char** argv) {
int w = SkScalarRound(width) + 30;
int h = SkScalarRound(spacing) + 30;
- SkImage::Info info = {
- w, h, SkImage::kPMColor_ColorType, SkImage::kPremul_AlphaType
+ static const struct {
+ bool (*fProc)(int w, int h, const char path[], const char text[],
+ const SkPaint&);
+ const char* fSuffix;
+ } gRec[] = {
+ { do_surface, ".png" },
+ { do_document, ".pdf" },
};
- SkAutoTUnref<SkSurface> surface(SkSurface::NewRaster(info));
- SkCanvas* canvas = surface->getCanvas();
-
- canvas->drawColor(SK_ColorWHITE);
- canvas->drawText(text.c_str(), text.size(),
- SkIntToScalar(w)/2, SkIntToScalar(h)*2/3,
- paint);
-
- SkAutoTUnref<SkImage> image(surface->newImageSnapshot());
- SkAutoDataUnref data(image->encode());
- if (NULL == data.get()) {
- return -1;
+
+ for (size_t i = 0; i < SK_ARRAY_COUNT(gRec); ++i) {
+ SkString file;
+ file.printf("%s%s", path.c_str(), gRec[i].fSuffix);
+ if (!gRec[i].fProc(w, h, file.c_str(), text.c_str(), paint)) {
+ return -1;
+ }
}
- SkFILEWStream stream(path.c_str());
- return stream.write(data->data(), data->size());
+ return 0;
}
#if !defined SK_BUILD_FOR_IOS
« src/doc/SkDocument.cpp ('K') | « src/doc/SkDocument_PDF.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698