aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorYAMAMOTO Mitsuharu2019-06-02 13:33:43 +0900
committerYAMAMOTO Mitsuharu2019-06-02 13:33:43 +0900
commit295572c6f603c7150f68f3a7479fb0969b2f86d0 (patch)
treebe63752fccbd05d7863fe7329e717da77d3f803f /src
parent2ae0c7a434dcdcc53e2ccfc758093714b0695c3b (diff)
downloademacs-295572c6f603c7150f68f3a7479fb0969b2f86d0.tar.gz
emacs-295572c6f603c7150f68f3a7479fb0969b2f86d0.zip
Implement the get_variation_glyphs method for FreeType >= 2.3.6
* configure.ac: Check availability of FT_Face_GetCharVariantIndex. * src/ftfont.c (ftfont_variation_glyphs) [HAVE_FT_FACE_GETCHARVARIANTINDEX]: Add function implementation. * src/ftcrfont.c (ftcrfont_variation_glyphs) [HAVE_FT_FACE_GETCHARVARIANTINDEX]: Use function implementation for HAVE_OTF_GET_VARIATION_GLYPHS. * src/ftfont.c (ftfont_driver) [HAVE_FT_FACE_GETCHARVARIANTINDEX]: * src/xftfont.c (xftfont_driver) [HAVE_FT_FACE_GETCHARVARIANTINDEX]: * src/ftxfont.c (ftxfont_driver) [HAVE_FT_FACE_GETCHARVARIANTINDEX]: * src/ftcrfont.c (ftcrfont_driver) [HAVE_FT_FACE_GETCHARVARIANTINDEX]: Populate the get_variation_glyphs method.
Diffstat (limited to 'src')
-rw-r--r--src/ftcrfont.c6
-rw-r--r--src/ftfont.c30
-rw-r--r--src/ftxfont.c2
-rw-r--r--src/xftfont.c2
4 files changed, 30 insertions, 10 deletions
diff --git a/src/ftcrfont.c b/src/ftcrfont.c
index 0c3b74ff289..1c28a7ceb67 100644
--- a/src/ftcrfont.c
+++ b/src/ftcrfont.c
@@ -455,7 +455,7 @@ ftcrfont_shape (Lisp_Object lgstring, Lisp_Object direction)
455} 455}
456#endif 456#endif
457 457
458#ifdef HAVE_OTF_GET_VARIATION_GLYPHS 458#if defined HAVE_OTF_GET_VARIATION_GLYPHS || defined HAVE_FT_FACE_GETCHARVARIANTINDEX
459static int 459static int
460ftcrfont_variation_glyphs (struct font *font, int c, unsigned variations[256]) 460ftcrfont_variation_glyphs (struct font *font, int c, unsigned variations[256])
461{ 461{
@@ -470,7 +470,7 @@ ftcrfont_variation_glyphs (struct font *font, int c, unsigned variations[256])
470 470
471 return result; 471 return result;
472} 472}
473#endif /* HAVE_OTF_GET_VARIATION_GLYPHS */ 473#endif /* HAVE_OTF_GET_VARIATION_GLYPHS || HAVE_FT_FACE_GETCHARVARIANTINDEX */
474 474
475static int 475static int
476ftcrfont_draw (struct glyph_string *s, 476ftcrfont_draw (struct glyph_string *s,
@@ -583,7 +583,7 @@ struct font_driver const ftcrfont_driver =
583#if defined HAVE_M17N_FLT && defined HAVE_LIBOTF 583#if defined HAVE_M17N_FLT && defined HAVE_LIBOTF
584 .shape = ftcrfont_shape, 584 .shape = ftcrfont_shape,
585#endif 585#endif
586#ifdef HAVE_OTF_GET_VARIATION_GLYPHS 586#if defined HAVE_OTF_GET_VARIATION_GLYPHS || defined HAVE_FT_FACE_GETCHARVARIANTINDEX
587 .get_variation_glyphs = ftcrfont_variation_glyphs, 587 .get_variation_glyphs = ftcrfont_variation_glyphs,
588#endif 588#endif
589 .filter_properties = ftfont_filter_properties, 589 .filter_properties = ftfont_filter_properties,
diff --git a/src/ftfont.c b/src/ftfont.c
index 97ab4d0e377..efd0fcbd8c0 100644
--- a/src/ftfont.c
+++ b/src/ftfont.c
@@ -2820,21 +2820,41 @@ ftfont_shape (Lisp_Object lgstring, Lisp_Object direction)
2820 2820
2821#endif /* HAVE_M17N_FLT */ 2821#endif /* HAVE_M17N_FLT */
2822 2822
2823#ifdef HAVE_OTF_GET_VARIATION_GLYPHS 2823#endif /* HAVE_LIBOTF */
2824 2824
2825#if defined HAVE_OTF_GET_VARIATION_GLYPHS || defined HAVE_FT_FACE_GETCHARVARIANTINDEX
2825int 2826int
2826ftfont_variation_glyphs (struct font *font, int c, unsigned variations[256]) 2827ftfont_variation_glyphs (struct font *font, int c, unsigned variations[256])
2827{ 2828{
2828 struct font_info *ftfont_info = (struct font_info *) font; 2829 struct font_info *ftfont_info = (struct font_info *) font;
2830#ifdef HAVE_OTF_GET_VARIATION_GLYPHS
2829 OTF *otf = ftfont_get_otf (ftfont_info); 2831 OTF *otf = ftfont_get_otf (ftfont_info);
2830 2832
2831 if (! otf) 2833 if (! otf)
2832 return 0; 2834 return 0;
2833 return OTF_get_variation_glyphs (otf, c, variations); 2835 return OTF_get_variation_glyphs (otf, c, variations);
2834} 2836#else /* !HAVE_OTF_GET_VARIATION_GLYPHS */
2837 FT_Face ft_face = ftfont_info->ft_size->face;
2838 int i, n = 0;
2835 2839
2836#endif /* HAVE_OTF_GET_VARIATION_GLYPHS */ 2840 for (i = 0; i < 16; i++)
2837#endif /* HAVE_LIBOTF */ 2841 {
2842 variations[i] = FT_Face_GetCharVariantIndex (ft_face, c, 0xFE00 + i);
2843 if (variations[i])
2844 n++;
2845 }
2846 for (; i < 256; i++)
2847 {
2848 variations[i] = FT_Face_GetCharVariantIndex (ft_face, c,
2849 0xE0100 + (i - 16));
2850 if (variations[i])
2851 n++;
2852 }
2853
2854 return n;
2855#endif /* !HAVE_OTF_GET_VARIATION_GLYPHS */
2856}
2857#endif /* HAVE_OTF_GET_VARIATION_GLYPHS || HAVE_FT_FACE_GETCHARVARIANTINDEX */
2838 2858
2839#ifdef HAVE_HARFBUZZ 2859#ifdef HAVE_HARFBUZZ
2840 2860
@@ -2936,7 +2956,7 @@ static struct font_driver const ftfont_driver =
2936#if defined HAVE_M17N_FLT && defined HAVE_LIBOTF 2956#if defined HAVE_M17N_FLT && defined HAVE_LIBOTF
2937 .shape = ftfont_shape, 2957 .shape = ftfont_shape,
2938#endif 2958#endif
2939#ifdef HAVE_OTF_GET_VARIATION_GLYPHS 2959#if defined HAVE_OTF_GET_VARIATION_GLYPHS || defined HAVE_FT_FACE_GETCHARVARIANTINDEX
2940 .get_variation_glyphs = ftfont_variation_glyphs, 2960 .get_variation_glyphs = ftfont_variation_glyphs,
2941#endif 2961#endif
2942 .filter_properties = ftfont_filter_properties, 2962 .filter_properties = ftfont_filter_properties,
diff --git a/src/ftxfont.c b/src/ftxfont.c
index da3e3fbae10..b1467360ad6 100644
--- a/src/ftxfont.c
+++ b/src/ftxfont.c
@@ -351,7 +351,7 @@ struct font_driver const ftxfont_driver =
351#if defined HAVE_M17N_FLT && defined HAVE_LIBOTF 351#if defined HAVE_M17N_FLT && defined HAVE_LIBOTF
352 .shape = ftfont_shape, 352 .shape = ftfont_shape,
353#endif 353#endif
354#ifdef HAVE_OTF_GET_VARIATION_GLYPHS 354#if defined HAVE_OTF_GET_VARIATION_GLYPHS || defined HAVE_FT_FACE_GETCHARVARIANTINDEX
355 .get_variation_glyphs = ftfont_variation_glyphs, 355 .get_variation_glyphs = ftfont_variation_glyphs,
356#endif 356#endif
357 .filter_properties = ftfont_filter_properties, 357 .filter_properties = ftfont_filter_properties,
diff --git a/src/xftfont.c b/src/xftfont.c
index c1b93b76f57..04cda12fb52 100644
--- a/src/xftfont.c
+++ b/src/xftfont.c
@@ -661,7 +661,7 @@ struct font_driver const xftfont_driver =
661#if defined HAVE_M17N_FLT && defined HAVE_LIBOTF 661#if defined HAVE_M17N_FLT && defined HAVE_LIBOTF
662 .shape = xftfont_shape, 662 .shape = xftfont_shape,
663#endif 663#endif
664#ifdef HAVE_OTF_GET_VARIATION_GLYPHS 664#if defined HAVE_OTF_GET_VARIATION_GLYPHS || defined HAVE_FT_FACE_GETCHARVARIANTINDEX
665 .get_variation_glyphs = ftfont_variation_glyphs, 665 .get_variation_glyphs = ftfont_variation_glyphs,
666#endif 666#endif
667 .filter_properties = ftfont_filter_properties, 667 .filter_properties = ftfont_filter_properties,