Chromium Code Reviews| Index: ui/gfx/render_text_harfbuzz.cc |
| diff --git a/ui/gfx/render_text_harfbuzz.cc b/ui/gfx/render_text_harfbuzz.cc |
| index 10e7a1a5276931a44ad6e8ff6643d5a03bba9ed9..138b859f1e6298b8df76a7af601875b7a073e6b7 100644 |
| --- a/ui/gfx/render_text_harfbuzz.cc |
| +++ b/ui/gfx/render_text_harfbuzz.cc |
| @@ -126,6 +126,56 @@ hb_bool_t GetGlyphHorizontalOrigin(hb_font_t* font, |
| return true; |
| } |
| +hb_position_t GetGlyphHorizontalKerning(hb_font_t*, |
|
msw
2014/05/27 22:00:59
nit: give names to even unused parameters (this an
ckocagil
2014/05/28 01:07:10
Done.
|
| + void* data, |
| + hb_codepoint_t left_glyph, |
| + hb_codepoint_t right_glyph, |
| + void*) { |
| + FontData* font_data = reinterpret_cast<FontData*>(data); |
| + if (font_data->paint_.isVerticalText()) { |
| + // We don't support cross-stream kerning. |
| + return 0; |
| + } |
| + |
| + SkTypeface* typeface = font_data->paint_.getTypeface(); |
| + const uint16_t glyphs[2] = { left_glyph, right_glyph }; |
| + int32_t kerningAdjustments[1] = { 0 }; |
|
msw
2014/05/27 22:00:59
nit: |kerning_adjustments|
ckocagil
2014/05/28 01:07:10
Done.
|
| + |
| + if (typeface->getKerningPairAdjustments(glyphs, 2, kerningAdjustments)) { |
| + SkScalar upm = SkIntToScalar(typeface->getUnitsPerEm()); |
| + SkScalar size = font_data->paint_.getTextSize(); |
| + return SkiaScalarToHarfBuzzPosition( |
| + SkScalarMulDiv(SkIntToScalar(kerningAdjustments[0]), size, upm)); |
| + } |
| + |
| + return 0; |
| +} |
| + |
| +hb_position_t GetGlyphVerticalKerning(hb_font_t*, |
| + void* data, |
| + hb_codepoint_t top_glyph, |
| + hb_codepoint_t bottom_glyph, |
| + void*) { |
| + FontData* font_data = reinterpret_cast<FontData*>(data); |
| + if (!font_data->paint_.isVerticalText()) { |
|
msw
2014/05/27 22:00:59
This is the only logical difference from the funct
ckocagil
2014/05/28 01:07:10
Done, added a common helper.
|
| + // We don't support cross-stream kerning. |
| + return 0; |
| + } |
| + |
| + SkTypeface* typeface = font_data->paint_.getTypeface(); |
| + const uint16_t glyphs[2] = { top_glyph, bottom_glyph }; |
| + int32_t kerningAdjustments[1] = { 0 }; |
|
msw
2014/05/27 22:00:59
ditto nit: |kerning_adjustments|
ckocagil
2014/05/28 01:07:10
Done.
|
| + |
| + if (typeface->getKerningPairAdjustments(glyphs, 2, kerningAdjustments)) { |
| + SkScalar upm = SkIntToScalar(typeface->getUnitsPerEm()); |
| + SkScalar size = font_data->paint_.getTextSize(); |
| + return SkiaScalarToHarfBuzzPosition( |
| + SkScalarMulDiv(SkIntToScalar(kerningAdjustments[0]), size, upm)); |
| + } |
| + |
| + return 0; |
| +} |
| + |
| // Writes the |extents| of |glyph|. |
| hb_bool_t GetGlyphExtents(hb_font_t* font, |
| void* data, |
| @@ -144,7 +194,6 @@ hb_font_funcs_t* GetFontFuncs() { |
| // We don't set callback functions which we can't support. |
| // HarfBuzz will use the fallback implementation if they aren't set. |
| - // TODO(ckocagil): Merge Blink's kerning funcs. |
| if (!font_funcs) { |
| // The object created by |hb_font_funcs_create()| below lives indefinitely |
| // and is intentionally leaked. |
| @@ -152,8 +201,12 @@ hb_font_funcs_t* GetFontFuncs() { |
| hb_font_funcs_set_glyph_func(font_funcs, GetGlyph, 0, 0); |
| hb_font_funcs_set_glyph_h_advance_func( |
| font_funcs, GetGlyphHorizontalAdvance, 0, 0); |
| + hb_font_funcs_set_glyph_h_kerning_func( |
| + font_funcs, GetGlyphHorizontalKerning, 0, 0); |
| hb_font_funcs_set_glyph_h_origin_func( |
| font_funcs, GetGlyphHorizontalOrigin, 0, 0); |
| + hb_font_funcs_set_glyph_v_kerning_func( |
| + font_funcs, GetGlyphVerticalKerning, 0, 0); |
| hb_font_funcs_set_glyph_extents_func( |
| font_funcs, GetGlyphExtents, 0, 0); |
| hb_font_funcs_make_immutable(font_funcs); |