Index: tools/PdfRenderer.cpp |
diff --git a/tools/PdfRenderer.cpp b/tools/PdfRenderer.cpp |
index 704cbeae518c93e28c2707f827e8a7b9db2de076..e05e6b12d433c639eea97d83015a70087339cfec 100644 |
--- a/tools/PdfRenderer.cpp |
+++ b/tools/PdfRenderer.cpp |
@@ -13,7 +13,7 @@ |
namespace sk_tools { |
-void PdfRenderer::init(SkPicture* pict) { |
+void PdfRenderer::init(SkPicture* pict, SkWStream* stream) { |
SkASSERT(NULL == fPicture); |
SkASSERT(NULL == fCanvas.get()); |
if (fPicture != NULL || NULL != fCanvas.get()) { |
@@ -26,44 +26,38 @@ void PdfRenderer::init(SkPicture* pict) { |
} |
fPicture = pict; |
- fCanvas.reset(this->setupCanvas()); |
+ fCanvas.reset(this->setupCanvas(stream, pict->width(), pict->height())); |
} |
-SkCanvas* PdfRenderer::setupCanvas() { |
- return this->setupCanvas(fPicture->width(), fPicture->height()); |
-} |
+SkCanvas* PdfRenderer::setupCanvas(SkWStream* stream, int width, int height) { |
+ fPdfDoc.reset(SkDocument::CreatePDF(stream, NULL, fEncoder)); |
+ |
+ SkSize pageSize = SkSize::Make(SkIntToScalar(width), SkIntToScalar(height)); |
+ SkCanvas* canvas = fPdfDoc->beginPage(pageSize); |
+ canvas->ref(); |
-SkCanvas* PdfRenderer::setupCanvas(int width, int height) { |
- SkISize pageSize = SkISize::Make(width, height); |
- fPDFDevice = SkNEW_ARGS(SkPDFDevice, (pageSize, pageSize, SkMatrix::I())); |
- fPDFDevice->setDCTEncoder(fEncoder); |
- return SkNEW_ARGS(SkCanvas, (fPDFDevice)); |
+ return canvas; |
} |
void PdfRenderer::end() { |
fPicture = NULL; |
fCanvas.reset(NULL); |
- if (fPDFDevice) { |
- SkDELETE(fPDFDevice); |
- fPDFDevice = NULL; |
- } |
+ fPdfDoc.reset(NULL); |
} |
-void PdfRenderer::write(SkWStream* stream) const { |
- SkPDFDocument doc; |
- doc.appendPage(fPDFDevice); |
- doc.emitPDF(stream); |
-} |
- |
-void SimplePdfRenderer::render() { |
+bool SimplePdfRenderer::render() { |
SkASSERT(fCanvas.get() != NULL); |
SkASSERT(fPicture != NULL); |
if (NULL == fCanvas.get() || NULL == fPicture) { |
- return; |
+ return false; |
} |
fCanvas->drawPicture(*fPicture); |
fCanvas->flush(); |
+ |
+ // TODO(edisonn): SkDocument should report failure somehow! |
vandebo (ex-Chrome)
2013/09/27 15:50:17
Didn't you change close to return a bool, or does
edisonn
2013/10/04 19:40:37
Done.
|
+ fPdfDoc->close(); |
+ return true; |
} |
} |