Index: src/pdf/SkPDFTypes.cpp |
diff --git a/src/pdf/SkPDFTypes.cpp b/src/pdf/SkPDFTypes.cpp |
index b0763a3c5979de59ebb8ae4d41ef35eb4a41290a..f9b0c7ac25129561129228a3c41053fb8df26839 100644 |
--- a/src/pdf/SkPDFTypes.cpp |
+++ b/src/pdf/SkPDFTypes.cpp |
@@ -19,33 +19,7 @@ |
/////////////////////////////////////////////////////////////////////////////// |
-void SkPDFObject::getResources(const SkTSet<SkPDFObject*>& knownResourceObjects, |
- SkTSet<SkPDFObject*>* newResourceObjects) {} |
- |
-void SkPDFObject::AddResourceHelper(SkPDFObject* resource, |
- SkTDArray<SkPDFObject*>* list) { |
- list->push(resource); |
- resource->ref(); |
-} |
- |
-void SkPDFObject::GetResourcesHelper( |
- const SkTDArray<SkPDFObject*>* resources, |
- const SkTSet<SkPDFObject*>& knownResourceObjects, |
- SkTSet<SkPDFObject*>* newResourceObjects) { |
- if (resources->count()) { |
- newResourceObjects->setReserve( |
- newResourceObjects->count() + resources->count()); |
- for (int i = 0; i < resources->count(); i++) { |
- if (!knownResourceObjects.contains((*resources)[i]) && |
- !newResourceObjects->contains((*resources)[i])) { |
- newResourceObjects->add((*resources)[i]); |
- (*resources)[i]->ref(); |
- (*resources)[i]->getResources(knownResourceObjects, |
- newResourceObjects); |
- } |
- } |
- } |
-} |
+void SkPDFObject::addResources(SkPDFObjectSet*, SkPDFCatalog*) {} |
//////////////////////////////////////////////////////////////////////////////// |
@@ -60,6 +34,15 @@ void SkPDFObjRef::emitObject(SkWStream* stream, SkPDFCatalog* catalog) { |
stream->writeText(" R"); |
} |
+void SkPDFObjRef::addResources(SkPDFObjectSet* resourceSet, |
+ SkPDFCatalog* catalog) { |
+ SkPDFObject* obj = catalog->getSubstituteObject(fObj); |
+ SkASSERT(obj); |
+ if (resourceSet->add(obj)) { |
+ obj->addResources(resourceSet, catalog); |
+ } |
+} |
+ |
//////////////////////////////////////////////////////////////////////////////// |
SkPDFInt::SkPDFInt(int32_t value) : fValue(value) {} |
@@ -277,6 +260,14 @@ void SkPDFArray::emitObject(SkWStream* stream, SkPDFCatalog* catalog) { |
stream->writeText("]"); |
} |
+void SkPDFArray::addResources(SkPDFObjectSet* resourceSet, |
+ SkPDFCatalog* catalog) { |
+ for (int i = 0; i < fValue.count(); i++) { |
+ catalog->getSubstituteObject(fValue[i]) |
+ ->addResources(resourceSet, catalog); |
+ } |
+} |
+ |
void SkPDFArray::reserve(int length) { |
SkASSERT(length <= kMaxLen); |
fValue.setReserve(length); |
@@ -347,6 +338,17 @@ void SkPDFDict::emitObject(SkWStream* stream, SkPDFCatalog* catalog) { |
stream->writeText(">>"); |
} |
+void SkPDFDict::addResources(SkPDFObjectSet* resourceSet, |
+ SkPDFCatalog* catalog) { |
+ for (int i = 0; i < fValue.count(); i++) { |
+ SkASSERT(fValue[i].key); |
+ SkASSERT(fValue[i].value); |
+ fValue[i].key->addResources(resourceSet, catalog); |
+ catalog->getSubstituteObject(fValue[i].value) |
+ ->addResources(resourceSet, catalog); |
+ } |
+} |
+ |
SkPDFObject* SkPDFDict::append(SkPDFName* key, SkPDFObject* value) { |
SkASSERT(key); |
SkASSERT(value); |