| Index: src/pdf/SkPDFDocument.h
|
| diff --git a/src/pdf/SkPDFDocument.h b/src/pdf/SkPDFDocument.h
|
| index 8ed76778fe91b8fb79f466967bf50af9f56d5e0d..de1d8830bc118217766e5e6a45ca5ece48de125c 100644
|
| --- a/src/pdf/SkPDFDocument.h
|
| +++ b/src/pdf/SkPDFDocument.h
|
| @@ -8,6 +8,8 @@
|
| #define SkPDFDocument_DEFINED
|
|
|
| #include "SkDocument.h"
|
| +#include "SkPDFMetadata.h"
|
| +#include "SkPDFTypes.h"
|
|
|
| sk_sp<SkDocument> SkPDFMakeDocument(
|
| SkWStream* stream,
|
| @@ -15,4 +17,63 @@ sk_sp<SkDocument> SkPDFMakeDocument(
|
| SkScalar rasterDpi,
|
| SkPixelSerializer* jpegEncoder);
|
|
|
| +// Logically part of SkPDFDocument (like SkPDFCanon), but separate to
|
| +// keep similar functionality together.
|
| +struct SkPDFObjectSerializer : SkNoncopyable {
|
| + SkPDFObjNumMap fObjNumMap;
|
| + SkPDFSubstituteMap fSubstituteMap;
|
| + SkTDArray<int32_t> fOffsets;
|
| + sk_sp<SkPDFObject> fInfoDict;
|
| + size_t fBaseOffset;
|
| + int32_t fNextToBeSerialized; // index in fObjNumMap
|
| +
|
| + SkPDFObjectSerializer();
|
| + void addObjectRecursively(const sk_sp<SkPDFObject>&);
|
| + void serializeHeader(SkWStream*, const SkPDFMetadata&);
|
| + void serializeObjects(SkWStream*);
|
| + void serializeFooter(SkWStream*, const sk_sp<SkPDFObject>, sk_sp<SkPDFObject>);
|
| + int32_t offset(SkWStream*);
|
| +};
|
| +
|
| +/** Concrete implementation of SkDocument that creates PDF files. This
|
| + class does not produced linearized or optimized PDFs; instead it
|
| + it attempts to use a minimum amount of RAM. */
|
| +class SkPDFDocument : public SkDocument {
|
| +public:
|
| + SkPDFDocument(SkWStream*,
|
| + void (*)(SkWStream*, bool),
|
| + SkScalar,
|
| + SkPixelSerializer*);
|
| + virtual ~SkPDFDocument();
|
| + SkCanvas* onBeginPage(SkScalar, SkScalar, const SkRect&) override;
|
| + void onEndPage() override;
|
| + bool onClose(SkWStream*) override;
|
| + void onAbort() override;
|
| + void setMetadata(const SkDocument::Attribute[],
|
| + int,
|
| + const SkTime::DateTime*,
|
| + const SkTime::DateTime*) override;
|
| + /**
|
| + Serialize the object, as well as any other objects it
|
| + indirectly refers to. If any any other objects have been added
|
| + to the SkPDFObjNumMap without serializing them, they will be
|
| + serialized as well.
|
| +
|
| + It might go without saying that objects should not be changed
|
| + after calling serialize, since those changes will be too late.
|
| + The same goes for changes to the SkPDFSubstituteMap that effect
|
| + the object or its dependencies.
|
| + */
|
| + void serialize(const sk_sp<SkPDFObject>&);
|
| + SkPDFCanon* canon() { return &fCanon; }
|
| +
|
| +private:
|
| + SkPDFObjectSerializer fObjectSerializer;
|
| + SkPDFCanon fCanon;
|
| + SkTArray<sk_sp<const SkPDFDevice>> fPageDevices;
|
| + sk_sp<SkCanvas> fCanvas;
|
| + SkScalar fRasterDpi;
|
| + SkPDFMetadata fMetadata;
|
| +};
|
| +
|
| #endif // SkPDFDocument_DEFINED
|
|
|