blob: 704cbeae518c93e28c2707f827e8a7b9db2de076 [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()));
edisonn@google.comd9dfa182013-04-24 13:01:01 +000039 fPDFDevice->setDCTEncoder(fEncoder);
edisonn@google.com2a827e82012-10-10 15:20:34 +000040 return SkNEW_ARGS(SkCanvas, (fPDFDevice));
41}
42
43void PdfRenderer::end() {
44 fPicture = NULL;
45 fCanvas.reset(NULL);
46 if (fPDFDevice) {
47 SkDELETE(fPDFDevice);
48 fPDFDevice = NULL;
49 }
50}
51
edisonn@google.com4fa566b2013-01-11 20:30:41 +000052void PdfRenderer::write(SkWStream* stream) const {
edisonn@google.com2a827e82012-10-10 15:20:34 +000053 SkPDFDocument doc;
54 doc.appendPage(fPDFDevice);
edisonn@google.com4fa566b2013-01-11 20:30:41 +000055 doc.emitPDF(stream);
edisonn@google.com2a827e82012-10-10 15:20:34 +000056}
57
58void SimplePdfRenderer::render() {
59 SkASSERT(fCanvas.get() != NULL);
60 SkASSERT(fPicture != NULL);
61 if (NULL == fCanvas.get() || NULL == fPicture) {
62 return;
63 }
64
65 fCanvas->drawPicture(*fPicture);
66 fCanvas->flush();
67}
68
69}