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. |