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;