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#ifndef PdfRenderer_DEFINED
9#define PdfRenderer_DEFINED
10
11//
12// PdfRender takes a SkPicture and writes it to a PDF file.
13// An SkPicture can be built manually, or read from an SKP file.
14//
15
16#include "SkDocument.h"
17#include "SkMath.h"
18#include "SkPicture.h"
19#include "SkTypes.h"
20#include "SkTDArray.h"
21#include "SkRefCnt.h"
22#include "SkString.h"
23
24class SkBitmap;
25class SkCanvas;
26class SkWStream;
27
28namespace sk_tools {
29
30class PdfRenderer : public SkRefCnt {
31public:
32    virtual void init(SkPicture* pict, SkWStream* stream);
33    virtual void setup() {}
34    virtual bool render() = 0;
35    virtual void end();
36
37    PdfRenderer(SkPicture::EncodeBitmap encoder)
38        : fPicture(NULL)
39        , fEncoder(encoder)
40        , fPdfDoc(NULL)
41        {}
42
43protected:
44    SkCanvas* setupCanvas(SkWStream* stream, int width, int height);
45
46    SkAutoTUnref<SkCanvas> fCanvas;
47    SkPicture* fPicture;
48    SkPicture::EncodeBitmap fEncoder;
49    SkAutoTUnref<SkDocument> fPdfDoc;
50
51private:
52    typedef SkRefCnt INHERITED;
53};
54
55class SimplePdfRenderer : public PdfRenderer {
56public:
57    SimplePdfRenderer(SkPicture::EncodeBitmap encoder)
58        : PdfRenderer(encoder) {}
59    virtual bool render() SK_OVERRIDE;
60
61private:
62    typedef PdfRenderer INHERITED;
63};
64
65}
66
67#endif  // PdfRenderer_DEFINED
68