diff -r 000000000000 -r 6474c204b198 gfx/skia/trunk/src/pdf/SkPDFResourceDict.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gfx/skia/trunk/src/pdf/SkPDFResourceDict.h Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,101 @@ +/* + * Copyright 2013 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef SkPDFResourceDict_DEFINED +#define SkPDFResourceDict_DEFINED + +#include "SkPDFTypes.h" +#include "SkTDArray.h" +#include "SkTSet.h" +#include "SkTypes.h" + +/** \class SkPDFResourceDict + + A resource dictionary, which maintains the relevant sub-dicts and + allows generation of a list of referenced SkPDFObjects inserted with + insertResourceAsRef. +*/ +class SkPDFResourceDict : public SkPDFDict { +public: + SK_DECLARE_INST_COUNT(SkPDFResourceDict) + + enum SkPDFResourceType{ + kExtGState_ResourceType, + kPattern_ResourceType, + kXObject_ResourceType, + kFont_ResourceType, + // These additional types are defined by the spec, but not + // currently used by Skia: ColorSpace, Shading, Properties + kResourceTypeCount + }; + + /** Create a PDF resource dictionary. + * The full set of ProcSet entries is automatically created for backwards + * compatibility, as recommended by the PDF spec. + */ + SkPDFResourceDict(); + + /** Add the value SkPDFObject as a reference to the resource dictionary + * with the give type and key. + * The relevant sub-dicts will be automatically generated, and the + * resource will be named by concatenating a type-specific prefix and + * the input key. + * This object will be part of the resource list when requested later. + * @param type The type of resource being entered, like + * kPattern_ResourceType or kExtGState_ResourceType. + * @param key The resource key, should be unique within its type. + * @param value The resource itself. + * @return The value argument is returned. + */ + SkPDFObject* insertResourceAsReference(SkPDFResourceType type, int key, + SkPDFObject* value); + + /** + * Gets resources inserted into this dictionary as a reference. + * + * @param knownResourceObjects Set containing currently known resources. + * Resources in the dict and this set will not be added to the output. + * @param newResourceObjects Output set to which non-preexisting resources + * will be added. + * @param recursive Whether or not to add resources of resources. + */ + void getReferencedResources( + const SkTSet& knownResourceObjects, + SkTSet* newResourceObjects, + bool recursive) const; + + /** + * Returns the name for the resource that will be generated by the resource + * dict. + * + * @param type The type of resource being entered, like + * kPattern_ResourceType or kExtGState_ResourceType. + * @param key The resource key, should be unique within its type. + */ + static SkString getResourceName(SkPDFResourceType type, int key); + +private: + /** Add the value to the dictionary with the given key. Refs value. + * The relevant sub-dicts will be automatically generated, and the + * resource will be named by concatenating a type-specific prefix and + * the input key. + * The object will NOT be part of the resource list when requested later. + * @param type The type of resource being entered. + * @param key The resource key, should be unique within its type. + * @param value The resource itself. + * @return The value argument is returned. + */ + SkPDFObject* insertResource(SkPDFResourceType type, int key, + SkPDFObject* value); + + SkTSet fResources; + + SkTDArray fTypes; + typedef SkPDFDict INHERITED; +}; + +#endif