Chromium Code Reviews| Index: third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.cpp |
| diff --git a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.cpp b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.cpp |
| index f2fa9f7fa472bea7b7ff7d3d04b4eb6cc8b56776..0a711eced0a571625370ce4fb8287be3535a2be4 100644 |
| --- a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.cpp |
| +++ b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.cpp |
| @@ -756,20 +756,22 @@ TextMetrics* CanvasRenderingContext2D::measureText(const String& text) { |
| true); |
| // x direction |
| - metrics->setWidth(font.width(textRun)); |
| - metrics->setActualBoundingBoxLeft(-textBounds.x()); |
| - metrics->setActualBoundingBoxRight(textBounds.maxX()); |
| + metrics->setWidth(SkScalarRoundToInt(font.width(textRun))); |
| + metrics->setActualBoundingBoxLeft(SkScalarRoundToInt(-textBounds.x())); |
| + metrics->setActualBoundingBoxRight(SkScalarRoundToInt(textBounds.maxX())); |
| // y direction |
| const FontMetrics& fontMetrics = font.getFontMetrics(); |
| - const float ascent = fontMetrics.floatAscent(); |
| - const float descent = fontMetrics.floatDescent(); |
| - const float baselineY = getFontBaseline(fontMetrics); |
| + const float ascent = fontMetrics.ascent(); |
| + const float descent = fontMetrics.descent(); |
| + const float baselineY = SkScalarRoundToInt(getFontBaseline(fontMetrics)); |
| metrics->setFontBoundingBoxAscent(ascent - baselineY); |
| metrics->setFontBoundingBoxDescent(descent + baselineY); |
| - metrics->setActualBoundingBoxAscent(-textBounds.y() - baselineY); |
| - metrics->setActualBoundingBoxDescent(textBounds.maxY() + baselineY); |
| + metrics->setActualBoundingBoxAscent(SkScalarRoundToInt(-textBounds.y()) - |
| + baselineY); |
| + metrics->setActualBoundingBoxDescent(SkScalarRoundToInt(textBounds.maxY()) + |
| + baselineY); |
| // Note : top/bottom and ascend/descend are currently the same, so there's no |
| // difference between the EM box's top and bottom and the font's ascend and |
| @@ -865,6 +867,7 @@ void CanvasRenderingContext2D::drawTextInternal( |
| FloatRect(location.x() - fontMetrics.height() / 2, |
| location.y() - fontMetrics.ascent() - fontMetrics.lineGap(), |
| width + fontMetrics.height(), fontMetrics.lineSpacing()); |
| + |
| if (paintType == CanvasRenderingContext2DState::StrokePaintType) |
| inflateStrokeRect(textRunPaintInfo.bounds); |
| @@ -898,22 +901,22 @@ const Font& CanvasRenderingContext2D::accessFont() { |
| return state().font(); |
| } |
| -int CanvasRenderingContext2D::getFontBaseline( |
| +float CanvasRenderingContext2D::getFontBaseline( |
| const FontMetrics& fontMetrics) const { |
| switch (state().getTextBaseline()) { |
| case TopTextBaseline: |
| - return fontMetrics.ascent(); |
| + return fontMetrics.floatAscent(); |
|
eae
2016/10/04 20:43:11
In CanvasRenderingContext2D::measureText you chang
zakerinasab1
2016/10/06 20:02:52
Fixed.
|
| case HangingTextBaseline: |
| // According to |
| // http://wiki.apache.org/xmlgraphics-fop/LineLayout/AlignmentHandling |
| // "FOP (Formatting Objects Processor) puts the hanging baseline at 80% of |
| // the ascender height" |
| - return (fontMetrics.ascent() * 4) / 5; |
| + return (fontMetrics.floatAscent() * 4.0) / 5.0; |
| case BottomTextBaseline: |
| case IdeographicTextBaseline: |
| - return -fontMetrics.descent(); |
| + return -fontMetrics.floatDescent(); |
| case MiddleTextBaseline: |
| - return -fontMetrics.descent() + fontMetrics.height() / 2; |
| + return -fontMetrics.floatDescent() + fontMetrics.height() / 2.0; |
| case AlphabeticTextBaseline: |
| default: |
| // Do nothing. |