Chromium Code Reviews| 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 "SkRefCnt.h" | 13 #include "SkRefCnt.h" |
| 14 #include "SkScalar.h" | 14 #include "SkScalar.h" |
| 15 #include "SkString.h" | 15 #include "SkString.h" |
| 16 #include "SkTDArray.h" | 16 #include "SkTDArray.h" |
| 17 #include "SkTSet.h" | 17 #include "SkTSet.h" |
| 18 #include "SkTypes.h" | 18 #include "SkTypes.h" |
| 19 | 19 |
| 20 class SkPDFCatalog; | 20 class SkPDFCatalog; |
| 21 class SkWStream; | 21 class SkWStream; |
| 22 | 22 |
| 23 class SkPDFObject; | |
| 24 typedef SkTSet<SkPDFObject*> SkPDFObjectSet; | |
|
mtklein
2015/01/26 23:38:59
I generally prefer writing out the full names of t
hal.canary
2015/02/09 23:35:01
I'm not sure that I need SkTSet. I really need an
| |
| 25 | |
| 23 /** \class SkPDFObject | 26 /** \class SkPDFObject |
| 24 | 27 |
| 25 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 |
| 26 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, |
| 27 which are common in the PDF format. | 30 which are common in the PDF format. |
| 28 */ | 31 */ |
| 29 class SkPDFObject : public SkRefCnt { | 32 class SkPDFObject : public SkRefCnt { |
| 30 public: | 33 public: |
| 31 SK_DECLARE_INST_COUNT(SkPDFObject) | 34 SK_DECLARE_INST_COUNT(SkPDFObject) |
| 32 | 35 |
| 33 /** Subclasses must implement this method to print the object to the | 36 /** Subclasses must implement this method to print the object to the |
| 34 * PDF file. | 37 * PDF file. |
| 35 * @param catalog The object catalog to use. | 38 * @param catalog The object catalog to use. |
| 36 * @param stream The writable output stream to send the output to. | 39 * @param stream The writable output stream to send the output to. |
| 37 */ | 40 */ |
| 38 virtual void emitObject(SkWStream* stream, SkPDFCatalog* catalog) = 0; | 41 virtual void emitObject(SkWStream* stream, SkPDFCatalog* catalog) = 0; |
| 39 | 42 |
| 40 /** For non-primitive objects (i.e. objects defined outside this file), | 43 /** |
| 41 * this method will add to newResourceObjects any objects that this method | 44 * An object's has a resource if it depends, via an indirect |
| 42 * depends on, but not already in knownResourceObjects. This operates | 45 * reference on another object. This method recursively adds |
| 43 * recursively so if this object depends on another object and that object | 46 * resouces for this object and for its resouces' resouces.... |
|
mtklein
2015/01/26 23:38:59
This first sentence doesn't really make sense. Is
hal.canary
2015/02/09 23:35:01
Done.
| |
| 44 * depends on two more, all three objects will be added. | |
| 45 * | 47 * |
| 46 * @param knownResourceObjects The set of resources to be ignored. | 48 * Ther default implementation does nothing and is therefore |
| 47 * @param newResourceObjects The set to append dependant resources to. | 49 * suitable for "leaf" objects. |
|
mtklein
2015/01/26 23:38:59
Instead of writing this note, you could just put t
hal.canary
2015/02/09 23:35:01
You shouldn't put virtuals in a header file.
mtklein
2015/02/09 23:47:17
Why not?
| |
| 48 */ | 50 */ |
| 49 virtual void getResources(const SkTSet<SkPDFObject*>& knownResourceObjects, | 51 virtual void addResources(SkPDFObjectSet* resourceSet, |
|
mtklein
2015/01/26 23:38:59
Can this method be const ?
| |
| 50 SkTSet<SkPDFObject*>* newResourceObjects); | 52 SkPDFCatalog* catalog); |
| 51 | |
| 52 /** Static helper function to add a resource to a list. The list takes | |
| 53 * a reference. | |
| 54 * @param resource The resource to add. | |
| 55 * @param list The list to add the resource to. | |
| 56 */ | |
| 57 static void AddResourceHelper(SkPDFObject* resource, | |
| 58 SkTDArray<SkPDFObject*>* list); | |
| 59 | |
| 60 /** Static helper function to copy and reference the resources (and all | |
| 61 * their subresources) into a new list. | |
| 62 * @param resources The resource list. | |
| 63 * @param newResourceObjects All the resource objects (recursively) used on | |
| 64 * the page are added to this array. This gives | |
| 65 * the caller a chance to deduplicate resources | |
| 66 * across pages. | |
| 67 * @param knownResourceObjects The set of resources to be ignored. | |
| 68 */ | |
| 69 static void GetResourcesHelper( | |
| 70 const SkTDArray<SkPDFObject*>* resources, | |
| 71 const SkTSet<SkPDFObject*>& knownResourceObjects, | |
| 72 SkTSet<SkPDFObject*>* newResourceObjects); | |
| 73 | 53 |
| 74 private: | 54 private: |
| 75 typedef SkRefCnt INHERITED; | 55 typedef SkRefCnt INHERITED; |
| 76 }; | 56 }; |
| 77 | 57 |
| 78 /** \class SkPDFObjRef | 58 /** \class SkPDFObjRef |
| 79 | 59 |
| 80 An indirect reference to a PDF object. | 60 An indirect reference to a PDF object. |
| 81 */ | 61 */ |
| 82 class SkPDFObjRef : public SkPDFObject { | 62 class SkPDFObjRef : public SkPDFObject { |
| 83 public: | 63 public: |
| 84 SK_DECLARE_INST_COUNT(SkPDFObjRef) | 64 SK_DECLARE_INST_COUNT(SkPDFObjRef) |
| 85 | 65 |
| 86 /** Create a reference to an existing SkPDFObject. | 66 /** Create a reference to an existing SkPDFObject. |
| 87 * @param obj The object to reference. | 67 * @param obj The object to reference. |
| 88 */ | 68 */ |
| 89 explicit SkPDFObjRef(SkPDFObject* obj); | 69 explicit SkPDFObjRef(SkPDFObject* obj); |
| 90 virtual ~SkPDFObjRef(); | 70 virtual ~SkPDFObjRef(); |
| 91 | 71 |
| 92 // The SkPDFObject interface. | 72 // The SkPDFObject interface. |
| 93 virtual void emitObject(SkWStream* stream, SkPDFCatalog* catalog) SK_OVERRID E; | 73 virtual void emitObject(SkWStream* stream, SkPDFCatalog* catalog) SK_OVERRID E; |
| 74 virtual void addResources(SkPDFObjectSet*, SkPDFCatalog*) SK_OVERRIDE; | |
| 94 | 75 |
| 95 private: | 76 private: |
| 96 SkAutoTUnref<SkPDFObject> fObj; | 77 SkAutoTUnref<SkPDFObject> fObj; |
| 97 | 78 |
| 98 typedef SkPDFObject INHERITED; | 79 typedef SkPDFObject INHERITED; |
| 99 }; | 80 }; |
| 100 | 81 |
| 101 /** \class SkPDFInt | 82 /** \class SkPDFInt |
| 102 | 83 |
| 103 An integer object in a PDF. | 84 An integer object in a PDF. |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 247 public: | 228 public: |
| 248 SK_DECLARE_INST_COUNT(SkPDFArray) | 229 SK_DECLARE_INST_COUNT(SkPDFArray) |
| 249 | 230 |
| 250 /** Create a PDF array. Maximum length is 8191. | 231 /** Create a PDF array. Maximum length is 8191. |
| 251 */ | 232 */ |
| 252 SkPDFArray(); | 233 SkPDFArray(); |
| 253 virtual ~SkPDFArray(); | 234 virtual ~SkPDFArray(); |
| 254 | 235 |
| 255 // The SkPDFObject interface. | 236 // The SkPDFObject interface. |
| 256 virtual void emitObject(SkWStream* stream, SkPDFCatalog* catalog) SK_OVERRID E; | 237 virtual void emitObject(SkWStream* stream, SkPDFCatalog* catalog) SK_OVERRID E; |
| 238 virtual void addResources(SkPDFObjectSet*, SkPDFCatalog*) SK_OVERRIDE; | |
| 257 | 239 |
| 258 /** The size of the array. | 240 /** The size of the array. |
| 259 */ | 241 */ |
| 260 int size() { return fValue.count(); } | 242 int size() { return fValue.count(); } |
| 261 | 243 |
| 262 /** Preallocate space for the given number of entries. | 244 /** Preallocate space for the given number of entries. |
| 263 * @param length The number of array slots to preallocate. | 245 * @param length The number of array slots to preallocate. |
| 264 */ | 246 */ |
| 265 void reserve(int length); | 247 void reserve(int length); |
| 266 | 248 |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 318 | 300 |
| 319 /** Create a PDF dictionary with a Type entry. | 301 /** Create a PDF dictionary with a Type entry. |
| 320 * @param type The value of the Type entry. | 302 * @param type The value of the Type entry. |
| 321 */ | 303 */ |
| 322 explicit SkPDFDict(const char type[]); | 304 explicit SkPDFDict(const char type[]); |
| 323 | 305 |
| 324 virtual ~SkPDFDict(); | 306 virtual ~SkPDFDict(); |
| 325 | 307 |
| 326 // The SkPDFObject interface. | 308 // The SkPDFObject interface. |
| 327 virtual void emitObject(SkWStream* stream, SkPDFCatalog* catalog) SK_OVERRID E; | 309 virtual void emitObject(SkWStream* stream, SkPDFCatalog* catalog) SK_OVERRID E; |
| 310 virtual void addResources(SkPDFObjectSet*, SkPDFCatalog*) SK_OVERRIDE; | |
| 328 | 311 |
| 329 /** The size of the dictionary. | 312 /** The size of the dictionary. |
| 330 */ | 313 */ |
| 331 int size() const; | 314 int size() const; |
| 332 | 315 |
| 333 /** Add the value to the dictionary with the given key. Refs value. | 316 /** Add the value to the dictionary with the given key. Refs value. |
| 334 * @param key The key for this dictionary entry. | 317 * @param key The key for this dictionary entry. |
| 335 * @param value The value for this dictionary entry. | 318 * @param value The value for this dictionary entry. |
| 336 * @return The value argument is returned. | 319 * @return The value argument is returned. |
| 337 */ | 320 */ |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 404 | 387 |
| 405 mutable SkMutex fMutex; // protects modifications to fValue | 388 mutable SkMutex fMutex; // protects modifications to fValue |
| 406 SkTDArray<struct Rec> fValue; | 389 SkTDArray<struct Rec> fValue; |
| 407 | 390 |
| 408 SkPDFObject* append(SkPDFName* key, SkPDFObject* value); | 391 SkPDFObject* append(SkPDFName* key, SkPDFObject* value); |
| 409 | 392 |
| 410 typedef SkPDFObject INHERITED; | 393 typedef SkPDFObject INHERITED; |
| 411 }; | 394 }; |
| 412 | 395 |
| 413 #endif | 396 #endif |
| OLD | NEW |