| Index: src/pdf/SkPDFDevice.cpp
|
| diff --git a/src/pdf/SkPDFDevice.cpp b/src/pdf/SkPDFDevice.cpp
|
| index 315c84317d72c42abc3da60b7e388d463b3a9c22..d102f0e977703f7ff714d9496c10d2844eacd12d 100644
|
| --- a/src/pdf/SkPDFDevice.cpp
|
| +++ b/src/pdf/SkPDFDevice.cpp
|
| @@ -11,7 +11,6 @@
|
| #include "SkColor.h"
|
| #include "SkColorFilter.h"
|
| #include "SkClipStack.h"
|
| -#include "SkData.h"
|
| #include "SkDraw.h"
|
| #include "SkGlyphCache.h"
|
| #include "SkPaint.h"
|
| @@ -748,9 +747,6 @@ void SkPDFDevice::cleanUp(bool clearFontUsage) {
|
| fXObjectResources.unrefAll();
|
| fFontResources.unrefAll();
|
| fShaderResources.unrefAll();
|
| - fLinkToURLs.deleteAll();
|
| - fLinkToDestinations.deleteAll();
|
| - fNamedDestinations.deleteAll();
|
|
|
| if (clearFontUsage) {
|
| fFontGlyphUsage->reset();
|
| @@ -1420,22 +1416,6 @@ void SkPDFDevice::drawVertices(const SkDraw& d, SkCanvas::VertexMode,
|
| // TODO: implement drawVertices
|
| }
|
|
|
| -struct RectWithData {
|
| - SkRect rect;
|
| - SkAutoTUnref<const SkData> data;
|
| -
|
| - RectWithData(const SkRect& rect, const SkData* data)
|
| - : rect(rect), data(SkRef(data)) {}
|
| -};
|
| -
|
| -struct NamedDestination {
|
| - SkAutoTUnref<const SkData> nameData;
|
| - SkPoint point;
|
| -
|
| - NamedDestination(const SkData* nameData, const SkPoint& point)
|
| - : nameData(SkRef(nameData)), point(point) {}
|
| -};
|
| -
|
| void SkPDFDevice::drawDevice(const SkDraw& d, SkBaseDevice* device,
|
| int x, int y, const SkPaint& paint) {
|
| // our onCreateCompatibleDevice() always creates SkPDFDevice subclasses.
|
| @@ -1443,17 +1423,17 @@ void SkPDFDevice::drawDevice(const SkDraw& d, SkBaseDevice* device,
|
|
|
| SkScalar scalarX = SkIntToScalar(x);
|
| SkScalar scalarY = SkIntToScalar(y);
|
| - for (RectWithData* link : pdfDevice->fLinkToURLs) {
|
| - fLinkToURLs.push(new RectWithData(
|
| - link->rect.makeOffset(scalarX, scalarY), link->data));
|
| + for (const RectWithData& l : pdfDevice->fLinkToURLs) {
|
| + SkRect r = l.rect.makeOffset(scalarX, scalarY);
|
| + fLinkToURLs.emplace_back(r, l.data);
|
| }
|
| - for (RectWithData* link : pdfDevice->fLinkToDestinations) {
|
| - fLinkToDestinations.push(new RectWithData(
|
| - link->rect.makeOffset(scalarX, scalarY), link->data));
|
| + for (const RectWithData& l : pdfDevice->fLinkToDestinations) {
|
| + SkRect r = l.rect.makeOffset(scalarX, scalarY);
|
| + fLinkToDestinations.emplace_back(r, l.data);
|
| }
|
| - for (NamedDestination* d : pdfDevice->fNamedDestinations) {
|
| - fNamedDestinations.push(new NamedDestination(
|
| - d->nameData, d->point + SkPoint::Make(scalarX, scalarY)));
|
| + for (const NamedDestination& d : pdfDevice->fNamedDestinations) {
|
| + SkPoint p = d.point + SkPoint::Make(scalarX, scalarY);
|
| + fNamedDestinations.emplace_back(d.nameData, p);
|
| }
|
|
|
| if (pdfDevice->isContentEmpty()) {
|
| @@ -1693,7 +1673,7 @@ bool SkPDFDevice::handlePointAnnotation(const SkPoint* points, size_t count,
|
| for (size_t i = 0; i < count; i++) {
|
| SkPoint transformedPoint;
|
| matrix.mapXY(points[i].x(), points[i].y(), &transformedPoint);
|
| - fNamedDestinations.push(new NamedDestination(nameData, transformedPoint));
|
| + fNamedDestinations.emplace_back(nameData, transformedPoint);
|
| }
|
| return true;
|
| }
|
| @@ -1715,7 +1695,7 @@ bool SkPDFDevice::handlePathAnnotation(const SkPath& path,
|
| SkData* urlData = annotation->find(SkAnnotationKeys::URL_Key());
|
| if (urlData) {
|
| if (!transformedRect.isEmpty()) {
|
| - fLinkToURLs.push(new RectWithData(transformedRect, urlData));
|
| + fLinkToURLs.emplace_back(transformedRect, urlData);
|
| }
|
| return true;
|
| }
|
| @@ -1724,7 +1704,7 @@ bool SkPDFDevice::handlePathAnnotation(const SkPath& path,
|
| annotation->find(SkAnnotationKeys::Link_Named_Dest_Key());
|
| if (linkToDestination) {
|
| if (!transformedRect.isEmpty()) {
|
| - fLinkToDestinations.push(new RectWithData(transformedRect, linkToDestination));
|
| + fLinkToDestinations.emplace_back(transformedRect, linkToDestination);
|
| }
|
| return true;
|
| }
|
| @@ -1734,29 +1714,29 @@ bool SkPDFDevice::handlePathAnnotation(const SkPath& path,
|
|
|
| void SkPDFDevice::appendAnnotations(SkPDFArray* array) const {
|
| array->reserve(fLinkToURLs.count() + fLinkToDestinations.count());
|
| - for (RectWithData* rectWithURL : fLinkToURLs) {
|
| + for (const RectWithData& rectWithURL : fLinkToURLs) {
|
| SkRect r;
|
| - fInitialTransform.mapRect(&r, rectWithURL->rect);
|
| - array->appendObject(create_link_to_url(rectWithURL->data, r));
|
| + fInitialTransform.mapRect(&r, rectWithURL.rect);
|
| + array->appendObject(create_link_to_url(rectWithURL.data, r));
|
| }
|
| - for (RectWithData* linkToDestination : fLinkToDestinations) {
|
| + for (const RectWithData& linkToDestination : fLinkToDestinations) {
|
| SkRect r;
|
| - fInitialTransform.mapRect(&r, linkToDestination->rect);
|
| - array->appendObject(create_link_named_dest(linkToDestination->data, r));
|
| + fInitialTransform.mapRect(&r, linkToDestination.rect);
|
| + array->appendObject(create_link_named_dest(linkToDestination.data, r));
|
| }
|
| }
|
|
|
| void SkPDFDevice::appendDestinations(SkPDFDict* dict, SkPDFObject* page) const {
|
| - for (NamedDestination* dest : fNamedDestinations) {
|
| + for (const NamedDestination& dest : fNamedDestinations) {
|
| SkAutoTUnref<SkPDFArray> pdfDest(new SkPDFArray);
|
| pdfDest->reserve(5);
|
| pdfDest->appendObjRef(SkRef(page));
|
| pdfDest->appendName("XYZ");
|
| - SkPoint p = fInitialTransform.mapXY(dest->point.x(), dest->point.y());
|
| + SkPoint p = fInitialTransform.mapXY(dest.point.x(), dest.point.y());
|
| pdfDest->appendScalar(p.x());
|
| pdfDest->appendScalar(p.y());
|
| pdfDest->appendInt(0); // Leave zoom unchanged
|
| - SkString name(static_cast<const char*>(dest->nameData->data()));
|
| + SkString name(static_cast<const char*>(dest.nameData->data()));
|
| dict->insertObject(name, pdfDest.detach());
|
| }
|
| }
|
|
|