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, |