| Index: tools/PdfRenderer.cpp
|
| diff --git a/tools/PdfRenderer.cpp b/tools/PdfRenderer.cpp
|
| index 704cbeae518c93e28c2707f827e8a7b9db2de076..3f83c726985177b6e85ed55e63f0446213f6b438 100644
|
| --- a/tools/PdfRenderer.cpp
|
| +++ b/tools/PdfRenderer.cpp
|
| @@ -7,13 +7,14 @@
|
|
|
| #include "PdfRenderer.h"
|
| #include "SkCanvas.h"
|
| +#include "SkCanvasSimplifier.h"
|
| #include "SkDevice.h"
|
| #include "SkPDFDevice.h"
|
| #include "SkPDFDocument.h"
|
|
|
| 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 +27,39 @@ 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));
|
| + fPdfDoc->setDCTEncoder(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!
|
| + fPdfDoc->close();
|
| + return true;
|
| }
|
|
|
| }
|
|
|