begin to skiafy PDF headers : removing use of SkRefPtr

Review URL: https://codereview.appspot.com/6526050

git-svn-id: http://skia.googlecode.com/svn/trunk@5596 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
reed@google.com 2012-09-19 17:05:55 +00:00
parent 9ec51dd605
commit 2a006c1127
4 changed files with 20 additions and 22 deletions

View File

@ -139,13 +139,14 @@ public:
*/
SK_API const SkTDArray<SkPDFFont*>& getFontResources() const;
/** Returns the media box for this device.
/** Returns a copy of the media box for this device. The caller is required
* to unref() this when it is finished.
*/
SK_API SkRefPtr<SkPDFArray> getMediaBox() const;
SK_API SkPDFArray* copyMediaBox() const;
/** Get the annotations from this page.
/** Get the annotations from this page, or NULL if there are none.
*/
SK_API SkRefPtr<SkPDFArray> getAnnotations() const;
SK_API SkPDFArray* getAnnotations() const { return fAnnotations; }
/** Returns a SkStream with the page contents. The caller is responsible
for a reference to the returned value.
@ -185,7 +186,7 @@ private:
SkMatrix fInitialTransform;
SkClipStack fExistingClipStack;
SkRegion fExistingClipRegion;
SkRefPtr<SkPDFArray> fAnnotations;
SkPDFArray* fAnnotations;
SkRefPtr<SkPDFDict> fResourceDict;
SkTDArray<SkPDFGraphicState*> fGraphicStateResources;

View File

@ -546,6 +546,7 @@ SkPDFDevice::~SkPDFDevice() {
}
void SkPDFDevice::init() {
fAnnotations = NULL;
fResourceDict = NULL;
fContentEntries.reset();
fLastContentEntry = NULL;
@ -562,6 +563,8 @@ void SkPDFDevice::cleanUp(bool clearFontUsage) {
fXObjectResources.unrefAll();
fFontResources.unrefAll();
fShaderResources.unrefAll();
SkSafeUnref(fAnnotations);
if (clearFontUsage) {
fFontGlyphUsage->reset();
}
@ -1103,12 +1106,11 @@ const SkTDArray<SkPDFFont*>& SkPDFDevice::getFontResources() const {
return fFontResources;
}
SkRefPtr<SkPDFArray> SkPDFDevice::getMediaBox() const {
SkRefPtr<SkPDFInt> zero = new SkPDFInt(0);
zero->unref(); // SkRefPtr and new both took a reference.
SkPDFArray* SkPDFDevice::copyMediaBox() const {
// should this be a singleton?
SkAutoTUnref<SkPDFInt> zero(SkNEW_ARGS(SkPDFInt, (0)));
SkRefPtr<SkPDFArray> mediaBox = new SkPDFArray();
mediaBox->unref(); // SkRefPtr and new both took a reference.
SkPDFArray* mediaBox = SkNEW(SkPDFArray);
mediaBox->reserve(4);
mediaBox->append(zero.get());
mediaBox->append(zero.get());
@ -1117,10 +1119,6 @@ SkRefPtr<SkPDFArray> SkPDFDevice::getMediaBox() const {
return mediaBox;
}
SkRefPtr<SkPDFArray> SkPDFDevice::getAnnotations() const {
return SkRefPtr<SkPDFArray>(fAnnotations);
}
SkStream* SkPDFDevice::content() const {
SkMemoryStream* result = new SkMemoryStream;
result->setData(this->copyContentToData())->unref();
@ -1196,9 +1194,8 @@ bool SkPDFDevice::handleAnnotations(const SkRect& r, const SkMatrix& matrix,
SkRect translatedRect;
transform.mapRect(&translatedRect, r);
if (fAnnotations.get() == NULL) {
fAnnotations = new SkPDFArray;
fAnnotations->unref(); // Both new and SkRefPtr took a reference.
if (NULL == fAnnotations) {
fAnnotations = SkNEW(SkPDFArray);
}
SkAutoTUnref<SkPDFDict> annotation(new SkPDFDict("Annot"));
annotation->insertName("Subtype", "Link");

View File

@ -28,7 +28,7 @@ SkPDFFormXObject::SkPDFFormXObject(SkPDFDevice* device) {
insertName("Type", "XObject");
insertName("Subtype", "Form");
insert("BBox", device->getMediaBox().get());
SkSafeUnref(this->insert("BBox", device->copyMediaBox()));
insert("Resources", device->getResourceDict());
// We invert the initial transform and apply that to the xobject so that

View File

@ -23,12 +23,12 @@ void SkPDFPage::finalizePage(SkPDFCatalog* catalog, bool firstPage,
SkTDArray<SkPDFObject*>* resourceObjects) {
if (fContentStream.get() == NULL) {
insert("Resources", fDevice->getResourceDict());
insert("MediaBox", fDevice->getMediaBox().get());
SkSafeUnref(this->insert("MediaBox", fDevice->copyMediaBox()));
if (!SkToBool(catalog->getDocumentFlags() &
SkPDFDocument::kNoLinks_Flags)) {
SkRefPtr<SkPDFArray> annots = fDevice->getAnnotations();
if (annots.get() && annots->size() > 0) {
insert("Annots", annots.get());
SkPDFArray* annots = fDevice->getAnnotations();
if (annots && annots->size() > 0) {
insert("Annots", annots);
}
}