• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2013 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #ifndef SkPDFResourceDict_DEFINED
9 #define SkPDFResourceDict_DEFINED
10 
11 #include "SkPDFTypes.h"
12 #include "SkTDArray.h"
13 #include "SkTSet.h"
14 #include "SkTypes.h"
15 
16 /** \class SkPDFResourceDict
17 
18     A resource dictionary, which maintains the relevant sub-dicts and
19     allows generation of a list of referenced SkPDFObjects inserted with
20     insertResourceAsRef.
21 */
22 class SkPDFResourceDict : public SkPDFDict {
23 public:
24     SK_DECLARE_INST_COUNT(SkPDFResourceDict)
25 
26      enum SkPDFResourceType{
27         kExtGState_ResourceType,
28         kPattern_ResourceType,
29         kXObject_ResourceType,
30         kFont_ResourceType,
31         // These additional types are defined by the spec, but not
32         // currently used by Skia: ColorSpace, Shading, Properties
33         kResourceTypeCount
34      };
35 
36     /** Create a PDF resource dictionary.
37      *  The full set of ProcSet entries is automatically created for backwards
38      *  compatibility, as recommended by the PDF spec.
39      */
40     SkPDFResourceDict();
41 
42     /** Add the value SkPDFObject as a reference to the resource dictionary
43      *  with the give type and key.
44      *  The relevant sub-dicts will be automatically generated, and the
45      *  resource will be named by concatenating a type-specific prefix and
46      *  the input key.
47      *  This object will be part of the resource list when requested later.
48      *  @param type  The type of resource being entered, like
49      *    kPattern_ResourceType or kExtGState_ResourceType.
50      *  @param key   The resource key, should be unique within its type.
51      *  @param value The resource itself.
52      *  @return The value argument is returned.
53      */
54     SkPDFObject* insertResourceAsReference(SkPDFResourceType type, int key,
55                                            SkPDFObject* value);
56 
57     /**
58      * Gets resources inserted into this dictionary as a reference.
59      *
60      * @param knownResourceObjects Set containing currently known resources.
61      *     Resources in the dict and this set will not be added to the output.
62      * @param newResourceObjects   Output set to which non-preexisting resources
63      *     will be added.
64      * @param recursive            Whether or not to add resources of resources.
65      */
66     void getReferencedResources(
67             const SkTSet<SkPDFObject*>& knownResourceObjects,
68             SkTSet<SkPDFObject*>* newResourceObjects,
69             bool recursive) const;
70 
71     /**
72      * Returns the name for the resource that will be generated by the resource
73      * dict.
74      *
75      *  @param type  The type of resource being entered, like
76      *    kPattern_ResourceType or kExtGState_ResourceType.
77      *  @param key   The resource key, should be unique within its type.
78      */
79     static SkString getResourceName(SkPDFResourceType type, int key);
80 
81 private:
82     /** Add the value to the dictionary with the given key.  Refs value.
83      *  The relevant sub-dicts will be automatically generated, and the
84      *  resource will be named by concatenating a type-specific prefix and
85      *  the input key.
86      *  The object will NOT be part of the resource list when requested later.
87      *  @param type  The type of resource being entered.
88      *  @param key   The resource key, should be unique within its type.
89      *  @param value The resource itself.
90      *  @return The value argument is returned.
91      */
92     SkPDFObject* insertResource(SkPDFResourceType type, int key,
93                                 SkPDFObject* value);
94 
95     SkTSet<SkPDFObject*> fResources;
96 
97     SkTDArray<SkPDFDict*> fTypes;
98     typedef SkPDFDict INHERITED;
99 };
100 
101 #endif
102