Commit 942b31f5 authored by fmalita's avatar fmalita Committed by Commit bot

Font::drawGlyphs() cleanup

Font::drawGlyphs() is a fallback/legacy code path, only used in
drawGlyphBuffer() when we fail to build text blobs due to
verticalAnyUpright text.  Hence, the existing horizontal optimization is
no longer reachable.

Remove the dead code and associated helper method.

Also

  * fold the remaining paintGlyphs helper into drawGlyphs
  * drop unused textBounds param
  * use a scoped SkAutoCanvasRestore instead of explicit restore

No functional changes.

R=eae@chromium.org,drott@chromium.org,jbroman@chromium.org

Review URL: https://codereview.chromium.org/1548333002

Cr-Commit-Position: refs/heads/master@{#367011}
parent f3d8ac25
...@@ -637,45 +637,19 @@ int Font::emphasisMarkHeight(const AtomicString& mark) const ...@@ -637,45 +637,19 @@ int Font::emphasisMarkHeight(const AtomicString& mark) const
return markFontData->fontMetrics().height(); return markFontData->fontMetrics().height();
} }
void Font::paintGlyphs(SkCanvas* canvas, const SkPaint& paint, const SimpleFontData* font,
const Glyph glyphs[], unsigned numGlyphs,
const SkPoint pos[], const FloatRect& textRect, float deviceScaleFactor) const
{
SkPaint fontPaint(paint);
font->platformData().setupPaint(&fontPaint, deviceScaleFactor, this);
fontPaint.setTextEncoding(SkPaint::kGlyphID_TextEncoding);
canvas->drawPosText(glyphs, numGlyphs * sizeof(Glyph), pos, fontPaint);
}
void Font::paintGlyphsHorizontal(SkCanvas* canvas, const SkPaint& paint, const SimpleFontData* font,
const Glyph glyphs[], unsigned numGlyphs,
const SkScalar xpos[], SkScalar constY, const FloatRect& textRect, float deviceScaleFactor) const
{
SkPaint fontPaint(paint);
font->platformData().setupPaint(&fontPaint, deviceScaleFactor, this);
fontPaint.setTextEncoding(SkPaint::kGlyphID_TextEncoding);
canvas->drawPosTextH(glyphs, numGlyphs * sizeof(Glyph), xpos, constY, fontPaint);
}
void Font::drawGlyphs(SkCanvas* canvas, const SkPaint& paint, const SimpleFontData* font, void Font::drawGlyphs(SkCanvas* canvas, const SkPaint& paint, const SimpleFontData* font,
const GlyphBuffer& glyphBuffer, unsigned from, unsigned numGlyphs, const GlyphBuffer& glyphBuffer, unsigned from, unsigned numGlyphs,
const FloatPoint& point, const FloatRect& textRect, float deviceScaleFactor) const const FloatPoint& point, float deviceScaleFactor) const
{ {
ASSERT(glyphBuffer.size() >= from + numGlyphs); ASSERT(glyphBuffer.size() >= from + numGlyphs);
if (!glyphBuffer.hasVerticalOffsets()) { // We only ever reach this fallback code path when failing to build a text blob due to
Vector<SkScalar, 64> xpos(numGlyphs); // verticalAnyUpright text in the buffer => the buffer is guaranteed to store vertical offsets.
for (unsigned i = 0; i < numGlyphs; i++) ASSERT(glyphBuffer.hasVerticalOffsets());
xpos[i] = SkFloatToScalar(point.x() + glyphBuffer.xOffsetAt(from + i));
paintGlyphsHorizontal(canvas, paint, font, glyphBuffer.glyphs(from), numGlyphs, xpos.data(),
SkFloatToScalar(point.y()), textRect, deviceScaleFactor);
return;
}
bool drawVertically = font->platformData().isVerticalAnyUpright() && font->verticalData(); bool drawVertically = font->platformData().isVerticalAnyUpright() && font->verticalData();
int canvasStackLevel = canvas->getSaveCount(); SkAutoCanvasRestore autoRestore(canvas, false);
if (drawVertically) { if (drawVertically) {
canvas->save(); canvas->save();
canvas->concat(affineTransformToSkMatrix(AffineTransform(0, -1, 1, 0, point.x(), point.y()))); canvas->concat(affineTransformToSkMatrix(AffineTransform(0, -1, 1, 0, point.x(), point.y())));
...@@ -684,7 +658,6 @@ void Font::drawGlyphs(SkCanvas* canvas, const SkPaint& paint, const SimpleFontDa ...@@ -684,7 +658,6 @@ void Font::drawGlyphs(SkCanvas* canvas, const SkPaint& paint, const SimpleFontDa
const float verticalBaselineXOffset = drawVertically ? SkFloatToScalar(font->fontMetrics().floatAscent() - font->fontMetrics().floatAscent(IdeographicBaseline)) : 0; const float verticalBaselineXOffset = drawVertically ? SkFloatToScalar(font->fontMetrics().floatAscent() - font->fontMetrics().floatAscent(IdeographicBaseline)) : 0;
ASSERT(glyphBuffer.hasVerticalOffsets());
Vector<SkPoint, 32> pos(numGlyphs); Vector<SkPoint, 32> pos(numGlyphs);
for (unsigned i = 0; i < numGlyphs; i++) { for (unsigned i = 0; i < numGlyphs; i++) {
pos[i].set( pos[i].set(
...@@ -692,8 +665,10 @@ void Font::drawGlyphs(SkCanvas* canvas, const SkPaint& paint, const SimpleFontDa ...@@ -692,8 +665,10 @@ void Font::drawGlyphs(SkCanvas* canvas, const SkPaint& paint, const SimpleFontDa
SkFloatToScalar(point.y() + glyphBuffer.yOffsetAt(from + i))); SkFloatToScalar(point.y() + glyphBuffer.yOffsetAt(from + i)));
} }
paintGlyphs(canvas, paint, font, glyphBuffer.glyphs(from), numGlyphs, pos.data(), textRect, deviceScaleFactor); SkPaint fontPaint(paint);
canvas->restoreToCount(canvasStackLevel); font->platformData().setupPaint(&fontPaint, deviceScaleFactor, this);
fontPaint.setTextEncoding(SkPaint::kGlyphID_TextEncoding);
canvas->drawPosText(glyphBuffer.glyphs(from), numGlyphs * sizeof(Glyph), pos.data(), fontPaint);
} }
void Font::drawTextBlob(SkCanvas* canvas, const SkPaint& paint, const SkTextBlob* blob, const SkPoint& origin) const void Font::drawTextBlob(SkCanvas* canvas, const SkPaint& paint, const SkTextBlob* blob, const SkPoint& origin) const
...@@ -747,13 +722,13 @@ void Font::drawGlyphBuffer(SkCanvas* canvas, const SkPaint& paint, const TextRun ...@@ -747,13 +722,13 @@ void Font::drawGlyphBuffer(SkCanvas* canvas, const SkPaint& paint, const TextRun
const SimpleFontData* nextFontData = glyphBuffer.fontDataAt(nextGlyph); const SimpleFontData* nextFontData = glyphBuffer.fontDataAt(nextGlyph);
if (nextFontData != fontData) { if (nextFontData != fontData) {
drawGlyphs(canvas, paint, fontData, glyphBuffer, lastFrom, nextGlyph - lastFrom, point, runInfo.bounds, deviceScaleFactor); drawGlyphs(canvas, paint, fontData, glyphBuffer, lastFrom, nextGlyph - lastFrom, point, deviceScaleFactor);
lastFrom = nextGlyph; lastFrom = nextGlyph;
fontData = nextFontData; fontData = nextFontData;
} }
} }
drawGlyphs(canvas, paint, fontData, glyphBuffer, lastFrom, nextGlyph - lastFrom, point, runInfo.bounds, deviceScaleFactor); drawGlyphs(canvas, paint, fontData, glyphBuffer, lastFrom, nextGlyph - lastFrom, point, deviceScaleFactor);
} }
float Font::floatWidthForSimpleText(const TextRun& run, HashSet<const SimpleFontData*>* fallbackFonts, FloatRect* glyphBounds) const float Font::floatWidthForSimpleText(const TextRun& run, HashSet<const SimpleFontData*>* fallbackFonts, FloatRect* glyphBounds) const
......
...@@ -125,12 +125,8 @@ private: ...@@ -125,12 +125,8 @@ private:
// Returns the total advance. // Returns the total advance.
float buildGlyphBuffer(const TextRunPaintInfo&, GlyphBuffer&, const GlyphData* emphasisData = nullptr) const; float buildGlyphBuffer(const TextRunPaintInfo&, GlyphBuffer&, const GlyphData* emphasisData = nullptr) const;
PassTextBlobPtr buildTextBlob(const GlyphBuffer&) const; PassTextBlobPtr buildTextBlob(const GlyphBuffer&) const;
void paintGlyphs(SkCanvas*, const SkPaint&, const SimpleFontData*, const Glyph glyphs[], unsigned numGlyphs, void drawGlyphs(SkCanvas*, const SkPaint&, const SimpleFontData*, const GlyphBuffer&,
const SkPoint pos[], const FloatRect& textRect, float deviceScaleFactor) const; unsigned from, unsigned numGlyphs, const FloatPoint&, float deviceScaleFactor) const;
void paintGlyphsHorizontal(SkCanvas*, const SkPaint&, const SimpleFontData*, const Glyph glyphs[], unsigned numGlyphs,
const SkScalar xpos[], SkScalar constY, const FloatRect& textRect, float deviceScaleFactor) const;
void drawGlyphs(SkCanvas*, const SkPaint&, const SimpleFontData*, const GlyphBuffer&, unsigned from, unsigned numGlyphs,
const FloatPoint&, const FloatRect& textRect, float deviceScaleFactor) const;
void drawTextBlob(SkCanvas*, const SkPaint&, const SkTextBlob*, const SkPoint& origin) const; void drawTextBlob(SkCanvas*, const SkPaint&, const SkTextBlob*, const SkPoint& origin) const;
void drawGlyphBuffer(SkCanvas*, const SkPaint&, const TextRunPaintInfo&, const GlyphBuffer&, const FloatPoint&, float deviceScaleFactor) const; void drawGlyphBuffer(SkCanvas*, const SkPaint&, const TextRunPaintInfo&, const GlyphBuffer&, const FloatPoint&, float deviceScaleFactor) const;
float floatWidthForSimpleText(const TextRun&, HashSet<const SimpleFontData*>* fallbackFonts = 0, FloatRect* glyphBounds = 0) const; float floatWidthForSimpleText(const TextRun&, HashSet<const SimpleFontData*>* fallbackFonts = 0, FloatRect* glyphBounds = 0) const;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment