| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2010 The Android Open Source Project | 2 * Copyright 2010 The Android Open Source Project |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 | 8 |
| 9 #ifndef SkPDFTypes_DEFINED | 9 #ifndef SkPDFTypes_DEFINED |
| 10 #define SkPDFTypes_DEFINED | 10 #define SkPDFTypes_DEFINED |
| 11 | 11 |
| 12 #include "SkRefCnt.h" | 12 #include "SkRefCnt.h" |
| 13 #include "SkScalar.h" | 13 #include "SkScalar.h" |
| 14 #include "SkStream.h" |
| 14 #include "SkString.h" | 15 #include "SkString.h" |
| 15 #include "SkTDArray.h" | 16 #include "SkTDArray.h" |
| 16 #include "SkTHash.h" | 17 #include "SkTHash.h" |
| 17 #include "SkTypes.h" | 18 #include "SkTypes.h" |
| 18 | 19 |
| 19 class SkPDFObjNumMap; | 20 class SkPDFObjNumMap; |
| 20 class SkPDFObject; | 21 class SkPDFObject; |
| 21 class SkPDFSubstituteMap; | 22 class SkPDFSubstituteMap; |
| 22 class SkWStream; | |
| 23 | 23 |
| 24 /** \class SkPDFObject | 24 /** \class SkPDFObject |
| 25 | 25 |
| 26 A PDF Object is the base class for primitive elements in a PDF file. A | 26 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, | 27 common subtype is used to ease the use of indirect object references, |
| 28 which are common in the PDF format. | 28 which are common in the PDF format. |
| 29 | 29 |
| 30 */ | 30 */ |
| 31 class SkPDFObject : public SkRefCnt { | 31 class SkPDFObject : public SkRefCnt { |
| 32 public: | 32 public: |
| 33 | |
| 34 | |
| 35 /** Subclasses must implement this method to print the object to the | 33 /** Subclasses must implement this method to print the object to the |
| 36 * PDF file. | 34 * PDF file. |
| 37 * @param catalog The object catalog to use. | 35 * @param catalog The object catalog to use. |
| 38 * @param stream The writable output stream to send the output to. | 36 * @param stream The writable output stream to send the output to. |
| 39 */ | 37 */ |
| 40 // TODO(halcanary): make this method const | 38 // TODO(halcanary): make this method const |
| 41 virtual void emitObject(SkWStream* stream, | 39 virtual void emitObject(SkWStream* stream, |
| 42 const SkPDFObjNumMap& objNumMap, | 40 const SkPDFObjNumMap& objNumMap, |
| 43 const SkPDFSubstituteMap& substitutes) const = 0; | 41 const SkPDFSubstituteMap& substitutes) const = 0; |
| 44 | 42 |
| (...skipping 25 matching lines...) Expand all Loading... |
| 70 SkPDFUnion(SkPDFUnion&& other); | 68 SkPDFUnion(SkPDFUnion&& other); |
| 71 SkPDFUnion& operator=(SkPDFUnion&& other); | 69 SkPDFUnion& operator=(SkPDFUnion&& other); |
| 72 | 70 |
| 73 ~SkPDFUnion(); | 71 ~SkPDFUnion(); |
| 74 | 72 |
| 75 /** The following nine functions are the standard way of creating | 73 /** The following nine functions are the standard way of creating |
| 76 SkPDFUnion objects. */ | 74 SkPDFUnion objects. */ |
| 77 | 75 |
| 78 static SkPDFUnion Int(int32_t); | 76 static SkPDFUnion Int(int32_t); |
| 79 | 77 |
| 80 static SkPDFUnion Int(size_t); | 78 static SkPDFUnion Int(size_t v) { return SkPDFUnion::Int(SkToS32(v)); } |
| 81 | 79 |
| 82 static SkPDFUnion Bool(bool); | 80 static SkPDFUnion Bool(bool); |
| 83 | 81 |
| 84 static SkPDFUnion Scalar(SkScalar); | 82 static SkPDFUnion Scalar(SkScalar); |
| 85 | 83 |
| 86 /** These two functions do NOT take ownership of ptr, and do NOT | 84 /** These two functions do NOT take ownership of ptr, and do NOT |
| 87 copy the string. Suitable for passing in static const | 85 copy the string. Suitable for passing in static const |
| 88 strings. For example: | 86 strings. For example: |
| 89 SkPDFUnion n = SkPDFUnion::Name("Length"); | 87 SkPDFUnion n = SkPDFUnion::Name("Length"); |
| 90 SkPDFUnion u = SkPDFUnion::String("Identity"); */ | 88 SkPDFUnion u = SkPDFUnion::String("Identity"); */ |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 181 #endif // 0 | 179 #endif // 0 |
| 182 | 180 |
| 183 //////////////////////////////////////////////////////////////////////////////// | 181 //////////////////////////////////////////////////////////////////////////////// |
| 184 | 182 |
| 185 /** \class SkPDFArray | 183 /** \class SkPDFArray |
| 186 | 184 |
| 187 An array object in a PDF. | 185 An array object in a PDF. |
| 188 */ | 186 */ |
| 189 class SkPDFArray : public SkPDFObject { | 187 class SkPDFArray : public SkPDFObject { |
| 190 public: | 188 public: |
| 191 | |
| 192 | |
| 193 static const int kMaxLen = 8191; | 189 static const int kMaxLen = 8191; |
| 194 | 190 |
| 195 /** Create a PDF array. Maximum length is 8191. | 191 /** Create a PDF array. Maximum length is 8191. |
| 196 */ | 192 */ |
| 197 SkPDFArray(); | 193 SkPDFArray(); |
| 198 virtual ~SkPDFArray(); | 194 virtual ~SkPDFArray(); |
| 199 | 195 |
| 200 // The SkPDFObject interface. | 196 // The SkPDFObject interface. |
| 201 void emitObject(SkWStream* stream, | 197 void emitObject(SkWStream* stream, |
| 202 const SkPDFObjNumMap& objNumMap, | 198 const SkPDFObjNumMap& objNumMap, |
| (...skipping 29 matching lines...) Expand all Loading... |
| 232 void append(SkPDFUnion&& value); | 228 void append(SkPDFUnion&& value); |
| 233 typedef SkPDFObject INHERITED; | 229 typedef SkPDFObject INHERITED; |
| 234 }; | 230 }; |
| 235 | 231 |
| 236 /** \class SkPDFDict | 232 /** \class SkPDFDict |
| 237 | 233 |
| 238 A dictionary object in a PDF. | 234 A dictionary object in a PDF. |
| 239 */ | 235 */ |
| 240 class SkPDFDict : public SkPDFObject { | 236 class SkPDFDict : public SkPDFObject { |
| 241 public: | 237 public: |
| 242 | |
| 243 | |
| 244 /** Create a PDF dictionary. Maximum number of entries is 4095. | 238 /** Create a PDF dictionary. Maximum number of entries is 4095. |
| 245 */ | 239 */ |
| 246 SkPDFDict(); | 240 SkPDFDict(); |
| 247 | 241 |
| 248 /** Create a PDF dictionary with a Type entry. | 242 /** Create a PDF dictionary with a Type entry. |
| 249 * @param type The value of the Type entry. | 243 * @param type The value of the Type entry. |
| 250 */ | 244 */ |
| 251 explicit SkPDFDict(const char type[]); | 245 explicit SkPDFDict(const char type[]); |
| 252 | 246 |
| 253 virtual ~SkPDFDict(); | 247 virtual ~SkPDFDict(); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 283 void insertScalar(const char key[], SkScalar value); | 277 void insertScalar(const char key[], SkScalar value); |
| 284 void insertName(const char key[], const char nameValue[]); | 278 void insertName(const char key[], const char nameValue[]); |
| 285 void insertName(const char key[], const SkString& nameValue); | 279 void insertName(const char key[], const SkString& nameValue); |
| 286 void insertString(const char key[], const char value[]); | 280 void insertString(const char key[], const char value[]); |
| 287 void insertString(const char key[], const SkString& value); | 281 void insertString(const char key[], const SkString& value); |
| 288 | 282 |
| 289 /** Remove all entries from the dictionary. | 283 /** Remove all entries from the dictionary. |
| 290 */ | 284 */ |
| 291 void clear(); | 285 void clear(); |
| 292 | 286 |
| 287 /** Emit the dictionary, without the "<<" and ">>". |
| 288 */ |
| 289 void emitAll(SkWStream* stream, |
| 290 const SkPDFObjNumMap& objNumMap, |
| 291 const SkPDFSubstituteMap& substitutes) const; |
| 292 |
| 293 private: | 293 private: |
| 294 struct Record { | 294 struct Record { |
| 295 SkPDFUnion fKey; | 295 SkPDFUnion fKey; |
| 296 SkPDFUnion fValue; | 296 SkPDFUnion fValue; |
| 297 }; | 297 }; |
| 298 SkTDArray<Record> fRecords; | 298 SkTDArray<Record> fRecords; |
| 299 static const int kMaxLen = 4095; | 299 static const int kMaxLen = 4095; |
| 300 | 300 |
| 301 void set(SkPDFUnion&& name, SkPDFUnion&& value); | 301 void set(SkPDFUnion&& name, SkPDFUnion&& value); |
| 302 | 302 |
| 303 typedef SkPDFObject INHERITED; | 303 typedef SkPDFObject INHERITED; |
| 304 }; | 304 }; |
| 305 | 305 |
| 306 /** \class SkPDFSharedStream |
| 307 |
| 308 This class takes an asset and assumes that it is backed by |
| 309 long-lived shared data (for example, an open file |
| 310 descriptor). That is: no memory savings can be made by holding on |
| 311 to a compressed version instead. |
| 312 */ |
| 313 class SkPDFSharedStream : public SkPDFObject { |
| 314 public: |
| 315 // Takes ownership of asset. |
| 316 SkPDFSharedStream(SkStreamAsset* data) |
| 317 : fAsset(data), fDict(SkNEW(SkPDFDict)) { |
| 318 SkASSERT(data); |
| 319 } |
| 320 SkPDFDict* dict() { return fDict; } |
| 321 void emitObject(SkWStream*, |
| 322 const SkPDFObjNumMap&, |
| 323 const SkPDFSubstituteMap&) const override; |
| 324 void addResources(SkPDFObjNumMap*, |
| 325 const SkPDFSubstituteMap&) const override; |
| 326 |
| 327 private: |
| 328 SkAutoTDelete<SkStreamAsset> fAsset; |
| 329 SkAutoTUnref<SkPDFDict> fDict; |
| 330 typedef SkPDFObject INHERITED; |
| 331 }; |
| 332 |
| 306 //////////////////////////////////////////////////////////////////////////////// | 333 //////////////////////////////////////////////////////////////////////////////// |
| 307 | 334 |
| 308 /** \class SkPDFObjNumMap | 335 /** \class SkPDFObjNumMap |
| 309 | 336 |
| 310 The PDF Object Number Map manages object numbers. It is used to | 337 The PDF Object Number Map manages object numbers. It is used to |
| 311 create the PDF cross reference table. | 338 create the PDF cross reference table. |
| 312 */ | 339 */ |
| 313 class SkPDFObjNumMap : SkNoncopyable { | 340 class SkPDFObjNumMap : SkNoncopyable { |
| 314 public: | 341 public: |
| 315 /** Add the passed object to the catalog. | 342 /** Add the passed object to the catalog. |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 352 | 379 |
| 353 SkPDFObject* operator()(SkPDFObject* o) const { | 380 SkPDFObject* operator()(SkPDFObject* o) const { |
| 354 return this->getSubstitute(o); | 381 return this->getSubstitute(o); |
| 355 } | 382 } |
| 356 | 383 |
| 357 private: | 384 private: |
| 358 SkTHashMap<SkPDFObject*, SkPDFObject*> fSubstituteMap; | 385 SkTHashMap<SkPDFObject*, SkPDFObject*> fSubstituteMap; |
| 359 }; | 386 }; |
| 360 | 387 |
| 361 #endif | 388 #endif |
| OLD | NEW |