Index: src/pdf/SkPDFTypes.cpp |
diff --git a/src/pdf/SkPDFTypes.cpp b/src/pdf/SkPDFTypes.cpp |
index ed02d2bd12daf658bcd5c5bc7daaefa69dfbb79b..b10ab3d3db11078128cfd8dc9a58586da5ae334b 100644 |
--- a/src/pdf/SkPDFTypes.cpp |
+++ b/src/pdf/SkPDFTypes.cpp |
@@ -499,3 +499,49 @@ SkPDFName* SkPDFDict::Iter::next(SkPDFObject** value) { |
*value = NULL; |
return NULL; |
} |
+ |
+/////////////////////////////////////////////////////////////////////////////// |
+SkPDFObject* SkPDFResourceDict::insertResource( |
+ SkPDFName* type, SkPDFName* key, SkPDFObject* value) { |
+ SkPDFDict* typeDict = getResourceTypeDict(type); |
+ typeDict->insert(key, value); |
+ return value; |
+} |
+ |
+SkPDFObject* SkPDFResourceDict::insertResource( |
+ const char type[], const char key[], SkPDFObject* value) { |
+ return insertResource(new SkPDFName(type), new SkPDFName(key), value); |
+} |
+ |
+SkPDFObject* SkPDFResourceDict::insertResourceAsRef( |
+ const char type[], const char key[], SkPDFObject* value) { |
+ SkAutoTUnref<SkPDFObjRef> ref( new SkPDFObjRef(value)); |
+ insertResource(new SkPDFName(type), new SkPDFName(key), ref); |
+ fResources.add(value); |
+ |
+ return value; |
+} |
+ |
+void SkPDFResourceDict::getResources( |
+ const SkTSet<SkPDFObject*>& knownResourceObjects, |
+ SkTSet<SkPDFObject*>* newResourceObjects) { |
+ GetResourcesHelper(&fResources.toArray(), |
+ knownResourceObjects, |
+ newResourceObjects); |
+} |
+ |
+SkPDFDict* SkPDFResourceDict::getResourceTypeDict(SkPDFName* type) { |
+ for (int i = 0; i < fTypes.count(); i++) { |
+ if (*(fTypes[i].key) == *type) { |
+ return fTypes[i].value; |
+ } |
+ } |
+ |
+ // If not found, create a new record. |
+ struct DictRec* newEntry = fTypes.append(); |
+ newEntry->key = type; |
+ SkAutoTUnref<SkPDFDict> newDict(new SkPDFDict()); |
+ newEntry->value = newDict; |
+ insert(type, newDict); // ref counting handled in SkPDFDict::insert |
+ return newDict.get(); |
+} |