| Index: src/pdf/SkPDFFormXObject.cpp
|
| diff --git a/src/pdf/SkPDFFormXObject.cpp b/src/pdf/SkPDFFormXObject.cpp
|
| index ba49df8ea8cd0f8c8bc249d0f9c3ae1475f9e884..1ab391c3460a78f27bba186af11a2f3529e07382 100644
|
| --- a/src/pdf/SkPDFFormXObject.cpp
|
| +++ b/src/pdf/SkPDFFormXObject.cpp
|
| @@ -8,69 +8,26 @@
|
|
|
| #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
|
| // isolated blending. Do this conditionally if that changes.
|
| + // TODO(halcanary): Is this comment obsolete, since we use it for
|
| + // alpha masks?
|
| 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() {}
|
|
|