| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright 2011 Google Inc. | 2  * Copyright 2011 Google Inc. | 
| 3  * | 3  * | 
| 4  * Use of this source code is governed by a BSD-style license that can be | 4  * Use of this source code is governed by a BSD-style license that can be | 
| 5  * found in the LICENSE file. | 5  * found in the LICENSE file. | 
| 6  */ | 6  */ | 
| 7 | 7 | 
| 8 #include "SkPDFDevice.h" | 8 #include "SkPDFDevice.h" | 
| 9 | 9 | 
| 10 #include "SkAnnotationKeys.h" | 10 #include "SkAnnotationKeys.h" | 
| (...skipping 862 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 873                 SkPDFUtils::ClosePath(&content.entry()->fContent); | 873                 SkPDFUtils::ClosePath(&content.entry()->fContent); | 
| 874                 SkPDFUtils::StrokePath(&content.entry()->fContent); | 874                 SkPDFUtils::StrokePath(&content.entry()->fContent); | 
| 875             } | 875             } | 
| 876             break; | 876             break; | 
| 877         default: | 877         default: | 
| 878             SkASSERT(false); | 878             SkASSERT(false); | 
| 879     } | 879     } | 
| 880 } | 880 } | 
| 881 | 881 | 
| 882 static SkPDFDict* create_link_annotation(const SkRect& translatedRect) { | 882 static SkPDFDict* create_link_annotation(const SkRect& translatedRect) { | 
| 883     sk_sp<SkPDFDict> annotation(new SkPDFDict("Annot")); | 883     auto annotation = sk_make_sp<SkPDFDict>("Annot"); | 
| 884     annotation->insertName("Subtype", "Link"); | 884     annotation->insertName("Subtype", "Link"); | 
| 885 | 885 | 
| 886     sk_sp<SkPDFArray> border(new SkPDFArray); | 886     auto border = sk_make_sp<SkPDFArray>(); | 
| 887     border->reserve(3); | 887     border->reserve(3); | 
| 888     border->appendInt(0);  // Horizontal corner radius. | 888     border->appendInt(0);  // Horizontal corner radius. | 
| 889     border->appendInt(0);  // Vertical corner radius. | 889     border->appendInt(0);  // Vertical corner radius. | 
| 890     border->appendInt(0);  // Width, 0 = no border. | 890     border->appendInt(0);  // Width, 0 = no border. | 
| 891     annotation->insertObject("Border", border.release()); | 891     annotation->insertObject("Border", border.release()); | 
| 892 | 892 | 
| 893     sk_sp<SkPDFArray> rect(new SkPDFArray); | 893     auto rect = sk_make_sp<SkPDFArray>(); | 
| 894     rect->reserve(4); | 894     rect->reserve(4); | 
| 895     rect->appendScalar(translatedRect.fLeft); | 895     rect->appendScalar(translatedRect.fLeft); | 
| 896     rect->appendScalar(translatedRect.fTop); | 896     rect->appendScalar(translatedRect.fTop); | 
| 897     rect->appendScalar(translatedRect.fRight); | 897     rect->appendScalar(translatedRect.fRight); | 
| 898     rect->appendScalar(translatedRect.fBottom); | 898     rect->appendScalar(translatedRect.fBottom); | 
| 899     annotation->insertObject("Rect", rect.release()); | 899     annotation->insertObject("Rect", rect.release()); | 
| 900 | 900 | 
| 901     return annotation.release(); | 901     return annotation.release(); | 
| 902 } | 902 } | 
| 903 | 903 | 
| 904 static SkPDFDict* create_link_to_url(const SkData* urlData, const SkRect& r) { | 904 static SkPDFDict* create_link_to_url(const SkData* urlData, const SkRect& r) { | 
| 905     sk_sp<SkPDFDict> annotation(create_link_annotation(r)); | 905     sk_sp<SkPDFDict> annotation(create_link_annotation(r)); | 
| 906 | 906 | 
| 907     SkString url(static_cast<const char *>(urlData->data()), | 907     SkString url(static_cast<const char *>(urlData->data()), | 
| 908                  urlData->size() - 1); | 908                  urlData->size() - 1); | 
| 909     sk_sp<SkPDFDict> action(new SkPDFDict("Action")); | 909     auto action = sk_make_sp<SkPDFDict>("Action"); | 
| 910     action->insertName("S", "URI"); | 910     action->insertName("S", "URI"); | 
| 911     action->insertString("URI", url); | 911     action->insertString("URI", url); | 
| 912     annotation->insertObject("A", action.release()); | 912     annotation->insertObject("A", action.release()); | 
| 913     return annotation.release(); | 913     return annotation.release(); | 
| 914 } | 914 } | 
| 915 | 915 | 
| 916 static SkPDFDict* create_link_named_dest(const SkData* nameData, | 916 static SkPDFDict* create_link_named_dest(const SkData* nameData, | 
| 917                                          const SkRect& r) { | 917                                          const SkRect& r) { | 
| 918     sk_sp<SkPDFDict> annotation(create_link_annotation(r)); | 918     sk_sp<SkPDFDict> annotation(create_link_annotation(r)); | 
| 919     SkString name(static_cast<const char *>(nameData->data()), | 919     SkString name(static_cast<const char *>(nameData->data()), | 
| (...skipping 521 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1441         SkPath shape; | 1441         SkPath shape; | 
| 1442         shape.addRect(SkRect::MakeXYWH(SkIntToScalar(x), SkIntToScalar(y), | 1442         shape.addRect(SkRect::MakeXYWH(SkIntToScalar(x), SkIntToScalar(y), | 
| 1443                                        SkIntToScalar(device->width()), | 1443                                        SkIntToScalar(device->width()), | 
| 1444                                        SkIntToScalar(device->height()))); | 1444                                        SkIntToScalar(device->height()))); | 
| 1445         content.setShape(shape); | 1445         content.setShape(shape); | 
| 1446     } | 1446     } | 
| 1447     if (!content.needSource()) { | 1447     if (!content.needSource()) { | 
| 1448         return; | 1448         return; | 
| 1449     } | 1449     } | 
| 1450 | 1450 | 
| 1451     sk_sp<SkPDFFormXObject> xObject(new SkPDFFormXObject(pdfDevice)); | 1451     auto xObject = sk_make_sp<SkPDFFormXObject>(pdfDevice); | 
| 1452     SkPDFUtils::DrawFormXObject(this->addXObjectResource(xObject.get()), | 1452     SkPDFUtils::DrawFormXObject(this->addXObjectResource(xObject.get()), | 
| 1453                                 &content.entry()->fContent); | 1453                                 &content.entry()->fContent); | 
| 1454 | 1454 | 
| 1455     // Merge glyph sets from the drawn device. | 1455     // Merge glyph sets from the drawn device. | 
| 1456     fFontGlyphUsage->merge(pdfDevice->getFontGlyphUsage()); | 1456     fFontGlyphUsage->merge(pdfDevice->getFontGlyphUsage()); | 
| 1457 } | 1457 } | 
| 1458 | 1458 | 
| 1459 SkImageInfo SkPDFDevice::imageInfo() const { | 1459 SkImageInfo SkPDFDevice::imageInfo() const { | 
| 1460     return fLegacyBitmap.info(); | 1460     return fLegacyBitmap.info(); | 
| 1461 } | 1461 } | 
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1520             &fonts); | 1520             &fonts); | 
| 1521 } | 1521 } | 
| 1522 | 1522 | 
| 1523 const SkTDArray<SkPDFFont*>& SkPDFDevice::getFontResources() const { | 1523 const SkTDArray<SkPDFFont*>& SkPDFDevice::getFontResources() const { | 
| 1524     return fFontResources; | 1524     return fFontResources; | 
| 1525 } | 1525 } | 
| 1526 | 1526 | 
| 1527 SkPDFArray* SkPDFDevice::copyMediaBox() const { | 1527 SkPDFArray* SkPDFDevice::copyMediaBox() const { | 
| 1528     // should this be a singleton? | 1528     // should this be a singleton? | 
| 1529 | 1529 | 
| 1530     sk_sp<SkPDFArray> mediaBox(new SkPDFArray); | 1530     auto mediaBox = sk_make_sp<SkPDFArray>(); | 
| 1531     mediaBox->reserve(4); | 1531     mediaBox->reserve(4); | 
| 1532     mediaBox->appendInt(0); | 1532     mediaBox->appendInt(0); | 
| 1533     mediaBox->appendInt(0); | 1533     mediaBox->appendInt(0); | 
| 1534     mediaBox->appendInt(fPageSize.fWidth); | 1534     mediaBox->appendInt(fPageSize.fWidth); | 
| 1535     mediaBox->appendInt(fPageSize.fHeight); | 1535     mediaBox->appendInt(fPageSize.fHeight); | 
| 1536     return mediaBox.release(); | 1536     return mediaBox.release(); | 
| 1537 } | 1537 } | 
| 1538 | 1538 | 
| 1539 SkStreamAsset* SkPDFDevice::content() const { | 1539 SkStreamAsset* SkPDFDevice::content() const { | 
| 1540     SkDynamicMemoryWStream buffer; | 1540     SkDynamicMemoryWStream buffer; | 
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1704     for (const RectWithData& linkToDestination : fLinkToDestinations) { | 1704     for (const RectWithData& linkToDestination : fLinkToDestinations) { | 
| 1705         SkRect r; | 1705         SkRect r; | 
| 1706         fInitialTransform.mapRect(&r, linkToDestination.rect); | 1706         fInitialTransform.mapRect(&r, linkToDestination.rect); | 
| 1707         array->appendObject( | 1707         array->appendObject( | 
| 1708                 create_link_named_dest(linkToDestination.data.get(), r)); | 1708                 create_link_named_dest(linkToDestination.data.get(), r)); | 
| 1709     } | 1709     } | 
| 1710 } | 1710 } | 
| 1711 | 1711 | 
| 1712 void SkPDFDevice::appendDestinations(SkPDFDict* dict, SkPDFObject* page) const { | 1712 void SkPDFDevice::appendDestinations(SkPDFDict* dict, SkPDFObject* page) const { | 
| 1713     for (const NamedDestination& dest : fNamedDestinations) { | 1713     for (const NamedDestination& dest : fNamedDestinations) { | 
| 1714         sk_sp<SkPDFArray> pdfDest(new SkPDFArray); | 1714         auto pdfDest = sk_make_sp<SkPDFArray>(); | 
| 1715         pdfDest->reserve(5); | 1715         pdfDest->reserve(5); | 
| 1716         pdfDest->appendObjRef(SkRef(page)); | 1716         pdfDest->appendObjRef(SkRef(page)); | 
| 1717         pdfDest->appendName("XYZ"); | 1717         pdfDest->appendName("XYZ"); | 
| 1718         SkPoint p = fInitialTransform.mapXY(dest.point.x(), dest.point.y()); | 1718         SkPoint p = fInitialTransform.mapXY(dest.point.x(), dest.point.y()); | 
| 1719         pdfDest->appendScalar(p.x()); | 1719         pdfDest->appendScalar(p.x()); | 
| 1720         pdfDest->appendScalar(p.y()); | 1720         pdfDest->appendScalar(p.y()); | 
| 1721         pdfDest->appendInt(0);  // Leave zoom unchanged | 1721         pdfDest->appendInt(0);  // Leave zoom unchanged | 
| 1722         SkString name(static_cast<const char*>(dest.nameData->data())); | 1722         SkString name(static_cast<const char*>(dest.nameData->data())); | 
| 1723         dict->insertObject(name, pdfDest.release()); | 1723         dict->insertObject(name, pdfDest.release()); | 
| 1724     } | 1724     } | 
| (...skipping 603 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2328         pdfimage.reset(SkPDFCreateBitmapObject( | 2328         pdfimage.reset(SkPDFCreateBitmapObject( | 
| 2329                                image, fCanon->getPixelSerializer())); | 2329                                image, fCanon->getPixelSerializer())); | 
| 2330         if (!pdfimage) { | 2330         if (!pdfimage) { | 
| 2331             return; | 2331             return; | 
| 2332         } | 2332         } | 
| 2333         fCanon->addPDFBitmap(image->uniqueID(), pdfimage.get()); | 2333         fCanon->addPDFBitmap(image->uniqueID(), pdfimage.get()); | 
| 2334     } | 2334     } | 
| 2335     SkPDFUtils::DrawFormXObject(this->addXObjectResource(pdfimage.get()), | 2335     SkPDFUtils::DrawFormXObject(this->addXObjectResource(pdfimage.get()), | 
| 2336                                 &content.entry()->fContent); | 2336                                 &content.entry()->fContent); | 
| 2337 } | 2337 } | 
| OLD | NEW | 
|---|