void CairoGlyphToPathTranslator::advance() { GlyphBufferAdvance advance = m_glyphBuffer.advanceAt(m_index); m_translation = m_translation.translate(advance.width(), advance.height()); ++m_index; if (m_index < m_glyphBuffer.size()) m_fontData = m_glyphBuffer.fontAt(m_index); }
void DrawGlyphs::computeBounds() { // FIXME: This code doesn't actually take the extents of the glyphs into consideration. It assumes that // the glyph lies entirely within its [(ascent + descent), advance] rect. float ascent = m_font->fontMetrics().floatAscent(); float descent = m_font->fontMetrics().floatDescent(); FloatPoint current = toFloatPoint(localAnchor()); size_t numGlyphs = m_glyphs.size(); for (size_t i = 0; i < numGlyphs; ++i) { GlyphBufferAdvance advance = m_advances[i]; FloatRect glyphRect = FloatRect(current.x(), current.y() - ascent, advance.width(), ascent + descent); m_bounds.unite(glyphRect); current.move(advance.width(), advance.height()); } }