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