| /* | 
 |  * Copyright 2012 Google Inc. | 
 |  * | 
 |  * Use of this source code is governed by a BSD-style license that can be | 
 |  * found in the LICENSE file. | 
 |  */ | 
 |  | 
 | #include "PdfRenderer.h" | 
 | #include "SkCanvas.h" | 
 | #include "SkDevice.h" | 
 | #include "SkPDFDevice.h" | 
 | #include "SkPDFDocument.h" | 
 |  | 
 | namespace sk_tools { | 
 |  | 
 | void PdfRenderer::init(SkPicture* pict, SkWStream* stream) { | 
 |     SkASSERT(NULL == fPicture); | 
 |     SkASSERT(NULL == fCanvas.get()); | 
 |     if (fPicture != NULL || NULL != fCanvas.get()) { | 
 |         return; | 
 |     } | 
 |  | 
 |     SkASSERT(pict != NULL); | 
 |     if (NULL == pict) { | 
 |         return; | 
 |     } | 
 |  | 
 |     fPicture = pict; | 
 |     fCanvas.reset(this->setupCanvas(stream, pict->width(), pict->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(); | 
 |  | 
 |     return canvas; | 
 | } | 
 |  | 
 | void PdfRenderer::end() { | 
 |     fPicture = NULL; | 
 |     fCanvas.reset(NULL); | 
 |     fPdfDoc.reset(NULL); | 
 | } | 
 |  | 
 | bool SimplePdfRenderer::render() { | 
 |     SkASSERT(fCanvas.get() != NULL); | 
 |     SkASSERT(fPicture != NULL); | 
 |     if (NULL == fCanvas.get() || NULL == fPicture) { | 
 |         return false; | 
 |     } | 
 |  | 
 |     fCanvas->drawPicture(*fPicture); | 
 |     fCanvas->flush(); | 
 |  | 
 |     return fPdfDoc->close(); | 
 | } | 
 |  | 
 | } |