Chromium Code Reviews| Index: src/pdf/SkPDFFormXObject.cpp |
| diff --git a/src/pdf/SkPDFFormXObject.cpp b/src/pdf/SkPDFFormXObject.cpp |
| index 884e6db2e4a1535c20d6f1dd62e87e637eceb2c1..c309d5e85ca909f19d90928959d212aec16beab9 100644 |
| --- a/src/pdf/SkPDFFormXObject.cpp |
| +++ b/src/pdf/SkPDFFormXObject.cpp |
| @@ -16,6 +16,16 @@ |
| #include "SkStream.h" |
| #include "SkTypes.h" |
| +static SkPDFArray* rectToArray(SkRect rect) { |
|
vandebo (ex-Chrome)
2013/07/03 17:07:01
Put this in SkPDFUtil and use it in SkPDFDevice::c
ducky
2013/07/03 23:32:09
Done.
|
| + SkPDFArray* mediaBox = SkNEW(SkPDFArray); |
| + mediaBox->reserve(4); |
| + mediaBox->appendScalar(rect.left()); |
| + mediaBox->appendScalar(rect.top()); |
| + mediaBox->appendScalar(rect.right()); |
| + mediaBox->appendScalar(rect.bottom()); |
| + return mediaBox; |
| +} |
| + |
| SkPDFFormXObject::SkPDFFormXObject(SkPDFDevice* device) { |
| // We don't want to keep around device because we'd have two copies |
| // of content, so reference or copy everything we need (content and |
| @@ -52,6 +62,31 @@ SkPDFFormXObject::SkPDFFormXObject(SkPDFDevice* device) { |
| insert("Group", group.get()); |
| } |
| +/** |
| + * Creates a FormXObject from a content stream and associated resources. |
| + */ |
| +SkPDFFormXObject::SkPDFFormXObject(SkStream* content, |
| + SkPDFDict* resourceDict, |
| + SkTSet<SkPDFObject*>& resources, |
| + SkRect bbox) { |
| + setData(content); |
|
vandebo (ex-Chrome)
2013/07/03 17:07:01
This whole body can be shared with the other const
ducky
2013/07/03 23:32:09
Done.
|
| + resourceDict->ref(); |
|
vandebo (ex-Chrome)
2013/07/03 17:07:01
This should be next to where the reference is used
ducky
2013/07/03 23:32:09
Done.
|
| + |
| + insertName("Type", "XObject"); |
| + insertName("Subtype", "Form"); |
| + SkSafeUnref(this->insert("BBox", rectToArray(bbox))); |
| + insert("Resources", resourceDict); |
| + fResources = resources; |
| + |
| + // Right now SkPDFFormXObject is only used for saveLayer, which implies |
| + // isolated blending. Do this conditionally if that changes. |
| + SkAutoTUnref<SkPDFDict> group(new SkPDFDict("Group")); |
| + group->insertName("S", "Transparency"); |
| + group->insertName("CS", "DeviceRGB"); |
| + group->insert("I", new SkPDFBool(true))->unref(); // Isolated. |
| + insert("Group", group.get()); |
| +} |
| + |
| SkPDFFormXObject::~SkPDFFormXObject() { |
| fResources.unrefAll(); |
| } |