diff options
author | Robert Pluim <rpluim@gmail.com> | 2019-02-08 15:36:56 +0100 |
---|---|---|
committer | Robert Pluim <rpluim@gmail.com> | 2019-02-08 15:36:56 +0100 |
commit | 015a6e1df2772bd43680df5cbeaffccf98a881da (patch) | |
tree | beb0f733dc04259d9fdf896ece841bce859b2c1e /src/ftfont.c | |
parent | 066a2b4914592478153983b587a36d226061dd89 (diff) | |
download | emacs-015a6e1df2772bd43680df5cbeaffccf98a881da.tar.gz |
Unify three font info structures
* src/ftfont.h (struct font_info): New type, unifies similar types
from ftcrfont.c, ftfont.c and xftfont.c
* src/xftfont.c (struct xftfont_info): Remove, replace with struct
font_info. Adjust all uses.
* src/ftcrfont.c (struct ftcrfont_info): Likewise.
* src/ftfont.c (struct ftfont_info): Likewise.
(cherry picked from commit 9e0d69b5a17a0fa3b0dd099a51584a85f3ddb5bf)
Diffstat (limited to 'src/ftfont.c')
-rw-r--r-- | src/ftfont.c | 63 |
1 files changed, 26 insertions, 37 deletions
diff --git a/src/ftfont.c b/src/ftfont.c index c2662875f8b..63df123001f 100644 --- a/src/ftfont.c +++ b/src/ftfont.c @@ -24,6 +24,17 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */ #include <fontconfig/fontconfig.h> #include <fontconfig/fcfreetype.h> +/* These two blocks are here because this file is built when using XFT + and when using Cairo, so struct font_info in ftfont.h needs access + to the appropriate types. */ +#ifdef HAVE_XFT +# include <X11/Xlib.h> +# include <X11/Xft/Xft.h> +#endif +#ifdef USE_CAIRO +# include <cairo-ft.h> +#endif + #include <c-strcase.h> #include "lisp.h" @@ -49,28 +60,6 @@ static Lisp_Object freetype_font_cache; /* Cache for FT_Face and FcCharSet. */ static Lisp_Object ft_face_cache; -/* The actual structure for FreeType font that can be cast to struct - font. */ - -struct ftfont_info -{ - struct font font; -#ifdef HAVE_LIBOTF - /* The following four members must be here in this order to be - compatible with struct xftfont_info (in xftfont.c). */ - bool maybe_otf; /* Flag to tell if this may be OTF or not. */ - OTF *otf; -#endif /* HAVE_LIBOTF */ -#ifdef HAVE_HARFBUZZ - hb_font_t *hb_font; -#endif /* HAVE_HARFBUZZ */ - FT_Size ft_size; - int index; - FT_Matrix matrix; -}; - -size_t ftfont_info_size = sizeof (struct ftfont_info); - enum ftfont_cache_for { FTFONT_CACHE_FOR_FACE, @@ -455,7 +444,7 @@ ftfont_get_fc_charset (Lisp_Object entity) #ifdef HAVE_LIBOTF static OTF * -ftfont_get_otf (struct ftfont_info *ftfont_info) +ftfont_get_otf (struct font_info *ftfont_info) { OTF *otf; @@ -479,7 +468,7 @@ ftfont_get_otf (struct ftfont_info *ftfont_info) #ifdef HAVE_HARFBUZZ static hb_font_t * -ftfont_get_hb_font (struct ftfont_info *ftfont_info) +ftfont_get_hb_font (struct font_info *ftfont_info) { if (! ftfont_info->hb_font) ftfont_info->hb_font @@ -1111,7 +1100,7 @@ ftfont_open2 (struct frame *f, int pixel_size, Lisp_Object font_object) { - struct ftfont_info *ftfont_info; + struct font_info *ftfont_info; struct font *font; struct ftfont_cache_data *cache_data; FT_Face ft_face; @@ -1162,7 +1151,7 @@ ftfont_open2 (struct frame *f, ASET (font_object, FONT_FILE_INDEX, filename); font = XFONT_OBJECT (font_object); - ftfont_info = (struct ftfont_info *) font; + ftfont_info = (struct font_info *) font; ftfont_info->ft_size = ft_face->size; ftfont_info->index = XFIXNUM (idx); #ifdef HAVE_LIBOTF @@ -1255,7 +1244,7 @@ ftfont_open (struct frame *f, Lisp_Object entity, int pixel_size) size = XFIXNUM (AREF (entity, FONT_SIZE_INDEX)); if (size == 0) size = pixel_size; - font_object = font_build_object (VECSIZE (struct ftfont_info), + font_object = font_build_object (VECSIZE (struct font_info), Qfreetype, entity, size); return ftfont_open2 (f, entity, pixel_size, font_object); } @@ -1266,7 +1255,7 @@ ftfont_close (struct font *font) if (font_data_structures_may_be_ill_formed ()) return; - struct ftfont_info *ftfont_info = (struct ftfont_info *) font; + struct font_info *ftfont_info = (struct font_info *) font; Lisp_Object val, cache; val = Fcons (font->props[FONT_FILE_INDEX], make_fixnum (ftfont_info->index)); @@ -1314,9 +1303,9 @@ ftfont_has_char (Lisp_Object font, int c) } else { - struct ftfont_info *ftfont_info; + struct font_info *ftfont_info; - ftfont_info = (struct ftfont_info *) XFONT_OBJECT (font); + ftfont_info = (struct font_info *) XFONT_OBJECT (font); return (FT_Get_Char_Index (ftfont_info->ft_size->face, (FT_ULong) c) != 0); } @@ -1325,7 +1314,7 @@ ftfont_has_char (Lisp_Object font, int c) unsigned ftfont_encode_char (struct font *font, int c) { - struct ftfont_info *ftfont_info = (struct ftfont_info *) font; + struct font_info *ftfont_info = (struct font_info *) font; FT_Face ft_face = ftfont_info->ft_size->face; FT_ULong charcode = c; FT_UInt code = FT_Get_Char_Index (ft_face, charcode); @@ -1355,7 +1344,7 @@ void ftfont_text_extents (struct font *font, unsigned int *code, int nglyphs, struct font_metrics *metrics) { - struct ftfont_info *ftfont_info = (struct ftfont_info *) font; + struct font_info *ftfont_info = (struct font_info *) font; FT_Face ft_face = ftfont_info->ft_size->face; int i, width = 0; bool first; @@ -1396,7 +1385,7 @@ ftfont_text_extents (struct font *font, unsigned int *code, int ftfont_get_bitmap (struct font *font, unsigned int code, struct font_bitmap *bitmap, int bits_per_pixel) { - struct ftfont_info *ftfont_info = (struct ftfont_info *) font; + struct font_info *ftfont_info = (struct font_info *) font; FT_Face ft_face = ftfont_info->ft_size->face; FT_Int32 load_flags = FT_LOAD_RENDER; @@ -1440,7 +1429,7 @@ int ftfont_anchor_point (struct font *font, unsigned int code, int idx, int *x, int *y) { - struct ftfont_info *ftfont_info = (struct ftfont_info *) font; + struct font_info *ftfont_info = (struct font_info *) font; FT_Face ft_face = ftfont_info->ft_size->face; if (ftfont_info->ft_size != ft_face->size) @@ -1505,7 +1494,7 @@ ftfont_otf_features (OTF_GSUB_GPOS *gsub_gpos) Lisp_Object ftfont_otf_capability (struct font *font) { - struct ftfont_info *ftfont_info = (struct ftfont_info *) font; + struct font_info *ftfont_info = (struct font_info *) font; OTF *otf = ftfont_get_otf (ftfont_info); Lisp_Object gsub_gpos; @@ -2658,7 +2647,7 @@ ftfont_shape_by_flt (Lisp_Object lgstring, struct font *font, int ftfont_variation_glyphs (struct font *font, int c, unsigned variations[256]) { - struct ftfont_info *ftfont_info = (struct ftfont_info *) font; + struct font_info *ftfont_info = (struct font_info *) font; OTF *otf = ftfont_get_otf (ftfont_info); if (! otf) @@ -2946,7 +2935,7 @@ Lisp_Object ftfont_shape (Lisp_Object lgstring, Lisp_Object direction) { struct font *font = CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring)); - struct ftfont_info *ftfont_info = (struct ftfont_info *) font; + struct font_info *ftfont_info = (struct font_info *) font; #ifdef HAVE_HARFBUZZ if (getenv ("EMACS_NO_HARFBUZZ") == NULL) { |