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