diff options
Diffstat (limited to 'src/3rdparty/webkit/WebCore/rendering/InlineTextBox.cpp')
-rw-r--r-- | src/3rdparty/webkit/WebCore/rendering/InlineTextBox.cpp | 50 |
1 files changed, 34 insertions, 16 deletions
diff --git a/src/3rdparty/webkit/WebCore/rendering/InlineTextBox.cpp b/src/3rdparty/webkit/WebCore/rendering/InlineTextBox.cpp index 9f17b0c..3c0d13b 100644 --- a/src/3rdparty/webkit/WebCore/rendering/InlineTextBox.cpp +++ b/src/3rdparty/webkit/WebCore/rendering/InlineTextBox.cpp @@ -1029,30 +1029,48 @@ bool InlineTextBox::containsCaretOffset(int offset) const return true; } -typedef HashMap<InlineTextBox*, Vector<const SimpleFontData*> > FallbackFontsMap; -static FallbackFontsMap* gFallbackFontsMap; - void InlineTextBox::setFallbackFonts(const HashSet<const SimpleFontData*>& fallbackFonts) { - if (!gFallbackFontsMap) - gFallbackFontsMap = new FallbackFontsMap; + if (!s_glyphOverflowAndFallbackFontsMap) + s_glyphOverflowAndFallbackFontsMap = new GlyphOverflowAndFallbackFontsMap; - FallbackFontsMap::iterator it = gFallbackFontsMap->set(this, Vector<const SimpleFontData*>()).first; - ASSERT(it->second.isEmpty()); - copyToVector(fallbackFonts, it->second); + GlyphOverflowAndFallbackFontsMap::iterator it = s_glyphOverflowAndFallbackFontsMap->add(this, make_pair(Vector<const SimpleFontData*>(), GlyphOverflow())).first; + ASSERT(it->second.first.isEmpty()); + copyToVector(fallbackFonts, it->second.first); } -void InlineTextBox::takeFallbackFonts(Vector<const SimpleFontData*>& fallbackFonts) +Vector<const SimpleFontData*>* InlineTextBox::fallbackFonts() const { - if (!gFallbackFontsMap) - return; + if (!s_glyphOverflowAndFallbackFontsMap) + return 0; - FallbackFontsMap::iterator it = gFallbackFontsMap->find(this); - if (it == gFallbackFontsMap->end()) - return; + GlyphOverflowAndFallbackFontsMap::iterator it = s_glyphOverflowAndFallbackFontsMap->find(this); + if (it == s_glyphOverflowAndFallbackFontsMap->end()) + return 0; + + return &it->second.first; +} + +InlineTextBox::GlyphOverflowAndFallbackFontsMap* InlineTextBox::s_glyphOverflowAndFallbackFontsMap = 0; + +void InlineTextBox::setGlyphOverflow(const GlyphOverflow& glyphOverflow) +{ + if (!s_glyphOverflowAndFallbackFontsMap) + s_glyphOverflowAndFallbackFontsMap = new GlyphOverflowAndFallbackFontsMap; + + GlyphOverflowAndFallbackFontsMap::iterator it = s_glyphOverflowAndFallbackFontsMap->add(this, make_pair(Vector<const SimpleFontData*>(), GlyphOverflow())).first; + it->second.second = glyphOverflow; +} + +GlyphOverflow* InlineTextBox::glyphOverflow() const +{ + if (!s_glyphOverflowAndFallbackFontsMap) + return 0; + GlyphOverflowAndFallbackFontsMap::iterator it = s_glyphOverflowAndFallbackFontsMap->find(this); + if (it == s_glyphOverflowAndFallbackFontsMap->end()) + return 0; - fallbackFonts.swap(it->second); - gFallbackFontsMap->remove(it); + return &it->second.second; } } // namespace WebCore |