OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2010 The Android Open Source Project | 3 * Copyright 2010 The Android Open Source Project |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 | 9 |
10 #ifndef SkPDFTypes_DEFINED | 10 #ifndef SkPDFTypes_DEFINED |
11 #define SkPDFTypes_DEFINED | 11 #define SkPDFTypes_DEFINED |
12 | 12 |
13 #include "SkMutex.h" | 13 #include "SkMutex.h" |
14 #include "SkRefCnt.h" | 14 #include "SkRefCnt.h" |
15 #include "SkScalar.h" | 15 #include "SkScalar.h" |
16 #include "SkString.h" | 16 #include "SkString.h" |
17 #include "SkTDArray.h" | 17 #include "SkTDArray.h" |
18 #include "SkTSet.h" | 18 #include "SkTSet.h" |
19 #include "SkTypes.h" | 19 #include "SkTypes.h" |
20 | 20 |
21 class SkPDFCatalog; | 21 class SkPDFCatalog; |
22 class SkWStream; | 22 class SkWStream; |
23 | 23 |
| 24 class SkPDFObject; |
| 25 |
24 /** \class SkPDFObject | 26 /** \class SkPDFObject |
25 | 27 |
26 A PDF Object is the base class for primitive elements in a PDF file. A | 28 A PDF Object is the base class for primitive elements in a PDF file. A |
27 common subtype is used to ease the use of indirect object references, | 29 common subtype is used to ease the use of indirect object references, |
28 which are common in the PDF format. | 30 which are common in the PDF format. |
29 */ | 31 */ |
30 class SkPDFObject : public SkRefCnt { | 32 class SkPDFObject : public SkRefCnt { |
31 public: | 33 public: |
32 SK_DECLARE_INST_COUNT(SkPDFObject) | 34 SK_DECLARE_INST_COUNT(SkPDFObject) |
33 | 35 |
34 /** Subclasses must implement this method to print the object to the | 36 /** Subclasses must implement this method to print the object to the |
35 * PDF file. | 37 * PDF file. |
36 * @param catalog The object catalog to use. | 38 * @param catalog The object catalog to use. |
37 * @param stream The writable output stream to send the output to. | 39 * @param stream The writable output stream to send the output to. |
38 */ | 40 */ |
| 41 // TODO(halcanary): make this method const |
39 virtual void emitObject(SkWStream* stream, SkPDFCatalog* catalog) = 0; | 42 virtual void emitObject(SkWStream* stream, SkPDFCatalog* catalog) = 0; |
40 | 43 |
41 /** For non-primitive objects (i.e. objects defined outside this file), | 44 /** |
42 * this method will add to newResourceObjects any objects that this method | 45 * Adds all transitive dependencies of this object to resourceSet. |
43 * depends on, but not already in knownResourceObjects. This operates | |
44 * recursively so if this object depends on another object and that object | |
45 * depends on two more, all three objects will be added. | |
46 * | 46 * |
47 * @param knownResourceObjects The set of resources to be ignored. | 47 * @param catalog Implementations should respect the catalog's |
48 * @param newResourceObjects The set to append dependant resources to. | 48 * object substitution map. |
49 */ | 49 */ |
50 virtual void getResources(const SkTSet<SkPDFObject*>& knownResourceObjects, | 50 virtual void addResources(SkTSet<SkPDFObject*>* resourceSet, |
51 SkTSet<SkPDFObject*>* newResourceObjects); | 51 SkPDFCatalog* catalog) const {} |
52 | |
53 /** Static helper function to add a resource to a list. The list takes | |
54 * a reference. | |
55 * @param resource The resource to add. | |
56 * @param list The list to add the resource to. | |
57 */ | |
58 static void AddResourceHelper(SkPDFObject* resource, | |
59 SkTDArray<SkPDFObject*>* list); | |
60 | |
61 /** Static helper function to copy and reference the resources (and all | |
62 * their subresources) into a new list. | |
63 * @param resources The resource list. | |
64 * @param newResourceObjects All the resource objects (recursively) used on | |
65 * the page are added to this array. This gives | |
66 * the caller a chance to deduplicate resources | |
67 * across pages. | |
68 * @param knownResourceObjects The set of resources to be ignored. | |
69 */ | |
70 static void GetResourcesHelper( | |
71 const SkTDArray<SkPDFObject*>* resources, | |
72 const SkTSet<SkPDFObject*>& knownResourceObjects, | |
73 SkTSet<SkPDFObject*>* newResourceObjects); | |
74 | 52 |
75 private: | 53 private: |
76 typedef SkRefCnt INHERITED; | 54 typedef SkRefCnt INHERITED; |
77 }; | 55 }; |
78 | 56 |
79 /** \class SkPDFObjRef | 57 /** \class SkPDFObjRef |
80 | 58 |
81 An indirect reference to a PDF object. | 59 An indirect reference to a PDF object. |
82 */ | 60 */ |
83 class SkPDFObjRef : public SkPDFObject { | 61 class SkPDFObjRef : public SkPDFObject { |
84 public: | 62 public: |
85 SK_DECLARE_INST_COUNT(SkPDFObjRef) | 63 SK_DECLARE_INST_COUNT(SkPDFObjRef) |
86 | 64 |
87 /** Create a reference to an existing SkPDFObject. | 65 /** Create a reference to an existing SkPDFObject. |
88 * @param obj The object to reference. | 66 * @param obj The object to reference. |
89 */ | 67 */ |
90 explicit SkPDFObjRef(SkPDFObject* obj); | 68 explicit SkPDFObjRef(SkPDFObject* obj); |
91 virtual ~SkPDFObjRef(); | 69 virtual ~SkPDFObjRef(); |
92 | 70 |
93 // The SkPDFObject interface. | 71 // The SkPDFObject interface. |
94 virtual void emitObject(SkWStream* stream, SkPDFCatalog* catalog) SK_OVERRID
E; | 72 virtual void emitObject(SkWStream* stream, SkPDFCatalog* catalog) SK_OVERRID
E; |
| 73 virtual void addResources(SkTSet<SkPDFObject*>*, SkPDFCatalog*) const SK_OVE
RRIDE; |
95 | 74 |
96 private: | 75 private: |
97 SkAutoTUnref<SkPDFObject> fObj; | 76 SkAutoTUnref<SkPDFObject> fObj; |
98 | 77 |
99 typedef SkPDFObject INHERITED; | 78 typedef SkPDFObject INHERITED; |
100 }; | 79 }; |
101 | 80 |
102 /** \class SkPDFInt | 81 /** \class SkPDFInt |
103 | 82 |
104 An integer object in a PDF. | 83 An integer object in a PDF. |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
248 public: | 227 public: |
249 SK_DECLARE_INST_COUNT(SkPDFArray) | 228 SK_DECLARE_INST_COUNT(SkPDFArray) |
250 | 229 |
251 /** Create a PDF array. Maximum length is 8191. | 230 /** Create a PDF array. Maximum length is 8191. |
252 */ | 231 */ |
253 SkPDFArray(); | 232 SkPDFArray(); |
254 virtual ~SkPDFArray(); | 233 virtual ~SkPDFArray(); |
255 | 234 |
256 // The SkPDFObject interface. | 235 // The SkPDFObject interface. |
257 virtual void emitObject(SkWStream* stream, SkPDFCatalog* catalog) SK_OVERRID
E; | 236 virtual void emitObject(SkWStream* stream, SkPDFCatalog* catalog) SK_OVERRID
E; |
| 237 virtual void addResources(SkTSet<SkPDFObject*>*, SkPDFCatalog*) const SK_OVE
RRIDE; |
258 | 238 |
259 /** The size of the array. | 239 /** The size of the array. |
260 */ | 240 */ |
261 int size() { return fValue.count(); } | 241 int size() { return fValue.count(); } |
262 | 242 |
263 /** Preallocate space for the given number of entries. | 243 /** Preallocate space for the given number of entries. |
264 * @param length The number of array slots to preallocate. | 244 * @param length The number of array slots to preallocate. |
265 */ | 245 */ |
266 void reserve(int length); | 246 void reserve(int length); |
267 | 247 |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
319 | 299 |
320 /** Create a PDF dictionary with a Type entry. | 300 /** Create a PDF dictionary with a Type entry. |
321 * @param type The value of the Type entry. | 301 * @param type The value of the Type entry. |
322 */ | 302 */ |
323 explicit SkPDFDict(const char type[]); | 303 explicit SkPDFDict(const char type[]); |
324 | 304 |
325 virtual ~SkPDFDict(); | 305 virtual ~SkPDFDict(); |
326 | 306 |
327 // The SkPDFObject interface. | 307 // The SkPDFObject interface. |
328 virtual void emitObject(SkWStream* stream, SkPDFCatalog* catalog) SK_OVERRID
E; | 308 virtual void emitObject(SkWStream* stream, SkPDFCatalog* catalog) SK_OVERRID
E; |
| 309 virtual void addResources(SkTSet<SkPDFObject*>*, SkPDFCatalog*) const SK_OVE
RRIDE; |
329 | 310 |
330 /** The size of the dictionary. | 311 /** The size of the dictionary. |
331 */ | 312 */ |
332 int size() const; | 313 int size() const; |
333 | 314 |
334 /** Add the value to the dictionary with the given key. Refs value. | 315 /** Add the value to the dictionary with the given key. Refs value. |
335 * @param key The key for this dictionary entry. | 316 * @param key The key for this dictionary entry. |
336 * @param value The value for this dictionary entry. | 317 * @param value The value for this dictionary entry. |
337 * @return The value argument is returned. | 318 * @return The value argument is returned. |
338 */ | 319 */ |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
405 | 386 |
406 mutable SkMutex fMutex; // protects modifications to fValue | 387 mutable SkMutex fMutex; // protects modifications to fValue |
407 SkTDArray<struct Rec> fValue; | 388 SkTDArray<struct Rec> fValue; |
408 | 389 |
409 SkPDFObject* append(SkPDFName* key, SkPDFObject* value); | 390 SkPDFObject* append(SkPDFName* key, SkPDFObject* value); |
410 | 391 |
411 typedef SkPDFObject INHERITED; | 392 typedef SkPDFObject INHERITED; |
412 }; | 393 }; |
413 | 394 |
414 #endif | 395 #endif |
OLD | NEW |