/* * 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<SkPDFObject*>& knownResourceObjects, SkTSet<SkPDFObject*>* 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<SkPDFObject*> fResources; SkTDArray<SkPDFDict*> fTypes; typedef SkPDFDict INHERITED; }; #endif