| Index: src/pdf/SkPDFFont.cpp
|
| diff --git a/src/pdf/SkPDFFont.cpp b/src/pdf/SkPDFFont.cpp
|
| index f5fd410ad0dee11163479a8c516b8acc16cf9b92..8615db99ec03734aac370279f21e92adc2f4ce82 100644
|
| --- a/src/pdf/SkPDFFont.cpp
|
| +++ b/src/pdf/SkPDFFont.cpp
|
| @@ -297,35 +297,37 @@
|
| content->writeText(" d1\n");
|
| }
|
|
|
| -static sk_sp<SkPDFArray> makeFontBBox(SkIRect glyphBBox, uint16_t emSize) {
|
| - auto bbox = sk_make_sp<SkPDFArray>();
|
| +SkPDFArray* makeFontBBox(SkIRect glyphBBox, uint16_t emSize) {
|
| + SkPDFArray* bbox = new SkPDFArray;
|
| bbox->reserve(4);
|
| bbox->appendScalar(scaleFromFontUnits(glyphBBox.fLeft, emSize));
|
| bbox->appendScalar(scaleFromFontUnits(glyphBBox.fBottom, emSize));
|
| bbox->appendScalar(scaleFromFontUnits(glyphBBox.fRight, emSize));
|
| bbox->appendScalar(scaleFromFontUnits(glyphBBox.fTop, emSize));
|
| - return std::move(bbox);
|
| -}
|
| -
|
| -static void appendWidth(const int16_t& width, uint16_t emSize,
|
| + return bbox;
|
| +}
|
| +
|
| +SkPDFArray* appendWidth(const int16_t& width, uint16_t emSize,
|
| SkPDFArray* array) {
|
| array->appendScalar(scaleFromFontUnits(width, emSize));
|
| -}
|
| -
|
| -static void appendVerticalAdvance(
|
| + return array;
|
| +}
|
| +
|
| +SkPDFArray* appendVerticalAdvance(
|
| const SkAdvancedTypefaceMetrics::VerticalMetric& advance,
|
| uint16_t emSize, SkPDFArray* array) {
|
| appendWidth(advance.fVerticalAdvance, emSize, array);
|
| appendWidth(advance.fOriginXDisp, emSize, array);
|
| appendWidth(advance.fOriginYDisp, emSize, array);
|
| + return array;
|
| }
|
|
|
| template <typename Data>
|
| SkPDFArray* composeAdvanceData(
|
| SkAdvancedTypefaceMetrics::AdvanceMetric<Data>* advanceInfo,
|
| uint16_t emSize,
|
| - void (*appendAdvance)(const Data& advance, uint16_t emSize,
|
| - SkPDFArray* array),
|
| + SkPDFArray* (*appendAdvance)(const Data& advance, uint16_t emSize,
|
| + SkPDFArray* array),
|
| Data* defaultAdvance) {
|
| SkPDFArray* result = new SkPDFArray();
|
| for (; advanceInfo != nullptr; advanceInfo = advanceInfo->fNext.get()) {
|
| @@ -341,7 +343,7 @@
|
| appendAdvance(advanceInfo->fAdvance[j], emSize,
|
| advanceArray.get());
|
| result->appendInt(advanceInfo->fStartId);
|
| - result->appendObject(std::move(advanceArray));
|
| + result->appendObject(advanceArray.release());
|
| break;
|
| }
|
| case SkAdvancedTypefaceMetrics::WidthRange::kRun: {
|
| @@ -557,7 +559,7 @@
|
| append_bfrange_section(bfrangeEntries, cmap);
|
| }
|
|
|
| -static sk_sp<SkPDFStream> generate_tounicode_cmap(
|
| +static SkPDFStream* generate_tounicode_cmap(
|
| const SkTDArray<SkUnichar>& glyphToUnicode,
|
| const SkPDFGlyphSet* subset,
|
| bool multiByteGlyphs,
|
| @@ -573,7 +575,7 @@
|
| firstGlyphID, lastGlyphID);
|
| append_cmap_footer(&cmap);
|
| sk_sp<SkData> cmapData(cmap.copyToData());
|
| - return sk_make_sp<SkPDFStream>(cmapData.get());
|
| + return new SkPDFStream(cmapData.get());
|
| }
|
|
|
| #if defined (SK_SFNTLY_SUBSETTER)
|
| @@ -1020,8 +1022,8 @@
|
| sk_sp<SkPDFCIDFont> newCIDFont(
|
| new SkPDFCIDFont(fontInfo(), typeface(), subset));
|
| auto descendantFonts = sk_make_sp<SkPDFArray>();
|
| - descendantFonts->appendObjRef(std::move(newCIDFont));
|
| - this->insertObject("DescendantFonts", std::move(descendantFonts));
|
| + descendantFonts->appendObjRef(newCIDFont.release());
|
| + this->insertObject("DescendantFonts", descendantFonts.release());
|
|
|
| this->populateToUnicodeTable(subset);
|
|
|
| @@ -1047,7 +1049,7 @@
|
| auto descriptor = sk_make_sp<SkPDFDict>("FontDescriptor");
|
| setFontDescriptor(descriptor.get());
|
| if (!addCommonFontDescriptorEntries(defaultWidth)) {
|
| - this->insertObjRef("FontDescriptor", std::move(descriptor));
|
| + this->insertObjRef("FontDescriptor", descriptor.release());
|
| return false;
|
| }
|
| SkASSERT(this->canEmbed());
|
| @@ -1066,7 +1068,7 @@
|
| if (rawStream) {
|
| fontStream.reset(rawStream);
|
| fontStream->insertInt("Length1", fontSize);
|
| - descriptor->insertObjRef("FontFile2", std::move(fontStream));
|
| + descriptor->insertObjRef("FontFile2", fontStream.release());
|
| break;
|
| }
|
| }
|
| @@ -1079,7 +1081,7 @@
|
| SkASSERT(fontSize > 0);
|
| fontStream.reset(new SkPDFSharedStream(fontData.detach()));
|
| fontStream->dict()->insertInt("Length1", fontSize);
|
| - descriptor->insertObjRef("FontFile2", std::move(fontStream));
|
| + descriptor->insertObjRef("FontFile2", fontStream.release());
|
| break;
|
| }
|
| case SkAdvancedTypefaceMetrics::kCFF_Font:
|
| @@ -1092,13 +1094,13 @@
|
| } else {
|
| fontStream->dict()->insertName("Subtype", "CIDFontType0c");
|
| }
|
| - descriptor->insertObjRef("FontFile3", std::move(fontStream));
|
| + descriptor->insertObjRef("FontFile3", fontStream.release());
|
| break;
|
| }
|
| default:
|
| SkASSERT(false);
|
| }
|
| - this->insertObjRef("FontDescriptor", std::move(descriptor));
|
| + this->insertObjRef("FontDescriptor", descriptor.release());
|
| return true;
|
| }
|
|
|
| @@ -1145,7 +1147,7 @@
|
| sysInfo->insertString("Registry", "Adobe");
|
| sysInfo->insertString("Ordering", "Identity");
|
| sysInfo->insertInt("Supplement", 0);
|
| - this->insertObject("CIDSystemInfo", std::move(sysInfo));
|
| + this->insertObject("CIDSystemInfo", sysInfo.release());
|
|
|
| if (fontInfo()->fGlyphWidths.get()) {
|
| int16_t defaultWidth = 0;
|
| @@ -1154,7 +1156,7 @@
|
| fontInfo()->fEmSize, &appendWidth,
|
| &defaultWidth));
|
| if (widths->size())
|
| - this->insertObject("W", std::move(widths));
|
| + this->insertObject("W", widths.release());
|
| if (defaultWidth != 0) {
|
| this->insertScalar(
|
| "DW",
|
| @@ -1171,15 +1173,14 @@
|
| fontInfo()->fEmSize, &appendVerticalAdvance,
|
| &defaultAdvance));
|
| if (advances->size())
|
| - this->insertObject("W2", std::move(advances));
|
| + this->insertObject("W2", advances.release());
|
| if (defaultAdvance.fVerticalAdvance ||
|
| defaultAdvance.fOriginXDisp ||
|
| defaultAdvance.fOriginYDisp) {
|
| - auto array = sk_make_sp<SkPDFArray>();
|
| - appendVerticalAdvance(defaultAdvance,
|
| - fontInfo()->fEmSize,
|
| - array.get());
|
| - this->insertObject("DW2", std::move(array));
|
| + this->insertObject("DW2",
|
| + appendVerticalAdvance(defaultAdvance,
|
| + fontInfo()->fEmSize,
|
| + new SkPDFArray));
|
| }
|
| }
|
|
|
| @@ -1202,8 +1203,7 @@
|
|
|
| bool SkPDFType1Font::addFontDescriptor(int16_t defaultWidth) {
|
| if (SkPDFDict* descriptor = getFontDescriptor()) {
|
| - this->insertObjRef("FontDescriptor",
|
| - sk_sp<SkPDFDict>(SkRef(descriptor)));
|
| + this->insertObjRef("FontDescriptor", SkRef(descriptor));
|
| return true;
|
| }
|
|
|
| @@ -1225,9 +1225,9 @@
|
| fontStream->insertInt("Length1", header);
|
| fontStream->insertInt("Length2", data);
|
| fontStream->insertInt("Length3", trailer);
|
| - descriptor->insertObjRef("FontFile", std::move(fontStream));
|
| -
|
| - this->insertObjRef("FontDescriptor", std::move(descriptor));
|
| + descriptor->insertObjRef("FontFile", fontStream.release());
|
| +
|
| + this->insertObjRef("FontDescriptor", descriptor.release());
|
|
|
| return addCommonFontDescriptorEntries(defaultWidth);
|
| }
|
| @@ -1276,8 +1276,8 @@
|
| }
|
|
|
| auto encoding = sk_make_sp<SkPDFDict>("Encoding");
|
| - encoding->insertObject("Differences", std::move(encDiffs));
|
| - this->insertObject("Encoding", std::move(encoding));
|
| + encoding->insertObject("Differences", encDiffs.release());
|
| + this->insertObject("Encoding", encoding.release());
|
| return true;
|
| }
|
|
|
| @@ -1307,7 +1307,7 @@
|
| }
|
| this->insertInt("FirstChar", firstChar);
|
| this->insertInt("LastChar", firstChar + widthArray->size() - 1);
|
| - this->insertObject("Widths", std::move(widthArray));
|
| + this->insertObject("Widths", widthArray.release());
|
| }
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
| @@ -1376,19 +1376,19 @@
|
| SkAutoTDelete<SkMemoryStream> glyphStream(new SkMemoryStream());
|
| glyphStream->setData(content.copyToData())->unref();
|
|
|
| - charProcs->insertObjRef(
|
| - characterName, sk_make_sp<SkPDFStream>(glyphStream.get()));
|
| - }
|
| -
|
| - encoding->insertObject("Differences", std::move(encDiffs));
|
| -
|
| - this->insertObject("CharProcs", std::move(charProcs));
|
| - this->insertObject("Encoding", std::move(encoding));
|
| + charProcs->insertObjRef(characterName,
|
| + new SkPDFStream(glyphStream.get()));
|
| + }
|
| +
|
| + encoding->insertObject("Differences", encDiffs.release());
|
| +
|
| + this->insertObject("CharProcs", charProcs.release());
|
| + this->insertObject("Encoding", encoding.release());
|
|
|
| this->insertObject("FontBBox", makeFontBBox(bbox, 1000));
|
| this->insertInt("FirstChar", 1);
|
| this->insertInt("LastChar", lastGlyphID() - firstGlyphID() + 1);
|
| - this->insertObject("Widths", std::move(widthArray));
|
| + this->insertObject("Widths", widthArray.release());
|
| this->insertName("CIDToGIDMap", "Identity");
|
|
|
| this->populateToUnicodeTable(nullptr);
|
|
|