Index: third_party/WebKit/Source/core/layout/svg/SVGTextLayoutEngineBaseline.cpp |
diff --git a/third_party/WebKit/Source/core/layout/svg/SVGTextLayoutEngineBaseline.cpp b/third_party/WebKit/Source/core/layout/svg/SVGTextLayoutEngineBaseline.cpp |
index 560d971671948399be37b02732835171d124d411..0098b75fa8a9f862180fed1fe24d248d5df0d7ba 100644 |
--- a/third_party/WebKit/Source/core/layout/svg/SVGTextLayoutEngineBaseline.cpp |
+++ b/third_party/WebKit/Source/core/layout/svg/SVGTextLayoutEngineBaseline.cpp |
@@ -39,6 +39,19 @@ float SVGTextLayoutEngineBaseline::calculateBaselineShift( |
if (!fontData) |
return 0; |
+ // If font size is smaller than 3, rounding ascent and descent values in |
+ // SimpleFontData sets the baseline shifts for superscript and subscript to |
+ // zero. In this case, we use subpixel ascent and descent. |
+ if (m_font.getFontDescription().getSize().value < 3.0) { |
+ const SimpleFontData* altFontData = |
+ fontData->subpixelAscentDescentFontData().get(); |
+ if (altFontData) |
+ fontData = altFontData; |
+ } |
+ DCHECK(fontData); |
+ if (!fontData) |
+ return 0; |
+ |
DCHECK(m_effectiveZoom); |
switch (svgStyle.baselineShift()) { |
case BS_LENGTH: |
@@ -131,6 +144,19 @@ float SVGTextLayoutEngineBaseline::calculateAlignmentBaselineShift( |
if (!fontData) |
return 0; |
+ // If font size is smaller than 3, rounding ascent and descent values in |
+ // SimpleFontData sets the baseline shifts for superscript and subscript to |
+ // zero. In this case, we use subpixel ascent and descent. |
+ if (m_font.getFontDescription().getSize().value < 3.0) { |
+ const SimpleFontData* altFontData = |
+ fontData->subpixelAscentDescentFontData().get(); |
+ if (altFontData) |
+ fontData = altFontData; |
+ } |
+ DCHECK(fontData); |
+ if (!fontData) |
+ return 0; |
+ |
const FontMetrics& fontMetrics = fontData->getFontMetrics(); |
float ascent = fontMetrics.floatAscent() / m_effectiveZoom; |
float descent = fontMetrics.floatDescent() / m_effectiveZoom; |