180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/*
380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copyright 2010 The Android Open Source Project
480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru *
580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Use of this source code is governed by a BSD-style license that can be
680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * found in the LICENSE file.
780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */
880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
1080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifndef SkPDFFormXObject_DEFINED
1180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#define SkPDFFormXObject_DEFINED
1280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkPDFStream.h"
1480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkPDFTypes.h"
1558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#include "SkRect.h"
1680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkRefCnt.h"
1758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#include "SkPDFResourceDict.h"
1880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkString.h"
1980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
2080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SkMatrix;
2180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SkPDFDevice;
2280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SkPDFCatalog;
2380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
2480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/** \class SkPDFFormXObject
2580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    A form XObject; a self contained description of graphics objects.  A form
2780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    XObject is basically a page object with slightly different syntax, that
2880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    can be drawn onto a page.
2980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru*/
3080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
3180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru// The caller could keep track of the form XObjects it creates and
3280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru// canonicalize them, but the Skia API doesn't provide enough context to
3380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru// automatically do it (trivially).
3480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SkPDFFormXObject : public SkPDFStream {
3580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    /** Create a PDF form XObject. Entries for the dictionary entries are
3780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru     *  automatically added.
3880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru     *  @param device      The set of graphical elements on this form.
3980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru     */
4080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    explicit SkPDFFormXObject(SkPDFDevice* device);
4158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    /**
4258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger     * Create a PDF form XObject from a raw content stream and associated
4358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger     * resources.
4458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger     */
4558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    explicit SkPDFFormXObject(SkStream* content,
4658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger                              SkRect bbox,
4758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger                              SkPDFResourceDict* resourceDict);
4880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual ~SkPDFFormXObject();
4980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
5080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    // The SkPDFObject interface.
517839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    virtual void getResources(const SkTSet<SkPDFObject*>& knownResourceObjects,
527839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger                              SkTSet<SkPDFObject*>* newResourceObjects);
5380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
5480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
5558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    void init(const char* colorSpace,
5658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger              SkPDFDict* resourceDict, SkPDFArray* bbox);
5758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
587839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    SkTSet<SkPDFObject*> fResources;
5980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
6080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
6180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif
62