Index: src/pdf/SkPDFFont.cpp |
diff --git a/src/pdf/SkPDFFont.cpp b/src/pdf/SkPDFFont.cpp |
index 8718596b8eb7b659ab2bdc59ebe0ea26b16522ac..7a66bcd1e920eebc877b9ac92e7f7b773bb94275 100644 |
--- a/src/pdf/SkPDFFont.cpp |
+++ b/src/pdf/SkPDFFont.cpp |
@@ -322,33 +322,36 @@ static void appendVerticalAdvance( |
template <typename Data> |
SkPDFArray* composeAdvanceData( |
- SkAdvancedTypefaceMetrics::AdvanceMetric<Data>* advanceInfo, |
+ const SkSinglyLinkedList< |
+ SkAdvancedTypefaceMetrics::AdvanceMetric<Data>>& advanceInfo, |
uint16_t emSize, |
- void (*appendAdvance)(const Data& advance, uint16_t emSize, |
+ void (*appendAdvance)(const Data& advance, |
+ uint16_t emSize, |
SkPDFArray* array), |
Data* defaultAdvance) { |
SkPDFArray* result = new SkPDFArray(); |
- for (; advanceInfo != nullptr; advanceInfo = advanceInfo->fNext.get()) { |
- switch (advanceInfo->fType) { |
- case SkAdvancedTypefaceMetrics::WidthRange::kDefault: { |
- SkASSERT(advanceInfo->fAdvance.count() == 1); |
- *defaultAdvance = advanceInfo->fAdvance[0]; |
+ for (const SkAdvancedTypefaceMetrics::AdvanceMetric<Data>& range : |
+ advanceInfo) { |
+ switch (range.fType) { |
+ case SkAdvancedTypefaceMetrics::AdvanceMetric<Data>::kDefault: { |
+ SkASSERT(range.fAdvance.count() == 1); |
+ *defaultAdvance = range.fAdvance[0]; |
break; |
} |
- case SkAdvancedTypefaceMetrics::WidthRange::kRange: { |
+ case SkAdvancedTypefaceMetrics::AdvanceMetric<Data>::kRange: { |
auto advanceArray = sk_make_sp<SkPDFArray>(); |
- for (int j = 0; j < advanceInfo->fAdvance.count(); j++) |
- appendAdvance(advanceInfo->fAdvance[j], emSize, |
+ for (int j = 0; j < range.fAdvance.count(); j++) |
+ appendAdvance(range.fAdvance[j], emSize, |
advanceArray.get()); |
- result->appendInt(advanceInfo->fStartId); |
+ result->appendInt(range.fStartId); |
result->appendObject(std::move(advanceArray)); |
break; |
} |
- case SkAdvancedTypefaceMetrics::WidthRange::kRun: { |
- SkASSERT(advanceInfo->fAdvance.count() == 1); |
- result->appendInt(advanceInfo->fStartId); |
- result->appendInt(advanceInfo->fEndId); |
- appendAdvance(advanceInfo->fAdvance[0], emSize, result); |
+ case SkAdvancedTypefaceMetrics::AdvanceMetric<Data>::kRun: { |
+ SkASSERT(range.fAdvance.count() == 1); |
+ result->appendInt(range.fStartId); |
+ result->appendInt(range.fEndId); |
+ appendAdvance(range.fAdvance[0], emSize, result); |
break; |
} |
} |
@@ -1146,12 +1149,11 @@ bool SkPDFCIDFont::populate(const SkPDFGlyphSet* subset) { |
sysInfo->insertInt("Supplement", 0); |
this->insertObject("CIDSystemInfo", std::move(sysInfo)); |
- if (fontInfo()->fGlyphWidths.get()) { |
+ if (!fontInfo()->fGlyphWidths.empty()) { |
int16_t defaultWidth = 0; |
- sk_sp<SkPDFArray> widths( |
- composeAdvanceData(fontInfo()->fGlyphWidths.get(), |
- fontInfo()->fEmSize, &appendWidth, |
- &defaultWidth)); |
+ sk_sp<SkPDFArray> widths(composeAdvanceData( |
+ fontInfo()->fGlyphWidths, fontInfo()->fEmSize, &appendWidth, |
+ &defaultWidth)); |
if (widths->size()) |
this->insertObject("W", std::move(widths)); |
if (defaultWidth != 0) { |
@@ -1160,15 +1162,14 @@ bool SkPDFCIDFont::populate(const SkPDFGlyphSet* subset) { |
scaleFromFontUnits(defaultWidth, fontInfo()->fEmSize)); |
} |
} |
- if (fontInfo()->fVerticalMetrics.get()) { |
+ if (!fontInfo()->fVerticalMetrics.empty()) { |
struct SkAdvancedTypefaceMetrics::VerticalMetric defaultAdvance; |
defaultAdvance.fVerticalAdvance = 0; |
defaultAdvance.fOriginXDisp = 0; |
defaultAdvance.fOriginYDisp = 0; |
- sk_sp<SkPDFArray> advances( |
- composeAdvanceData(fontInfo()->fVerticalMetrics.get(), |
- fontInfo()->fEmSize, &appendVerticalAdvance, |
- &defaultAdvance)); |
+ sk_sp<SkPDFArray> advances(composeAdvanceData( |
+ fontInfo()->fVerticalMetrics, fontInfo()->fEmSize, |
+ &appendVerticalAdvance, &defaultAdvance)); |
if (advances->size()) |
this->insertObject("W2", std::move(advances)); |
if (defaultAdvance.fVerticalAdvance || |
@@ -1237,27 +1238,24 @@ bool SkPDFType1Font::addFontDescriptor(int16_t defaultWidth) { |
} |
bool SkPDFType1Font::populate(int16_t glyphID) { |
- SkASSERT(!fontInfo()->fVerticalMetrics.get()); |
- SkASSERT(fontInfo()->fGlyphWidths.get()); |
+ SkASSERT(fontInfo()->fVerticalMetrics.empty()); |
+ SkASSERT(!fontInfo()->fGlyphWidths.empty()); |
adjustGlyphRangeForSingleByteEncoding(glyphID); |
int16_t defaultWidth = 0; |
const SkAdvancedTypefaceMetrics::WidthRange* widthRangeEntry = nullptr; |
- const SkAdvancedTypefaceMetrics::WidthRange* widthEntry; |
- for (widthEntry = fontInfo()->fGlyphWidths.get(); |
- widthEntry != nullptr; |
- widthEntry = widthEntry->fNext.get()) { |
- switch (widthEntry->fType) { |
+ for (const auto& widthEntry : fontInfo()->fGlyphWidths) { |
+ switch (widthEntry.fType) { |
case SkAdvancedTypefaceMetrics::WidthRange::kDefault: |
- defaultWidth = widthEntry->fAdvance[0]; |
+ defaultWidth = widthEntry.fAdvance[0]; |
break; |
case SkAdvancedTypefaceMetrics::WidthRange::kRun: |
SkASSERT(false); |
break; |
case SkAdvancedTypefaceMetrics::WidthRange::kRange: |
SkASSERT(widthRangeEntry == nullptr); |
- widthRangeEntry = widthEntry; |
+ widthRangeEntry = &widthEntry; |
break; |
} |
} |