12a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com/*
22a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com * Copyright 2012 Google Inc.
32a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com *
42a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com * Use of this source code is governed by a BSD-style license that can be
52a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com * found in the LICENSE file.
62a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com */
72a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com
82a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com#include "PdfRenderer.h"
92a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com#include "SkCanvas.h"
102a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com#include "SkDevice.h"
112a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com#include "SkPDFDevice.h"
122a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com#include "SkPDFDocument.h"
132a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com
142a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.comnamespace sk_tools {
152a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com
165e00989a283111cef05bed8102e45c16651e43e4commit-bot@chromium.orgvoid PdfRenderer::init(SkPicture* pict, SkWStream* stream) {
172a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com    SkASSERT(NULL == fPicture);
182a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com    SkASSERT(NULL == fCanvas.get());
192a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com    if (fPicture != NULL || NULL != fCanvas.get()) {
202a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com        return;
212a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com    }
222a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com
232a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com    SkASSERT(pict != NULL);
242a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com    if (NULL == pict) {
252a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com        return;
262a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com    }
272a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com
282a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com    fPicture = pict;
295e00989a283111cef05bed8102e45c16651e43e4commit-bot@chromium.org    fCanvas.reset(this->setupCanvas(stream, pict->width(), pict->height()));
302a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com}
312a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com
325e00989a283111cef05bed8102e45c16651e43e4commit-bot@chromium.orgSkCanvas* PdfRenderer::setupCanvas(SkWStream* stream, int width, int height) {
335e00989a283111cef05bed8102e45c16651e43e4commit-bot@chromium.org    fPdfDoc.reset(SkDocument::CreatePDF(stream, NULL, fEncoder));
345e00989a283111cef05bed8102e45c16651e43e4commit-bot@chromium.org
355e00989a283111cef05bed8102e45c16651e43e4commit-bot@chromium.org    SkCanvas* canvas = fPdfDoc->beginPage(SkIntToScalar(width), SkIntToScalar(height));
365e00989a283111cef05bed8102e45c16651e43e4commit-bot@chromium.org    canvas->ref();
372a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com
385e00989a283111cef05bed8102e45c16651e43e4commit-bot@chromium.org    return canvas;
392a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com}
402a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com
412a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.comvoid PdfRenderer::end() {
422a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com    fPicture = NULL;
432a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com    fCanvas.reset(NULL);
445e00989a283111cef05bed8102e45c16651e43e4commit-bot@chromium.org    fPdfDoc.reset(NULL);
452a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com}
462a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com
475e00989a283111cef05bed8102e45c16651e43e4commit-bot@chromium.orgbool SimplePdfRenderer::render() {
482a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com    SkASSERT(fCanvas.get() != NULL);
492a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com    SkASSERT(fPicture != NULL);
502a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com    if (NULL == fCanvas.get() || NULL == fPicture) {
515e00989a283111cef05bed8102e45c16651e43e4commit-bot@chromium.org        return false;
522a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com    }
532a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com
549b14f26d0f3a974f3dd626c8354e1db1cfcd322frobertphillips    fCanvas->drawPicture(fPicture);
552a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com    fCanvas->flush();
565e00989a283111cef05bed8102e45c16651e43e4commit-bot@chromium.org
575e00989a283111cef05bed8102e45c16651e43e4commit-bot@chromium.org    return fPdfDoc->close();
582a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com}
592a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com
602a827e81b3334f33b0f8ff05b6a39a11d532568fedisonn@google.com}
61