Home | History | Annotate | Download | only in tools
      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 
     14 namespace sk_tools {
     15 
     16 void 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 
     32 SkCanvas* PdfRenderer::setupCanvas() {
     33     return this->setupCanvas(fPicture->width(), fPicture->height());
     34 }
     35 
     36 SkCanvas* 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 
     42 void PdfRenderer::end() {
     43     fPicture = NULL;
     44     fCanvas.reset(NULL);
     45     if (fPDFDevice) {
     46         SkDELETE(fPDFDevice);
     47         fPDFDevice = NULL;
     48     }
     49 }
     50 
     51 void PdfRenderer::write(SkWStream* stream) const {
     52     SkPDFDocument doc;
     53     doc.appendPage(fPDFDevice);
     54     doc.emitPDF(stream);
     55 }
     56 
     57 void 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