SkDocument base for pdf, xps, etc.
R=scroggo@google.com
Review URL: https://codereview.chromium.org/16660002
git-svn-id: http://skia.googlecode.com/svn/trunk@9476 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/tools/skhello.cpp b/tools/skhello.cpp
index 668c3a9..036b08a 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 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