Chromium Code Reviews| Index: third_party/WebKit/Source/core/layout/LayoutTextControl.cpp |
| diff --git a/third_party/WebKit/Source/core/layout/LayoutTextControl.cpp b/third_party/WebKit/Source/core/layout/LayoutTextControl.cpp |
| index 0b87e69471d1ea3a3d4236788629a02bb3089c0b..e8ee104847271c40bf0e0a1bf8b00699bf61c968 100644 |
| --- a/third_party/WebKit/Source/core/layout/LayoutTextControl.cpp |
| +++ b/third_party/WebKit/Source/core/layout/LayoutTextControl.cpp |
| @@ -189,8 +189,15 @@ static const char* const fontFamiliesWithInvalidCharWidth[] = { |
| // from the width of a '0'. This only seems to apply to a fixed number of Mac fonts, |
| // but, in order to get similar rendering across platforms, we do this check for |
| // all platforms. |
| -bool LayoutTextControl::hasValidAvgCharWidth(const AtomicString& family) |
| +bool LayoutTextControl::hasValidAvgCharWidth(const SimpleFontData* font, const AtomicString& family) |
|
kochi
2016/07/13 09:36:12
Can't this be "const SimpleFontData& font"?
(that
kojii
2016/07/13 11:20:35
Making "*" to "&" doesn't assure non-null, so it c
tkent
2016/07/13 23:14:35
In this case,
* making the argument type |const S
tkent
2016/07/14 00:07:09
eae@ just added a runtime null check. https://code
|
| { |
| + // Some fonts match avgCharWidth to CJK full-width characters. |
| + // Heuristic check to avoid such fonts. |
| + DCHECK(font); |
| + const FontMetrics& metrics = font->getFontMetrics(); |
| + if (metrics.hasZeroWidth() && font->avgCharWidth() > metrics.zeroWidth() * 1.7) |
| + return false; |
| + |
| static HashSet<AtomicString>* fontFamiliesWithInvalidCharWidthMap = nullptr; |
| if (family.isEmpty()) |
| @@ -209,10 +216,9 @@ bool LayoutTextControl::hasValidAvgCharWidth(const AtomicString& family) |
| float LayoutTextControl::getAvgCharWidth(const AtomicString& family) const |
| { |
| const Font& font = style()->font(); |
| - if (hasValidAvgCharWidth(family)) { |
| - ASSERT(font.primaryFont()); |
| - return roundf(font.primaryFont()->avgCharWidth()); |
| - } |
| + const SimpleFontData* primaryFont = font.primaryFont(); |
| + if (hasValidAvgCharWidth(primaryFont, family)) |
| + return roundf(primaryFont->avgCharWidth()); |
| const UChar ch = '0'; |
| const String str = String(&ch, 1); |