Index: gm/gmmain.cpp |
diff --git a/gm/gmmain.cpp b/gm/gmmain.cpp |
index defd691b52f83259468e80281e25ad625a813c8a..7e7b3a20140e5ae886b7e9a454112276b05bb817 100644 |
--- a/gm/gmmain.cpp |
+++ b/gm/gmmain.cpp |
@@ -23,6 +23,7 @@ |
#include "SkData.h" |
#include "SkDeferredCanvas.h" |
#include "SkDevice.h" |
+#include "SkDocument.h" |
#include "SkDrawFilter.h" |
#include "SkForceLinking.h" |
#include "SkGPipe.h" |
@@ -33,6 +34,7 @@ |
#include "SkPDFRasterizer.h" |
#include "SkPicture.h" |
#include "SkRefCnt.h" |
+#include "SkScalar.h" |
#include "SkStream.h" |
#include "SkTArray.h" |
#include "SkTDict.h" |
@@ -615,33 +617,20 @@ public: |
} |
} |
- static void generate_pdf(GM* gm, SkDynamicMemoryWStream& pdf) { |
+ static bool generate_pdf(GM* gm, SkDynamicMemoryWStream& pdf) { |
#ifdef SK_SUPPORT_PDF |
SkMatrix initialTransform = gm->getInitialTransform(); |
- 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); |
- SkAutoUnref aur(dev); |
+ SkISize pageISize = gm->getISize(); |
+ SkSize pageSize = SkSize::Make(SkIntToScalar(pageISize.width()), |
+ SkIntToScalar(pageISize.height())); |
+ SkAutoTUnref<SkDocument> pdfDoc(SkDocument::CreatePDF(&pdf, NULL, encode_to_dct_data)); |
reed1
2013/10/07 13:24:54
Can we move the SUPPORT_PDF check to inside Create
edisonn
2013/10/07 19:29:06
not really. Sk_SUPPORT_PDF is defined for dependen
|
+ SkCanvas* canvas = NULL; |
+ canvas = pdfDoc->beginPage(pageSize); |
+ canvas->setMatrix(initialTransform); |
reed1
2013/10/07 13:24:54
can this be concat instead of setMatrix? The latte
edisonn
2013/10/07 19:29:06
Done.
|
- SkCanvas c(dev); |
- invokeGM(gm, &c, true, false); |
+ invokeGM(gm, canvas, true, false); |
- SkPDFDocument doc; |
- doc.appendPage(dev); |
- doc.emitPDF(&pdf); |
+ return pdfDoc->close(); |
#endif |
} |
@@ -1034,43 +1023,46 @@ public: |
errors.add(write_bitmap(path, bitmapAndDigest.fBitmap)); |
} |
} else if (gRec.fBackend == kPDF_Backend) { |
- generate_pdf(gm, document); |
- |
- SkAutoTUnref<SkStreamAsset> documentStream(document.detachAsStream()); |
- if (writePath && (gRec.fFlags & kWrite_ConfigFlag)) { |
- path = make_filename(writePath, gm->shortName(), gRec.fName, "", "pdf"); |
- errors.add(write_document(path, documentStream)); |
- } |
- |
- if (!(gm->getFlags() & GM::kSkipPDFRasterization_Flag)) { |
- for (int i = 0; i < pdfRasterizers.count(); i++) { |
- SkBitmap pdfBitmap; |
- SkASSERT(documentStream->rewind()); |
- bool success = (*pdfRasterizers[i]->fRasterizerFunction)( |
- documentStream.get(), &pdfBitmap); |
- if (!success) { |
- gm_fprintf(stderr, "FAILED to render PDF for %s using renderer %s\n", |
- gm->shortName(), |
- pdfRasterizers[i]->fName); |
- continue; |
- } |
- |
- SkString configName(gRec.fName); |
- configName.append("-"); |
- configName.append(pdfRasterizers[i]->fName); |
- |
- BitmapAndDigest bitmapAndDigest(pdfBitmap); |
- errors.add(compare_test_results_to_stored_expectations( |
- gm, gRec, configName.c_str(), &bitmapAndDigest)); |
+ if (!generate_pdf(gm, document)) { |
+ errors.add(kRenderPdfFailed_ErrorType); |
+ } else { |
+ SkAutoTUnref<SkStreamAsset> documentStream(document.detachAsStream()); |
+ if (writePath && (gRec.fFlags & kWrite_ConfigFlag)) { |
+ path = make_filename(writePath, gm->shortName(), gRec.fName, "", "pdf"); |
+ errors.add(write_document(path, documentStream)); |
+ } |
- if (writePath && (gRec.fFlags & kWrite_ConfigFlag)) { |
- path = make_bitmap_filename(writePath, gm->shortName(), configName.c_str(), |
- "", bitmapAndDigest.fDigest); |
- errors.add(write_bitmap(path, bitmapAndDigest.fBitmap)); |
+ if (!(gm->getFlags() & GM::kSkipPDFRasterization_Flag)) { |
+ for (int i = 0; i < pdfRasterizers.count(); i++) { |
+ SkBitmap pdfBitmap; |
+ SkASSERT(documentStream->rewind()); |
+ bool success = (*pdfRasterizers[i]->fRasterizerFunction)( |
+ documentStream.get(), &pdfBitmap); |
+ if (!success) { |
+ gm_fprintf(stderr, "FAILED to render PDF for %s using renderer %s\n", |
+ gm->shortName(), |
+ pdfRasterizers[i]->fName); |
+ continue; |
+ } |
+ |
+ SkString configName(gRec.fName); |
+ configName.append("-"); |
+ configName.append(pdfRasterizers[i]->fName); |
+ |
+ BitmapAndDigest bitmapAndDigest(pdfBitmap); |
+ errors.add(compare_test_results_to_stored_expectations( |
+ gm, gRec, configName.c_str(), &bitmapAndDigest)); |
+ |
+ if (writePath && (gRec.fFlags & kWrite_ConfigFlag)) { |
+ path = make_bitmap_filename(writePath, gm->shortName(), |
+ configName.c_str(), |
+ "", bitmapAndDigest.fDigest); |
+ errors.add(write_bitmap(path, bitmapAndDigest.fBitmap)); |
+ } |
} |
+ } else { |
+ errors.add(kIntentionallySkipped_ErrorType); |
} |
- } else { |
- errors.add(kIntentionallySkipped_ErrorType); |
} |
} else if (gRec.fBackend == kXPS_Backend) { |
generate_xps(gm, document); |