diff options
author | 2013-10-14 13:42:12 +0000 | |
---|---|---|
committer | 2013-10-14 13:42:12 +0000 | |
commit | 5e00989a283111cef05bed8102e45c16651e43e4 (patch) | |
tree | f392a48807724566537fd8d128f00ce175f1417c /tools/PdfRenderer.cpp | |
parent | 1108fc3058e64a9363f7ea4ef41e2b04ca51f539 (diff) |
Add SkPDFDeviceFlatenner which extends SkPDFDevice to add support to flatten the path and the text when we have perspective.
prepare to deprecate SkPDFDevice constructor, and route gm and render_pdfs to use SkDocument::Create pdf interface instead. - controlled by a flag
add comments where we are supposed to flatten other features (paint, shaders, ... )
R=reed@google.com, bungeman@google.com, scroggo@google.com, vandebo@chromium.org, bsalomon@google.com
Author: edisonn@google.com
Review URL: https://codereview.chromium.org/24811002
git-svn-id: http://skia.googlecode.com/svn/trunk@11751 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'tools/PdfRenderer.cpp')
-rw-r--r-- | tools/PdfRenderer.cpp | 35 |
1 files changed, 13 insertions, 22 deletions
diff --git a/tools/PdfRenderer.cpp b/tools/PdfRenderer.cpp index 704cbeae51..890abde320 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,35 @@ 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)); + + SkCanvas* canvas = fPdfDoc->beginPage(SkIntToScalar(width), SkIntToScalar(height)); + 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(); + + return fPdfDoc->close(); } } |