| /* |
| * 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; |
| }; |
| |
| #endif |