| Index: Source/core/platform/graphics/FontFastPath.cpp
|
| diff --git a/Source/core/platform/graphics/FontFastPath.cpp b/Source/core/platform/graphics/FontFastPath.cpp
|
| index f9f0236108371dd39389c87981fe5a646c15a23c..977e5c88e2f21c1df2a7c7bae29dd6e9743ffb40 100644
|
| --- a/Source/core/platform/graphics/FontFastPath.cpp
|
| +++ b/Source/core/platform/graphics/FontFastPath.cpp
|
| @@ -426,37 +426,33 @@ float Font::getGlyphsAndAdvancesForSimpleText(const TextRun& run, int from, int
|
| return initialAdvance;
|
| }
|
|
|
| -void Font::drawSimpleText(GraphicsContext* context, const TextRun& run, const FloatPoint& point, int from, int to) const
|
| +void Font::drawSimpleText(GraphicsContext* context, const TextRunPaintInfo& runInfo, const FloatPoint& point) const
|
| {
|
| // This glyph buffer holds our glyphs+advances+font data for each glyph.
|
| GlyphBuffer glyphBuffer;
|
|
|
| - float startX = point.x() + getGlyphsAndAdvancesForSimpleText(run, from, to, glyphBuffer);
|
| + float startX = point.x() + getGlyphsAndAdvancesForSimpleText(runInfo.run, runInfo.from, runInfo.to, glyphBuffer);
|
|
|
| if (glyphBuffer.isEmpty())
|
| return;
|
|
|
| FloatPoint startPoint(startX, point.y());
|
| - drawGlyphBuffer(context, run, glyphBuffer, startPoint);
|
| + drawGlyphBuffer(context, runInfo, glyphBuffer, startPoint);
|
| }
|
|
|
| -void Font::drawEmphasisMarksForSimpleText(GraphicsContext* context, const TextRun& run, const AtomicString& mark, const FloatPoint& point, int from, int to) const
|
| +void Font::drawEmphasisMarksForSimpleText(GraphicsContext* context, const TextRunPaintInfo& runInfo, const AtomicString& mark, const FloatPoint& point) const
|
| {
|
| GlyphBuffer glyphBuffer;
|
| - float initialAdvance = getGlyphsAndAdvancesForSimpleText(run, from, to, glyphBuffer, ForTextEmphasis);
|
| + float initialAdvance = getGlyphsAndAdvancesForSimpleText(runInfo.run, runInfo.from, runInfo.to, glyphBuffer, ForTextEmphasis);
|
|
|
| if (glyphBuffer.isEmpty())
|
| return;
|
|
|
| - drawEmphasisMarks(context, run, glyphBuffer, mark, FloatPoint(point.x() + initialAdvance, point.y()));
|
| + drawEmphasisMarks(context, runInfo, glyphBuffer, mark, FloatPoint(point.x() + initialAdvance, point.y()));
|
| }
|
|
|
| -void Font::drawGlyphBuffer(GraphicsContext* context, const TextRun& run, const GlyphBuffer& glyphBuffer, const FloatPoint& point) const
|
| +void Font::drawGlyphBuffer(GraphicsContext* context, const TextRunPaintInfo& runInfo, const GlyphBuffer& glyphBuffer, const FloatPoint& point) const
|
| {
|
| -#if !ENABLE(SVG_FONTS)
|
| - UNUSED_PARAM(run);
|
| -#endif
|
| -
|
| // Draw each contiguous run of glyphs that use the same font data.
|
| const SimpleFontData* fontData = glyphBuffer.fontDataAt(0);
|
| FloatSize offset = glyphBuffer.offsetAt(0);
|
| @@ -465,7 +461,7 @@ void Font::drawGlyphBuffer(GraphicsContext* context, const TextRun& run, const G
|
| int lastFrom = 0;
|
| int nextGlyph = 1;
|
| #if ENABLE(SVG_FONTS)
|
| - TextRun::RenderingContext* renderingContext = run.renderingContext();
|
| + TextRun::RenderingContext* renderingContext = runInfo.run.renderingContext();
|
| #endif
|
| while (nextGlyph < glyphBuffer.size()) {
|
| const SimpleFontData* nextFontData = glyphBuffer.fontDataAt(nextGlyph);
|
| @@ -474,10 +470,10 @@ void Font::drawGlyphBuffer(GraphicsContext* context, const TextRun& run, const G
|
| if (nextFontData != fontData || nextOffset != offset) {
|
| #if ENABLE(SVG_FONTS)
|
| if (renderingContext && fontData->isSVGFont())
|
| - renderingContext->drawSVGGlyphs(context, run, fontData, glyphBuffer, lastFrom, nextGlyph - lastFrom, startPoint);
|
| + renderingContext->drawSVGGlyphs(context, runInfo.run, fontData, glyphBuffer, lastFrom, nextGlyph - lastFrom, startPoint);
|
| else
|
| #endif
|
| - drawGlyphs(context, fontData, glyphBuffer, lastFrom, nextGlyph - lastFrom, startPoint);
|
| + drawGlyphs(context, fontData, glyphBuffer, lastFrom, nextGlyph - lastFrom, startPoint, runInfo.bounds);
|
|
|
| lastFrom = nextGlyph;
|
| fontData = nextFontData;
|
| @@ -490,10 +486,10 @@ void Font::drawGlyphBuffer(GraphicsContext* context, const TextRun& run, const G
|
|
|
| #if ENABLE(SVG_FONTS)
|
| if (renderingContext && fontData->isSVGFont())
|
| - renderingContext->drawSVGGlyphs(context, run, fontData, glyphBuffer, lastFrom, nextGlyph - lastFrom, startPoint);
|
| + renderingContext->drawSVGGlyphs(context, runInfo.run, fontData, glyphBuffer, lastFrom, nextGlyph - lastFrom, startPoint);
|
| else
|
| #endif
|
| - drawGlyphs(context, fontData, glyphBuffer, lastFrom, nextGlyph - lastFrom, startPoint);
|
| + drawGlyphs(context, fontData, glyphBuffer, lastFrom, nextGlyph - lastFrom, startPoint, runInfo.bounds);
|
| }
|
|
|
| inline static float offsetToMiddleOfGlyph(const SimpleFontData* fontData, Glyph glyph)
|
| @@ -511,7 +507,7 @@ inline static float offsetToMiddleOfGlyphAtIndex(const GlyphBuffer& glyphBuffer,
|
| return offsetToMiddleOfGlyph(glyphBuffer.fontDataAt(i), glyphBuffer.glyphAt(i));
|
| }
|
|
|
| -void Font::drawEmphasisMarks(GraphicsContext* context, const TextRun& run, const GlyphBuffer& glyphBuffer, const AtomicString& mark, const FloatPoint& point) const
|
| +void Font::drawEmphasisMarks(GraphicsContext* context, const TextRunPaintInfo& runInfo, const GlyphBuffer& glyphBuffer, const AtomicString& mark, const FloatPoint& point) const
|
| {
|
| FontCachePurgePreventer purgePreventer;
|
|
|
| @@ -539,7 +535,7 @@ void Font::drawEmphasisMarks(GraphicsContext* context, const TextRun& run, const
|
| }
|
| markBuffer.add(glyphBuffer.glyphAt(glyphBuffer.size() - 1) ? markGlyph : spaceGlyph, markFontData, 0);
|
|
|
| - drawGlyphBuffer(context, run, markBuffer, startPoint);
|
| + drawGlyphBuffer(context, runInfo, markBuffer, startPoint);
|
| }
|
|
|
| float Font::floatWidthForSimpleText(const TextRun& run, HashSet<const SimpleFontData*>* fallbackFonts, GlyphOverflow* glyphOverflow) const
|
|
|