Chromium Code Reviews| Index: src/pdf/SkPDFFormXObject.cpp |
| diff --git a/src/pdf/SkPDFFormXObject.cpp b/src/pdf/SkPDFFormXObject.cpp |
| index ba49df8ea8cd0f8c8bc249d0f9c3ae1475f9e884..76e9e12fa26b8b61c68fde753f3989ddbdf15035 100644 |
| --- a/src/pdf/SkPDFFormXObject.cpp |
| +++ b/src/pdf/SkPDFFormXObject.cpp |
| @@ -8,69 +8,24 @@ |
| #include "SkPDFFormXObject.h" |
| -#include "SkMatrix.h" |
| -#include "SkPDFDevice.h" |
| -#include "SkPDFUtils.h" |
| -#include "SkStream.h" |
| -#include "SkTypes.h" |
| - |
| -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 |
| - // resources). |
| - auto resourceDict = device->makeResourceDict(); |
| - |
| - this->setData(device->content()); |
| - |
| - sk_sp<SkPDFArray> bboxArray(device->copyMediaBox()); |
| - this->init(nullptr, resourceDict.get(), bboxArray.get()); |
| - |
| - // We invert the initial transform and apply that to the xobject so that |
| - // it doesn't get applied twice. We can't just undo it because it's |
| - // embedded in things like shaders and images. |
| - if (!device->initialTransform().isIdentity()) { |
| - SkMatrix inverse; |
| - if (!device->initialTransform().invert(&inverse)) { |
| - // The initial transform should be invertible. |
| - SkASSERT(false); |
| - inverse.reset(); |
| - } |
| - this->insertObject("Matrix", SkPDFUtils::MatrixToArray(inverse)); |
| - } |
| -} |
| - |
| -/** |
| - * Creates a FormXObject from a content stream and associated resources. |
| - */ |
| -SkPDFFormXObject::SkPDFFormXObject(std::unique_ptr<SkStreamAsset> content, |
| - SkRect bbox, |
| - SkPDFDict* resourceDict) { |
| - this->setData(std::move(content)); |
| - sk_sp<SkPDFArray> bboxArray(SkPDFUtils::RectToArray(bbox)); |
| - this->init("DeviceRGB", resourceDict, bboxArray.get()); |
| -} |
| - |
| -/** |
| - * Common initialization code. |
| - * Note that bbox is unreferenced here, so calling code does not need worry. |
| - */ |
| -void SkPDFFormXObject::init(const char* colorSpace, |
| - SkPDFDict* resourceDict, SkPDFArray* bbox) { |
| - this->insertName("Type", "XObject"); |
| - this->insertName("Subtype", "Form"); |
| - this->insertObject("Resources", sk_ref_sp(resourceDict)); |
| - this->insertObject("BBox", sk_ref_sp(bbox)); |
| - |
| - // Right now SkPDFFormXObject is only used for saveLayer, which implies |
| +sk_sp<SkPDFObject> SkPDFMakeFormXObject(std::unique_ptr<SkStreamAsset> content, |
| + sk_sp<SkPDFArray> mediaBox, |
| + sk_sp<SkPDFDict> resourceDict, |
| + const char* colorSpace) { |
| + auto form = sk_make_sp<SkPDFStream>(std::move(content)); |
| + form->insertName("Type", "XObject"); |
| + form->insertName("Subtype", "Form"); |
| + form->insertObject("Resources", std::move(resourceDict)); |
| + form->insertObject("BBox", std::move(mediaBox)); |
| + |
| + // Right now FormXObject is only used for saveLayer, which implies |
|
tomhudson
2016/07/27 20:30:58
Is this comment obsolete, since we use it for alph
hal.canary
2016/07/27 20:41:11
Good question. I don't know the answer and will n
|
| // isolated blending. Do this conditionally if that changes. |
| auto group = sk_make_sp<SkPDFDict>("Group"); |
| group->insertName("S", "Transparency"); |
| - |
| if (colorSpace != nullptr) { |
| group->insertName("CS", colorSpace); |
| } |
| group->insertBool("I", true); // Isolated. |
| - this->insertObject("Group", std::move(group)); |
| + form->insertObject("Group", std::move(group)); |
| + return form; |
| } |
| - |
| -SkPDFFormXObject::~SkPDFFormXObject() {} |