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 "SkTypes.h"
14 
15 /** \class SkPDFResourceDict
16 
17     A resource dictionary, which maintains the relevant sub-dicts and
18     allows generation of a list of referenced SkPDFObjects inserted with
19     insertResourceAsRef.
20 */
21 class SkPDFResourceDict {
22 public:
23     enum SkPDFResourceType {
24         kExtGState_ResourceType,
25         kPattern_ResourceType,
26         kXObject_ResourceType,
27         kFont_ResourceType,
28         // These additional types are defined by the spec, but not
29         // currently used by Skia: ColorSpace, Shading, Properties
30         kResourceTypeCount
31     };
32 
33     /** Create a PDF resource dictionary.
34      *  The full set of ProcSet entries is automatically created for backwards
35      *  compatibility, as recommended by the PDF spec.
36      *
37      *  Any arguments can be nullptr.
38      */
39     static SkPDFDict* Create(
40         const SkTDArray<SkPDFObject*>* gStateResources,
41         const SkTDArray<SkPDFObject*>* patternResources,
42         const SkTDArray<SkPDFObject*>* xObjectResources,
43         const SkTDArray<SkPDFObject*>* fontResources);
44 
45     /**
46      * Returns the name for the resource that will be generated by the resource
47      * dict.
48      *
49      *  @param type  The type of resource being entered, like
50      *    kPattern_ResourceType or kExtGState_ResourceType.
51      *  @param key   The resource key, should be unique within its type.
52      */
53     static SkString getResourceName(SkPDFResourceType type, int key);
54 };
55 
56 #endif
57