| Index: gm/gmmain.cpp
|
| diff --git a/gm/gmmain.cpp b/gm/gmmain.cpp
|
| index b8c8891471b60175820d30f34211ef092891bbb9..ece8ff32d4888f0d26cb2768df7c4ed5d7b118e6 100644
|
| --- a/gm/gmmain.cpp
|
| +++ b/gm/gmmain.cpp
|
| @@ -74,6 +74,13 @@ typedef int GrGLStandard;
|
|
|
| #define DEBUGFAIL_SEE_STDERR SkDEBUGFAIL("see stderr for message")
|
|
|
| +DECLARE_bool(useDocumentInsteadOfDevice);
|
| +
|
| +#ifdef SK_SUPPORT_PDF
|
| + #include "SkPDFDevice.h"
|
| + #include "SkPDFDocument.h"
|
| +#endif
|
| +
|
| // Until we resolve http://code.google.com/p/skia/issues/detail?id=455 ,
|
| // stop writing out XPS-format image baselines in gm.
|
| #undef SK_SUPPORT_XPS
|
| @@ -668,24 +675,53 @@ public:
|
|
|
| static bool generate_pdf(GM* gm, SkDynamicMemoryWStream& pdf) {
|
| #ifdef SK_SUPPORT_PDF
|
| - SkAutoTUnref<SkDocument> pdfDoc(
|
| - SkDocument::CreatePDF(&pdf, NULL, encode_to_dct_data,
|
| - SkIntToScalar(FLAGS_pdfRasterDpi)));
|
| - if (!pdfDoc) {
|
| - return false;
|
| - }
|
| -
|
| - SkCanvas* canvas = NULL;
|
| - canvas = pdfDoc->beginPage(gm->width(), gm->height());
|
| - canvas->concat(gm->getInitialTransform());
|
| + SkMatrix initialTransform = gm->getInitialTransform();
|
| + if (FLAGS_useDocumentInsteadOfDevice) {
|
| + SkISize pageISize = gm->getISize();
|
| + SkAutoTUnref<SkDocument> pdfDoc(
|
| + SkDocument::CreatePDF(&pdf, NULL,
|
| + encode_to_dct_data,
|
| + SkIntToScalar(FLAGS_pdfRasterDpi)));
|
| +
|
| + if (!pdfDoc.get()) {
|
| + return false;
|
| + }
|
|
|
| - invokeGM(gm, canvas, true, false);
|
| + SkCanvas* canvas = NULL;
|
| + canvas = pdfDoc->beginPage(SkIntToScalar(pageISize.width()),
|
| + SkIntToScalar(pageISize.height()));
|
| + canvas->concat(initialTransform);
|
|
|
| - return pdfDoc->close();
|
| + invokeGM(gm, canvas, true, false);
|
|
|
| -#else // SK_SUPPORT_PDF
|
| - return true; // Do not report failure if pdf is not supported.
|
| + return pdfDoc->close();
|
| + } else {
|
| + SkISize pageSize = gm->getISize();
|
| + SkPDFDevice* dev = NULL;
|
| + if (initialTransform.isIdentity()) {
|
| + dev = new SkPDFDevice(pageSize, pageSize, initialTransform);
|
| + } else {
|
| + SkRect content = SkRect::MakeWH(SkIntToScalar(pageSize.width()),
|
| + SkIntToScalar(pageSize.height()));
|
| + initialTransform.mapRect(&content);
|
| + content.intersect(0, 0, SkIntToScalar(pageSize.width()),
|
| + SkIntToScalar(pageSize.height()));
|
| + SkISize contentSize =
|
| + SkISize::Make(SkScalarRoundToInt(content.width()),
|
| + SkScalarRoundToInt(content.height()));
|
| + dev = new SkPDFDevice(pageSize, contentSize, initialTransform);
|
| + }
|
| + dev->setDCTEncoder(encode_to_dct_data);
|
| + dev->setRasterDpi(SkIntToScalar(FLAGS_pdfRasterDpi));
|
| + SkAutoUnref aur(dev);
|
| + SkCanvas c(dev);
|
| + invokeGM(gm, &c, true, false);
|
| + SkPDFDocument doc;
|
| + doc.appendPage(dev);
|
| + doc.emitPDF(&pdf);
|
| + }
|
| #endif // SK_SUPPORT_PDF
|
| + return true; // Do not report failure if pdf is not supported.
|
| }
|
|
|
| static void generate_xps(GM* gm, SkDynamicMemoryWStream& xps) {
|
| @@ -1542,6 +1578,7 @@ DEFINE_int32(pdfJpegQuality, -1, "Encodes images in JPEG at quality level N, "
|
| // Probably define spacial names like centerx, centery, top, bottom, left, right
|
| // then we can write something reabable like --rotate centerx centery 90
|
| DEFINE_bool(forcePerspectiveMatrix, false, "Force a perspective matrix.");
|
| +DEFINE_bool(useDocumentInsteadOfDevice, false, "Use SkDocument::CreateFoo instead of SkFooDevice.");
|
| DEFINE_int32(pdfRasterDpi, 72, "Scale at which at which the non suported "
|
| "features in PDF are rasterized. Must be be in range 0-10000. "
|
| "Default is 72. N = 0 will disable rasterizing features like "
|
|
|