PdfRenderer.cpp revision 4fa566b34ac19d1b8bbddd75d284c9db6eefab5b
1/* 2 * Copyright 2012 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8#include "PdfRenderer.h" 9#include "SkCanvas.h" 10#include "SkDevice.h" 11#include "SkPDFDevice.h" 12#include "SkPDFDocument.h" 13 14namespace sk_tools { 15 16void PdfRenderer::init(SkPicture* pict) { 17 SkASSERT(NULL == fPicture); 18 SkASSERT(NULL == fCanvas.get()); 19 if (fPicture != NULL || NULL != fCanvas.get()) { 20 return; 21 } 22 23 SkASSERT(pict != NULL); 24 if (NULL == pict) { 25 return; 26 } 27 28 fPicture = pict; 29 fCanvas.reset(this->setupCanvas()); 30} 31 32SkCanvas* PdfRenderer::setupCanvas() { 33 return this->setupCanvas(fPicture->width(), fPicture->height()); 34} 35 36SkCanvas* PdfRenderer::setupCanvas(int width, int height) { 37 SkISize pageSize = SkISize::Make(width, height); 38 fPDFDevice = SkNEW_ARGS(SkPDFDevice, (pageSize, pageSize, SkMatrix::I())); 39 return SkNEW_ARGS(SkCanvas, (fPDFDevice)); 40} 41 42void PdfRenderer::end() { 43 fPicture = NULL; 44 fCanvas.reset(NULL); 45 if (fPDFDevice) { 46 SkDELETE(fPDFDevice); 47 fPDFDevice = NULL; 48 } 49} 50 51void PdfRenderer::write(SkWStream* stream) const { 52 SkPDFDocument doc; 53 doc.appendPage(fPDFDevice); 54 doc.emitPDF(stream); 55} 56 57void SimplePdfRenderer::render() { 58 SkASSERT(fCanvas.get() != NULL); 59 SkASSERT(fPicture != NULL); 60 if (NULL == fCanvas.get() || NULL == fPicture) { 61 return; 62 } 63 64 fCanvas->drawPicture(*fPicture); 65 fCanvas->flush(); 66} 67 68} 69