SkAdvancedTypefaceMetrics: abstract out linked list
+ use SkSinglyLinkedList<T>
+ move SkSinglyLinkedList.h to core
+ remove SkHackyAutoTDelete
+ getAdvanceData() -> setGlyphWidths()
+ finishRange no longer templated
+ remove unused templated functions
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1953153004
Review-Url: https://codereview.chromium.org/1953153004
diff --git a/src/ports/SkFontHost_FreeType.cpp b/src/ports/SkFontHost_FreeType.cpp
index b53364e..30e5fb3 100644
--- a/src/ports/SkFontHost_FreeType.cpp
+++ b/src/ports/SkFontHost_FreeType.cpp
@@ -58,8 +58,6 @@
//#define SK_FONTHOST_FREETYPE_RUNTIME_VERSION
//#define SK_GAMMA_APPLY_TO_A8
-using namespace skia_advanced_typeface_metrics_utils;
-
static bool isLCD(const SkScalerContext::Rec& rec) {
return SkMask::kLCD16_Format == rec.fMaskFormat;
}
@@ -591,13 +589,14 @@
if (perGlyphInfo & kHAdvance_PerGlyphInfo) {
if (FT_IS_FIXED_WIDTH(face)) {
- appendRange(&info->fGlyphWidths, 0);
+ SkAdvancedTypefaceMetrics::WidthRange range(0);
int16_t advance = face->max_advance_width;
- info->fGlyphWidths->fAdvance.append(1, &advance);
- finishRange(info->fGlyphWidths.get(), 0,
- SkAdvancedTypefaceMetrics::WidthRange::kDefault);
+ range.fAdvance.append(1, &advance);
+ SkAdvancedTypefaceMetrics::FinishRange(
+ &range, 0, SkAdvancedTypefaceMetrics::WidthRange::kDefault);
+ info->fGlyphWidths.emplace_back(std::move(range));
} else if (!cid) {
- appendRange(&info->fGlyphWidths, 0);
+ SkAdvancedTypefaceMetrics::WidthRange range(0);
// So as to not blow out the stack, get advances in batches.
for (int gID = 0; gID < face->num_glyphs; gID += 128) {
FT_Fixed advances[128];
@@ -608,18 +607,16 @@
FT_Get_Advances(face, gID, advanceCount, FT_LOAD_NO_SCALE, advances);
for (int i = 0; i < advanceCount; i++) {
int16_t advance = advances[i];
- info->fGlyphWidths->fAdvance.append(1, &advance);
+ range.fAdvance.append(1, &advance);
}
}
- finishRange(info->fGlyphWidths.get(), face->num_glyphs - 1,
- SkAdvancedTypefaceMetrics::WidthRange::kRange);
+ SkAdvancedTypefaceMetrics::FinishRange(
+ &range, face->num_glyphs - 1,
+ SkAdvancedTypefaceMetrics::WidthRange::kRange);
+ info->fGlyphWidths.emplace_back(std::move(range));
} else {
- info->fGlyphWidths.reset(
- getAdvanceData(face,
- face->num_glyphs,
- glyphIDs,
- glyphIDsCount,
- &getWidthAdvance));
+ info->setGlyphWidths(face, face->num_glyphs, glyphIDs,
+ glyphIDsCount, &getWidthAdvance);
}
}
diff --git a/src/ports/SkFontHost_mac.cpp b/src/ports/SkFontHost_mac.cpp
index 8593b39..dc13331 100644
--- a/src/ports/SkFontHost_mac.cpp
+++ b/src/ports/SkFontHost_mac.cpp
@@ -1619,17 +1619,14 @@
if (perGlyphInfo & kHAdvance_PerGlyphInfo) {
if (info->fStyle & SkAdvancedTypefaceMetrics::kFixedPitch_Style) {
- skia_advanced_typeface_metrics_utils::appendRange(&info->fGlyphWidths, 0);
- info->fGlyphWidths->fAdvance.append(1, &min_width);
- skia_advanced_typeface_metrics_utils::finishRange(info->fGlyphWidths.get(), 0,
- SkAdvancedTypefaceMetrics::WidthRange::kDefault);
+ SkAdvancedTypefaceMetrics::WidthRange range(0);
+ range.fAdvance.append(1, &min_width);
+ SkAdvancedTypefaceMetrics::FinishRange(
+ &range, 0, SkAdvancedTypefaceMetrics::WidthRange::kDefault);
+ info->fGlyphWidths.emplace_back(std::move(range));
} else {
- info->fGlyphWidths.reset(
- skia_advanced_typeface_metrics_utils::getAdvanceData(ctFont.get(),
- SkToInt(glyphCount),
- glyphIDs,
- glyphIDsCount,
- &getWidthAdvance));
+ info->setGlyphWidths(ctFont.get(), SkToInt(glyphCount), glyphIDs,
+ glyphIDsCount, &getWidthAdvance);
}
}
return info;
diff --git a/src/ports/SkFontHost_win.cpp b/src/ports/SkFontHost_win.cpp
index db90915..7c0a639 100644
--- a/src/ports/SkFontHost_win.cpp
+++ b/src/ports/SkFontHost_win.cpp
@@ -86,8 +86,6 @@
return rec.getHinting() == SkPaint::kNo_Hinting || rec.getHinting() == SkPaint::kSlight_Hinting;
}
-using namespace skia_advanced_typeface_metrics_utils;
-
static void tchar_to_skstring(const TCHAR t[], SkString* s) {
#ifdef UNICODE
size_t sSize = WideCharToMultiByte(CP_UTF8, 0, t, -1, nullptr, 0, nullptr, nullptr);
@@ -1835,17 +1833,14 @@
if (perGlyphInfo & kHAdvance_PerGlyphInfo) {
if (info->fStyle & SkAdvancedTypefaceMetrics::kFixedPitch_Style) {
- appendRange(&info->fGlyphWidths, 0);
- info->fGlyphWidths->fAdvance.append(1, &min_width);
- finishRange(info->fGlyphWidths.get(), 0,
- SkAdvancedTypefaceMetrics::WidthRange::kDefault);
+ SkAdvancedTypefaceMetrics::WidthRange range(0);
+ range.fAdvance.append(1, &min_width);
+ SkAdvancedTypefaceMetrics::FinishRange(
+ &range, 0, SkAdvancedTypefaceMetrics::WidthRange::kDefault);
+ info->fGlyphWidths.emplace_back(std::move(range));
} else {
- info->fGlyphWidths.reset(
- getAdvanceData(hdc,
- glyphCount,
- glyphIDs,
- glyphIDsCount,
- &getWidthAdvance));
+ info->setGlyphWidths(hdc, glyphCount, glyphIDs,
+ glyphIDsCount, &getWidthAdvance);
}
}
diff --git a/src/ports/SkTypeface_win_dw.cpp b/src/ports/SkTypeface_win_dw.cpp
index 18c63a5..de599d6 100644
--- a/src/ports/SkTypeface_win_dw.cpp
+++ b/src/ports/SkTypeface_win_dw.cpp
@@ -284,8 +284,6 @@
///////////////////////////////////////////////////////////////////////////////
//PDF Support
-using namespace skia_advanced_typeface_metrics_utils;
-
// Construct Glyph to Unicode table.
// Unicode code points that require conjugate pairs in utf16 are not
// supported.
@@ -444,19 +442,16 @@
if (perGlyphInfo & kHAdvance_PerGlyphInfo) {
if (fixedWidth) {
- appendRange(&info->fGlyphWidths, 0);
+ SkAdvancedTypefaceMetrics::WidthRange range(0);
int16_t advance;
getWidthAdvance(fDWriteFontFace.get(), 1, &advance);
- info->fGlyphWidths->fAdvance.append(1, &advance);
- finishRange(info->fGlyphWidths.get(), 0,
- SkAdvancedTypefaceMetrics::WidthRange::kDefault);
+ range.fAdvance.append(1, &advance);
+ SkAdvancedTypefaceMetrics::FinishRange(
+ &range, 0, SkAdvancedTypefaceMetrics::WidthRange::kDefault);
+ info->fGlyphWidths.emplace_back(std::move(range));
} else {
- info->fGlyphWidths.reset(
- getAdvanceData(fDWriteFontFace.get(),
- glyphCount,
- glyphIDs,
- glyphIDsCount,
- getWidthAdvance));
+ info->setGlyphWidths(fDWriteFontFace.get(), glyphCount, glyphIDs,
+ glyphIDsCount, getWidthAdvance);
}
}