X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/a864ef14570715dc3233fbbf2e9da7aa8f29729e..9ab3ce4d2f1c6409d36072192bfce797ec189837:/src/ftfont.c diff --git a/src/ftfont.c b/src/ftfont.c index a85773a9a2..6a2303ab4a 100644 --- a/src/ftfont.c +++ b/src/ftfont.c @@ -1,5 +1,5 @@ /* ftfont.c -- FreeType font driver. - Copyright (C) 2006-2012 Free Software Foundation, Inc. + Copyright (C) 2006-2013 Free Software Foundation, Inc. Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 National Institute of Advanced Industrial Science and Technology (AIST) Registration Number H13PRO009 @@ -21,8 +21,6 @@ along with GNU Emacs. If not, see . */ #include #include -#include - #include #include @@ -395,16 +393,14 @@ ftfont_lookup_cache (Lisp_Object key, enum ftfont_cache_for cache_for) cache_data = xmalloc (sizeof *cache_data); cache_data->ft_face = NULL; cache_data->fc_charset = NULL; - val = make_save_value (NULL, 0); - XSAVE_VALUE (val)->integer = 0; - XSAVE_VALUE (val)->pointer = cache_data; + val = make_save_ptr_int (cache_data, 0); cache = Fcons (Qnil, val); Fputhash (key, cache, ft_face_cache); } else { val = XCDR (cache); - cache_data = XSAVE_VALUE (val)->pointer; + cache_data = XSAVE_POINTER (val, 0); } if (cache_for == FTFONT_CACHE_FOR_ENTITY) @@ -470,7 +466,7 @@ ftfont_get_fc_charset (Lisp_Object entity) cache = ftfont_lookup_cache (entity, FTFONT_CACHE_FOR_CHARSET); val = XCDR (cache); - cache_data = XSAVE_VALUE (val)->pointer; + cache_data = XSAVE_POINTER (val, 0); return cache_data->fc_charset; } @@ -497,12 +493,12 @@ ftfont_get_otf (struct ftfont_info *ftfont_info) } #endif /* HAVE_LIBOTF */ -static Lisp_Object ftfont_get_cache (FRAME_PTR); -static Lisp_Object ftfont_list (Lisp_Object, Lisp_Object); -static Lisp_Object ftfont_match (Lisp_Object, Lisp_Object); -static Lisp_Object ftfont_list_family (Lisp_Object); -static Lisp_Object ftfont_open (FRAME_PTR, Lisp_Object, int); -static void ftfont_close (FRAME_PTR, struct font *); +static Lisp_Object ftfont_get_cache (struct frame *); +static Lisp_Object ftfont_list (struct frame *, Lisp_Object); +static Lisp_Object ftfont_match (struct frame *, Lisp_Object); +static Lisp_Object ftfont_list_family (struct frame *); +static Lisp_Object ftfont_open (struct frame *, Lisp_Object, int); +static void ftfont_close (struct font *); static int ftfont_has_char (Lisp_Object, int); static unsigned ftfont_encode_char (struct font *, int); static int ftfont_text_extents (struct font *, unsigned *, int, @@ -572,7 +568,7 @@ struct font_driver ftfont_driver = }; static Lisp_Object -ftfont_get_cache (FRAME_PTR f) +ftfont_get_cache (struct frame *f) { return freetype_font_cache; } @@ -888,7 +884,7 @@ ftfont_spec_pattern (Lisp_Object spec, char *otlayout, struct OpenTypeSpec **ots } static Lisp_Object -ftfont_list (Lisp_Object frame, Lisp_Object spec) +ftfont_list (struct frame *f, Lisp_Object spec) { Lisp_Object val = Qnil, family, adstyle; int i; @@ -1084,7 +1080,7 @@ ftfont_list (Lisp_Object frame, Lisp_Object spec) } static Lisp_Object -ftfont_match (Lisp_Object frame, Lisp_Object spec) +ftfont_match (struct frame *f, Lisp_Object spec) { Lisp_Object entity = Qnil; FcPattern *pattern, *match = NULL; @@ -1134,7 +1130,7 @@ ftfont_match (Lisp_Object frame, Lisp_Object spec) } static Lisp_Object -ftfont_list_family (Lisp_Object frame) +ftfont_list_family (struct frame *f) { Lisp_Object list = Qnil; FcPattern *pattern = NULL; @@ -1177,7 +1173,7 @@ ftfont_list_family (Lisp_Object frame) static Lisp_Object -ftfont_open (FRAME_PTR f, Lisp_Object entity, int pixel_size) +ftfont_open (struct frame *f, Lisp_Object entity, int pixel_size) { struct ftfont_info *ftfont_info; struct font *font; @@ -1202,9 +1198,9 @@ ftfont_open (FRAME_PTR f, Lisp_Object entity, int pixel_size) filename = XCAR (val); idx = XCDR (val); val = XCDR (cache); - cache_data = XSAVE_VALUE (XCDR (cache))->pointer; + cache_data = XSAVE_POINTER (XCDR (cache), 0); ft_face = cache_data->ft_face; - if (XSAVE_VALUE (val)->integer > 0) + if (XSAVE_INTEGER (val, 1) > 0) { /* FT_Face in this cache is already used by the different size. */ if (FT_New_Size (ft_face, &ft_size) != 0) @@ -1215,13 +1211,13 @@ ftfont_open (FRAME_PTR f, Lisp_Object entity, int pixel_size) return Qnil; } } - XSAVE_VALUE (val)->integer++; + set_save_integer (val, 1, XSAVE_INTEGER (val, 1) + 1); size = XINT (AREF (entity, FONT_SIZE_INDEX)); if (size == 0) size = pixel_size; if (FT_Set_Pixel_Sizes (ft_face, size, size) != 0) { - if (XSAVE_VALUE (val)->integer == 0) + if (XSAVE_INTEGER (val, 1) == 0) FT_Done_Face (ft_face); return Qnil; } @@ -1321,7 +1317,7 @@ ftfont_open (FRAME_PTR f, Lisp_Object entity, int pixel_size) } static void -ftfont_close (FRAME_PTR f, struct font *font) +ftfont_close (struct font *font) { struct ftfont_info *ftfont_info = (struct ftfont_info *) font; Lisp_Object val, cache; @@ -1330,10 +1326,10 @@ ftfont_close (FRAME_PTR f, struct font *font) cache = ftfont_lookup_cache (val, FTFONT_CACHE_FOR_FACE); eassert (CONSP (cache)); val = XCDR (cache); - (XSAVE_VALUE (val)->integer)--; - if (XSAVE_VALUE (val)->integer == 0) + set_save_integer (val, 1, XSAVE_INTEGER (val, 1) - 1); + if (XSAVE_INTEGER (val, 1) == 0) { - struct ftfont_cache_data *cache_data = XSAVE_VALUE (val)->pointer; + struct ftfont_cache_data *cache_data = XSAVE_POINTER (val, 0); FT_Done_Face (cache_data->ft_face); #ifdef HAVE_LIBOTF @@ -1482,7 +1478,6 @@ ftfont_get_bitmap (struct font *font, unsigned int code, struct font_bitmap *bit bitmap->left = ft_face->glyph->bitmap_left; bitmap->top = ft_face->glyph->bitmap_top; bitmap->advance = ft_face->glyph->metrics.horiAdvance >> 6; - bitmap->extra = NULL; return 0; } @@ -2429,7 +2424,6 @@ ftfont_shape_by_flt (Lisp_Object lgstring, struct font *font, } len = i; - lint_assume (len <= STRING_BYTES_BOUND); if (with_variation_selector) { @@ -2545,7 +2539,7 @@ ftfont_shape_by_flt (Lisp_Object lgstring, struct font *font, if (NILP (lglyph)) { - lglyph = Fmake_vector (make_number (LGLYPH_SIZE), Qnil); + lglyph = LGLYPH_NEW (); LGSTRING_SET_GLYPH (lgstring, i, lglyph); } LGLYPH_SET_FROM (lglyph, g->from); @@ -2559,9 +2553,8 @@ ftfont_shape_by_flt (Lisp_Object lgstring, struct font *font, LGLYPH_SET_DESCENT (lglyph, g->descent >> 6); if (g->adjusted) { - Lisp_Object vec; + Lisp_Object vec = make_uninit_vector (3); - vec = Fmake_vector (make_number (3), Qnil); ASET (vec, 0, make_number (g->xoff >> 6)); ASET (vec, 1, make_number (g->yoff >> 6)); ASET (vec, 2, make_number (g->xadv >> 6)); @@ -2708,13 +2701,12 @@ syms_of_ftfont (void) DEFSYM (Qsans__serif, "sans serif"); staticpro (&freetype_font_cache); - freetype_font_cache = Fcons (Qt, Qnil); + freetype_font_cache = list1 (Qt); staticpro (&ftfont_generic_family_list); - ftfont_generic_family_list - = Fcons (Fcons (Qmonospace, Qt), - Fcons (Fcons (Qsans_serif, Qt), - Fcons (Fcons (Qsans, Qt), Qnil))); + ftfont_generic_family_list = list3 (Fcons (Qmonospace, Qt), + Fcons (Qsans_serif, Qt), + Fcons (Qsans, Qt)); staticpro (&ft_face_cache); ft_face_cache = Qnil;