diff options
author | Robert Pluim <rpluim@gmail.com> | 2019-01-26 12:31:02 +0100 |
---|---|---|
committer | Robert Pluim <rpluim@gmail.com> | 2019-02-08 09:05:11 +0100 |
commit | 9e0d69b5a17a0fa3b0dd099a51584a85f3ddb5bf (patch) | |
tree | b6dcbce3d3d4ff5a6719814d26a95747118b4f67 /src/ftfont.c | |
parent | 24905e92179c2ee8cd02c26b4a7058fbd238ece7 (diff) | |
download | emacs-9e0d69b5a17a0fa3b0dd099a51584a85f3ddb5bf.tar.gz emacs-9e0d69b5a17a0fa3b0dd099a51584a85f3ddb5bf.tar.bz2 emacs-9e0d69b5a17a0fa3b0dd099a51584a85f3ddb5bf.zip |
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.
Diffstat (limited to 'src/ftfont.c')
-rw-r--r-- | src/ftfont.c | 59 |
1 files changed, 25 insertions, 34 deletions
diff --git a/src/ftfont.c b/src/ftfont.c index bcc3460cb74..3e820f583ff 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" @@ -50,26 +61,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 members up to and including 'matrix' 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 */ - 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, @@ -454,7 +445,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; @@ -1095,7 +1086,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; @@ -1146,7 +1137,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 @@ -1236,7 +1227,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); } @@ -1247,7 +1238,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)); @@ -1291,9 +1282,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); } @@ -1302,7 +1293,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); @@ -1314,7 +1305,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; @@ -1357,7 +1348,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; @@ -1401,7 +1392,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) @@ -1466,7 +1457,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; @@ -2616,7 +2607,7 @@ Lisp_Object ftfont_shape (Lisp_Object lgstring) { 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; OTF *otf = ftfont_get_otf (ftfont_info); return ftfont_shape_by_flt (lgstring, font, ftfont_info->ft_size->face, otf, @@ -2630,7 +2621,7 @@ ftfont_shape (Lisp_Object lgstring) 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) |