SkPDF: More IndirectRefs
* Reserve PDFIndirectReference for each new page.
* SkPDFDocument::getPage returns PDFIndirectReference.
* SkPDFDevice::appendDests takes a PDFIndirectReference.
* generate_page_tree() respects page reservations, and
returns PDFIndirectReference.
* SkPDFDocument::fDests no longer sk_sp<>.
* ProcSets moved back to ResourceDict.
* StructTreeRoot builder moved to SkPDFTag::MakeStructTree.
Bug: skia:8630
Change-Id: Ie22e6b47d6d7b40bc47434794d26f7c43b7b241c
Reviewed-on: https://skia-review.googlesource.com/c/178934
Auto-Submit: Hal Canary <halcanary@google.com>
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Hal Canary <halcanary@google.com>
diff --git a/src/pdf/SkPDFDocumentPriv.h b/src/pdf/SkPDFDocumentPriv.h
index 27810dd..a432a20 100644
--- a/src/pdf/SkPDFDocumentPriv.h
+++ b/src/pdf/SkPDFDocumentPriv.h
@@ -85,7 +85,7 @@
SkPDFCanon* canon() { return &fCanon; }
const SkPDF::Metadata& metadata() const { return fMetadata; }
- sk_sp<SkPDFDict> getPage(int pageIndex) const;
+ SkPDFIndirectReference getPage(size_t pageIndex) const;
// Returns -1 if no mark ID.
int getMarkIdForNodeId(int nodeId);
@@ -94,6 +94,8 @@
void endObject();
SkExecutor* executor() const { return fExecutor; }
+ size_t currentPageIndex() { return fPages.size(); }
+ size_t pageCount() { return fPageRefs.size(); }
private:
sk_sp<SkPDFTag> recursiveBuildTagTree(const SkPDF::StructureElementNode& node,
@@ -103,7 +105,8 @@
SkPDFCanon fCanon;
SkCanvas fCanvas;
std::vector<sk_sp<SkPDFDict>> fPages;
- sk_sp<SkPDFDict> fDests;
+ std::vector<SkPDFIndirectReference> fPageRefs;
+ SkPDFDict fDests;
sk_sp<SkPDFDevice> fPageDevice;
SkUUID fUUID;
SkPDFIndirectReference fInfoDict;