Partially revert "[ft/ot] Remove implementation of deprecated kerning funcs"
authorBehdad Esfahbod <behdad@behdad.org>
Mon, 17 Jun 2019 20:39:49 +0000 (13:39 -0700)
committerBehdad Esfahbod <behdad@behdad.org>
Mon, 17 Jun 2019 20:39:49 +0000 (13:39 -0700)
This reverts commit 47030b1855f04c0d75899ffb6f5021fea3c19b90.

Reverts only the hb-ft part, to reinstate non-OpenType kerning with
FreeType.

Fixes https://github.com/harfbuzz/harfbuzz/issues/1682

src/hb-ft.cc

index d70c38a..c24a0e2 100644 (file)
@@ -346,6 +346,23 @@ hb_ft_get_glyph_v_origin (hb_font_t *font,
   return true;
 }
 
+static hb_position_t
+hb_ft_get_glyph_h_kerning (hb_font_t *font,
+                          void *font_data,
+                          hb_codepoint_t left_glyph,
+                          hb_codepoint_t right_glyph,
+                          void *user_data HB_UNUSED)
+{
+  const hb_ft_font_t *ft_font = (const hb_ft_font_t *) font_data;
+  FT_Vector kerningv;
+
+  FT_Kerning_Mode mode = font->x_ppem ? FT_KERNING_DEFAULT : FT_KERNING_UNFITTED;
+  if (FT_Get_Kerning (ft_font->ft_face, left_glyph, right_glyph, mode, &kerningv))
+    return 0;
+
+  return kerningv.x;
+}
+
 static hb_bool_t
 hb_ft_get_glyph_extents (hb_font_t *font,
                         void *font_data,
@@ -497,6 +514,8 @@ static struct hb_ft_font_funcs_lazy_loader_t : hb_font_funcs_lazy_loader_t<hb_ft
     hb_font_funcs_set_glyph_v_advance_func (funcs, hb_ft_get_glyph_v_advance, nullptr, nullptr);
     //hb_font_funcs_set_glyph_h_origin_func (funcs, hb_ft_get_glyph_h_origin, nullptr, nullptr);
     hb_font_funcs_set_glyph_v_origin_func (funcs, hb_ft_get_glyph_v_origin, nullptr, nullptr);
+    hb_font_funcs_set_glyph_h_kerning_func (funcs, hb_ft_get_glyph_h_kerning, nullptr, nullptr);
+    //hb_font_funcs_set_glyph_v_kerning_func (funcs, hb_ft_get_glyph_v_kerning, nullptr, nullptr);
     hb_font_funcs_set_glyph_extents_func (funcs, hb_ft_get_glyph_extents, nullptr, nullptr);
     hb_font_funcs_set_glyph_contour_point_func (funcs, hb_ft_get_glyph_contour_point, nullptr, nullptr);
     hb_font_funcs_set_glyph_name_func (funcs, hb_ft_get_glyph_name, nullptr, nullptr);