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 SkPDFCatalog_DEFINED | 10 #ifndef SkPDFCatalog_DEFINED |
(...skipping 25 matching lines...) Expand all Loading... |
36 */ | 36 */ |
37 SkPDFObject* addObject(SkPDFObject* obj, bool onFirstPage); | 37 SkPDFObject* addObject(SkPDFObject* obj, bool onFirstPage); |
38 | 38 |
39 /** Inform the catalog of the object's position in the final stream. | 39 /** Inform the catalog of the object's position in the final stream. |
40 * The object should already have been added to the catalog. | 40 * The object should already have been added to the catalog. |
41 * @param obj The object to add. | 41 * @param obj The object to add. |
42 * @param offset The byte offset in the output stream of this object. | 42 * @param offset The byte offset in the output stream of this object. |
43 */ | 43 */ |
44 void setFileOffset(SkPDFObject* obj, off_t offset); | 44 void setFileOffset(SkPDFObject* obj, off_t offset); |
45 | 45 |
46 /** Output the object number for the passed object. | 46 /** Get the object number for the passed object. |
47 * @param obj The object of interest. | 47 * @param obj The object of interest. |
48 * @param stream The writable output stream to send the output to. | |
49 */ | 48 */ |
50 void emitObjectNumber(SkWStream* stream, SkPDFObject* obj); | 49 int32_t getObjectNumber(SkPDFObject* obj); |
51 | |
52 /** Return the number of bytes that would be emitted for the passed | |
53 * object's object number. | |
54 * @param obj The object of interest | |
55 */ | |
56 size_t getObjectNumberSize(SkPDFObject* obj); | |
57 | 50 |
58 /** Return the document flags in effect for this catalog/document. | 51 /** Return the document flags in effect for this catalog/document. |
59 */ | 52 */ |
60 SkPDFDocument::Flags getDocumentFlags() const { return fDocumentFlags; } | 53 SkPDFDocument::Flags getDocumentFlags() const { return fDocumentFlags; } |
61 | 54 |
62 /** Output the cross reference table for objects in the catalog. | 55 /** Output the cross reference table for objects in the catalog. |
63 * Returns the total number of objects. | 56 * Returns the total number of objects. |
64 * @param stream The writable output stream to send the output to. | 57 * @param stream The writable output stream to send the output to. |
65 * @param firstPage If true, include first page objects only, otherwise | 58 * @param firstPage If true, include first page objects only, otherwise |
66 * include all objects not on the first page. | 59 * include all objects not on the first page. |
67 */ | 60 */ |
68 int32_t emitXrefTable(SkWStream* stream, bool firstPage); | 61 int32_t emitXrefTable(SkWStream* stream, bool firstPage); |
69 | 62 |
70 /** Set substitute object for the passed object. | 63 /** Set substitute object for the passed object. |
71 */ | 64 */ |
72 void setSubstitute(SkPDFObject* original, SkPDFObject* substitute); | 65 void setSubstitute(SkPDFObject* original, SkPDFObject* substitute); |
73 | 66 |
74 /** Find and return any substitute object set for the passed object. If | 67 /** Find and return any substitute object set for the passed object. If |
75 * there is none, return the passed object. | 68 * there is none, return the passed object. |
76 */ | 69 */ |
77 SkPDFObject* getSubstituteObject(SkPDFObject* object); | 70 SkPDFObject* getSubstituteObject(SkPDFObject* object); |
78 | 71 |
79 /** get the resources of substitute objects. | |
80 */ | |
81 SkTSet<SkPDFObject*>* getSubstituteList(bool firstPage); | |
82 | |
83 private: | 72 private: |
84 struct Rec { | 73 struct Rec { |
85 Rec(SkPDFObject* object, bool onFirstPage) | 74 Rec(SkPDFObject* object, bool onFirstPage) |
86 : fObject(object), | 75 : fObject(object), |
87 fFileOffset(0), | 76 fFileOffset(0), |
88 fObjNumAssigned(false), | 77 fObjNumAssigned(false), |
89 fOnFirstPage(onFirstPage) { | 78 fOnFirstPage(onFirstPage) { |
90 } | 79 } |
91 SkPDFObject* fObject; | 80 SkPDFObject* fObject; |
92 off_t fFileOffset; | 81 off_t fFileOffset; |
93 bool fObjNumAssigned; | 82 bool fObjNumAssigned; |
94 bool fOnFirstPage; | 83 bool fOnFirstPage; |
95 }; | 84 }; |
96 | 85 |
97 struct SubstituteMapping { | 86 struct SubstituteMapping { |
98 SubstituteMapping(SkPDFObject* original, SkPDFObject* substitute) | 87 SubstituteMapping(SkPDFObject* original, SkPDFObject* substitute) |
99 : fOriginal(original), fSubstitute(substitute) { | 88 : fOriginal(original), fSubstitute(substitute) { |
100 } | 89 } |
101 SkPDFObject* fOriginal; | 90 SkPDFObject* fOriginal; |
102 SkPDFObject* fSubstitute; | 91 SkPDFObject* fSubstitute; |
103 }; | 92 }; |
104 | 93 |
105 // TODO(vandebo): Make this a hash if it's a performance problem. | 94 // TODO(vandebo): Make this a hash if it's a performance problem. |
106 SkTDArray<struct Rec> fCatalog; | 95 SkTDArray<Rec> fCatalog; |
107 | 96 |
108 // TODO(arthurhsu): Make this a hash if it's a performance problem. | 97 // TODO(arthurhsu): Make this a hash if it's a performance problem. |
109 SkTDArray<SubstituteMapping> fSubstituteMap; | 98 SkTDArray<SubstituteMapping> fSubstituteMap; |
110 SkTSet<SkPDFObject*> fSubstituteResourcesFirstPage; | 99 SkTSet<SkPDFObject*> fSubstituteResourcesFirstPage; |
111 SkTSet<SkPDFObject*> fSubstituteResourcesRemaining; | 100 SkTSet<SkPDFObject*> fSubstituteResourcesRemaining; |
112 | 101 |
113 // Number of objects on the first page. | 102 // Number of objects on the first page. |
114 uint32_t fFirstPageCount; | 103 uint32_t fFirstPageCount; |
115 // Next object number to assign (on page > 1). | 104 // Next object number to assign (on page > 1). |
116 uint32_t fNextObjNum; | 105 uint32_t fNextObjNum; |
117 // Next object number to assign on the first page. | 106 // Next object number to assign on the first page. |
118 uint32_t fNextFirstPageObjNum; | 107 uint32_t fNextFirstPageObjNum; |
119 | 108 |
120 SkPDFDocument::Flags fDocumentFlags; | 109 SkPDFDocument::Flags fDocumentFlags; |
121 | 110 |
122 int findObjectIndex(SkPDFObject* obj) const; | 111 int findObjectIndex(SkPDFObject* obj); |
123 | 112 |
124 int assignObjNum(SkPDFObject* obj); | 113 int assignObjNum(SkPDFObject* obj); |
125 }; | 114 }; |
126 | 115 |
127 #endif | 116 #endif |
OLD | NEW |