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

Unified Diff: src/pdf/SkPDFDevice.cpp

Issue 2185803003: SkPdf: SkPDFFormXObject de-class-ified. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: 2016-07-27 (Wednesday) 15:31:16 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
Index: src/pdf/SkPDFDevice.cpp
diff --git a/src/pdf/SkPDFDevice.cpp b/src/pdf/SkPDFDevice.cpp
index 4181defc5ddc62a47542ba5ab9ca88490a5644f2..80bc457ce1fadab3acabe0d3c3e1216a3b4de62d 100644
--- a/src/pdf/SkPDFDevice.cpp
+++ b/src/pdf/SkPDFDevice.cpp
@@ -627,7 +627,7 @@ private:
SkPDFDevice* fDevice;
SkPDFDevice::ContentEntry* fContentEntry;
SkXfermode::Mode fXfermode;
- SkPDFFormXObject* fDstFormXObject;
+ SkPDFObject* fDstFormXObject;
SkPath fShape;
void init(const SkClipStack* clipStack, const SkRegion& clipRegion,
@@ -1394,7 +1394,7 @@ void SkPDFDevice::drawDevice(const SkDraw& d, SkBaseDevice* device,
return;
}
- auto xObject = sk_make_sp<SkPDFFormXObject>(pdfDevice);
+ auto xObject = pdfDevice->makeFormXObjectFromDevice();
SkPDFUtils::DrawFormXObject(this->addXObjectResource(xObject.get()),
&content.entry()->fContent);
}
@@ -1610,8 +1610,11 @@ void SkPDFDevice::appendDestinations(SkPDFDict* dict, SkPDFObject* page) const {
}
}
-SkPDFFormXObject* SkPDFDevice::createFormXObjectFromDevice() {
- SkPDFFormXObject* xobject = new SkPDFFormXObject(this);
+sk_sp<SkPDFObject> SkPDFDevice::makeFormXObjectFromDevice() {
+ auto xobject = SkPDFMakeFormXObject(this->content(),
+ this->copyMediaBox(),
+ this->makeResourceDict(),
+ nullptr);
tomhudson 2016/07/27 20:30:58 I don't like this because I have to read both forw
hal.canary 2016/07/27 20:41:11 Done.
// We always draw the form xobjects that we create back into the device, so
// we simply preserve the font usage instead of pulling it out and merging
// it back in later.
@@ -1621,7 +1624,7 @@ SkPDFFormXObject* SkPDFDevice::createFormXObjectFromDevice() {
}
void SkPDFDevice::drawFormXObjectWithMask(int xObjectIndex,
- SkPDFFormXObject* mask,
+ SkPDFObject* mask,
const SkClipStack* clipStack,
const SkRegion& clipRegion,
SkXfermode::Mode mode,
@@ -1658,7 +1661,7 @@ SkPDFDevice::ContentEntry* SkPDFDevice::setUpContentEntry(const SkClipStack* cli
const SkMatrix& matrix,
const SkPaint& paint,
bool hasText,
- SkPDFFormXObject** dst) {
+ SkPDFObject** dst) {
*dst = nullptr;
if (clipRegion.isEmpty()) {
return nullptr;
@@ -1699,7 +1702,8 @@ SkPDFDevice::ContentEntry* SkPDFDevice::setUpContentEntry(const SkClipStack* cli
xfermode == SkXfermode::kDstATop_Mode ||
xfermode == SkXfermode::kModulate_Mode) {
if (!isContentEmpty()) {
- *dst = createFormXObjectFromDevice();
+ // TODO(halcanary): make this safer.
+ *dst = this->makeFormXObjectFromDevice().release();
tomhudson 2016/07/27 20:30:58 Note TODO
hal.canary 2016/07/27 20:41:11 Acknowledged.
SkASSERT(isContentEmpty());
} else if (xfermode != SkXfermode::kSrc_Mode &&
xfermode != SkXfermode::kSrcOut_Mode) {
@@ -1730,7 +1734,7 @@ SkPDFDevice::ContentEntry* SkPDFDevice::setUpContentEntry(const SkClipStack* cli
}
void SkPDFDevice::finishContentEntry(SkXfermode::Mode xfermode,
- SkPDFFormXObject* dst,
+ SkPDFObject* dst,
SkPath* shape) {
if (xfermode != SkXfermode::kClear_Mode &&
xfermode != SkXfermode::kSrc_Mode &&
@@ -1775,7 +1779,7 @@ void SkPDFDevice::finishContentEntry(SkXfermode::Mode xfermode,
identity.reset();
SkPaint stockPaint;
- sk_sp<SkPDFFormXObject> srcFormXObject;
+ sk_sp<SkPDFObject> srcFormXObject;
if (isContentEmpty()) {
// If nothing was drawn and there's no shape, then the draw was a
// no-op, but dst needs to be restored for that to be true.
@@ -1795,7 +1799,7 @@ void SkPDFDevice::finishContentEntry(SkXfermode::Mode xfermode,
}
} else {
SkASSERT(fContentEntries.count() == 1);
- srcFormXObject.reset(createFormXObjectFromDevice());
+ srcFormXObject = this->makeFormXObjectFromDevice();
}
// TODO(vandebo) srcFormXObject may contain alpha, but here we want it
@@ -1809,8 +1813,8 @@ void SkPDFDevice::finishContentEntry(SkXfermode::Mode xfermode,
&fExistingClipStack, fExistingClipRegion,
SkXfermode::kSrcOver_Mode, true);
} else {
- sk_sp<SkPDFFormXObject> dstMaskStorage;
- SkPDFFormXObject* dstMask = srcFormXObject.get();
+ sk_sp<SkPDFObject> dstMaskStorage;
+ SkPDFObject* dstMask = srcFormXObject.get();
if (shape != nullptr) {
// Draw shape into a form-xobject.
SkRasterClip rc(clipRegion);
@@ -1823,7 +1827,7 @@ void SkPDFDevice::finishContentEntry(SkXfermode::Mode xfermode,
filledPaint.setStyle(SkPaint::kFill_Style);
this->drawPath(d, *shape, filledPaint, nullptr, true);
- dstMaskStorage.reset(createFormXObjectFromDevice());
+ dstMaskStorage = this->makeFormXObjectFromDevice();
dstMask = dstMaskStorage.get();
}
drawFormXObjectWithMask(addXObjectResource(dst), dstMask,
« no previous file with comments | « src/pdf/SkPDFDevice.h ('k') | src/pdf/SkPDFFormXObject.h » ('j') | src/pdf/SkPDFFormXObject.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698