Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(935)

Unified Diff: src/pdf/SkPDFFormXObject.cpp

Issue 2185803003: SkPdf: SkPDFFormXObject de-class-ified. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: 2016-07-27 (Wednesday) 17:00:53 EDT Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/pdf/SkPDFFormXObject.h ('k') | src/pdf/SkPDFGraphicState.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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() {}
« no previous file with comments | « src/pdf/SkPDFFormXObject.h ('k') | src/pdf/SkPDFGraphicState.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698