blob: 9a4bd38be66f0546b9b6f668f4d2fdccc72d4335 [file] [log] [blame]
edisonn@google.com2a827e82012-10-10 15:20:34 +00001/*
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
edisonn@google.com4fa566b2013-01-11 20:30:41 +000051void PdfRenderer::write(SkWStream* stream) const {
edisonn@google.com2a827e82012-10-10 15:20:34 +000052 SkPDFDocument doc;
53 doc.appendPage(fPDFDevice);
edisonn@google.com4fa566b2013-01-11 20:30:41 +000054 doc.emitPDF(stream);
edisonn@google.com2a827e82012-10-10 15:20:34 +000055}
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}