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