Index: Source/platform/fonts/shaping/HarfBuzzShaper.cpp |
diff --git a/Source/platform/fonts/shaping/HarfBuzzShaper.cpp b/Source/platform/fonts/shaping/HarfBuzzShaper.cpp |
index f6846d3764a540d4cca0f149719e381949aef115..a19cb91cf4c3e50adb823b9b647270446d8542a5 100644 |
--- a/Source/platform/fonts/shaping/HarfBuzzShaper.cpp |
+++ b/Source/platform/fonts/shaping/HarfBuzzShaper.cpp |
@@ -484,15 +484,6 @@ |
return charactersSoFar; |
} |
-void ShapeResult::fallbackFonts(HashSet<const SimpleFontData*>* fallback) const |
-{ |
- ASSERT(fallback); |
- for (unsigned i = 0; i < m_runs.size(); ++i) { |
- if (m_runs[i]->m_fontData != m_primaryFont) |
- fallback->add(m_runs[i]->m_fontData); |
- } |
-} |
- |
unsigned ShapeResult::numberOfRunsForTesting() const |
{ |
return m_runs.size(); |
@@ -601,13 +592,17 @@ |
} |
} |
-HarfBuzzShaper::HarfBuzzShaper(const Font* font, const TextRun& run) |
- : Shaper(font, run) |
+HarfBuzzShaper::HarfBuzzShaper(const Font* font, const TextRun& run, |
+ HashSet<const SimpleFontData*>* fallbackFonts) |
+ : Shaper(font, run, nullptr, fallbackFonts) |
, m_normalizedBufferLength(0) |
, m_wordSpacingAdjustment(font->fontDescription().wordSpacing()) |
, m_letterSpacing(font->fontDescription().letterSpacing()) |
, m_expansionOpportunityCount(0) |
{ |
+ // TODO(eae): Once SimpleShaper is gone the ownership of this should shift |
+ // to HarfBuzzShaper. |
+ ASSERT(fallbackFonts); |
m_normalizedBuffer = adoptArrayPtr(new UChar[m_textRun.length() + 1]); |
normalizeCharacters(m_textRun, m_textRun.length(), m_normalizedBuffer.get(), &m_normalizedBufferLength); |
setExpansion(m_textRun.expansion()); |
@@ -757,7 +752,6 @@ |
ShapeResult* result = new ShapeResult(); |
result->m_numCharacters = m_normalizedBufferLength; |
result->m_direction = m_textRun.direction(); |
- result->m_primaryFont = m_font->primaryFont(); |
if (!shapeHarfBuzzRuns(result)) { |
delete result; |
@@ -980,6 +974,8 @@ |
{ |
ASSERT(endCharacter > startCharacter); |
ASSERT(script != USCRIPT_INVALID_CODE); |
+ if (m_fallbackFonts) |
+ trackNonPrimaryFallbackFont(fontData); |
return m_harfBuzzRuns.append(HarfBuzzRun::create(fontData, |
startCharacter, endCharacter - startCharacter, |
TextDirectionToHBDirection(m_textRun.direction(), m_font->fontDescription().orientation(), fontData), |
@@ -1135,6 +1131,7 @@ |
run->m_width = totalAdvance > 0.0 ? totalAdvance : 0.0; |
result->m_width += run->m_width; |
+ result->m_fallbackFonts = *m_fallbackFonts; |
} |
float HarfBuzzShaper::adjustSpacing(ShapeResult::RunInfo* run, size_t glyphIndex, unsigned currentCharacterIndex, float& offset, float& totalAdvance) |