# HG changeset patch # User Kenichi Handa # Date 1210728842 0 # Node ID 4ac20761f2648c7c84e91c51755d21a186a30e21 # Parent 37f386db63ed6d9454ac06236f6410cb0bfb070b (ftxfont_list): Return a list, not vector. (ftxfont_open): Return a font-ojbect. Adjusted for the change of struct font. Get underline_thickness and underline_position from font property. Don't update dpyinfo->smallest_font_height and dpyinfo->smallest_char_width. (ftxfont_close): Don't decrese FRAME_X_DISPLAY_INFO (f)->n_fonts. (ftxfont_draw): Adjusted for the change of struct font. diff -r 37f386db63ed -r 4ac20761f264 src/ftxfont.c --- a/src/ftxfont.c Wed May 14 01:28:01 2008 +0000 +++ b/src/ftxfont.c Wed May 14 01:34:02 2008 +0000 @@ -244,7 +244,7 @@ /* Prototypes for font-driver methods. */ static Lisp_Object ftxfont_list P_ ((Lisp_Object, Lisp_Object)); static Lisp_Object ftxfont_match P_ ((Lisp_Object, Lisp_Object)); -static struct font *ftxfont_open P_ ((FRAME_PTR, Lisp_Object, int)); +static Lisp_Object ftxfont_open P_ ((FRAME_PTR, Lisp_Object, int)); static void ftxfont_close P_ ((FRAME_PTR, struct font *)); static int ftxfont_draw P_ ((struct glyph_string *, int, int, int, int, int)); @@ -255,16 +255,11 @@ Lisp_Object frame; Lisp_Object spec; { - Lisp_Object val = ftfont_driver.list (frame, spec); + Lisp_Object list = ftfont_driver.list (frame, spec), tail; - if (! NILP (val)) - { - int i; - - for (i = 0; i < ASIZE (val); i++) - ASET (AREF (val, i), FONT_TYPE_INDEX, Qftx); - } - return val; + for (tail = list; CONSP (tail); tail = XCDR (tail)) + ASET (XCAR (tail), FONT_TYPE_INDEX, Qftx); + return list; } static Lisp_Object @@ -279,62 +274,22 @@ return entity; } -static struct font * +static Lisp_Object ftxfont_open (f, entity, pixel_size) FRAME_PTR f; Lisp_Object entity; int pixel_size; { Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + Lisp_Object font_object; struct font *font; - XFontStruct *xfont = malloc (sizeof (XFontStruct)); - - if (! xfont) - return NULL; - font = ftfont_driver.open (f, entity, pixel_size); - if (! font) - { - free (xfont); - return NULL; - } - xfont->fid = (Font) 0; - xfont->ascent = font->ascent; - xfont->descent = font->descent; - xfont->max_bounds.width = font->font.size; - xfont->min_bounds.width = font->min_width; - font->font.font = xfont; - font->driver = &ftxfont_driver; - - dpyinfo->n_fonts++; - /* Set global flag fonts_changed_p to non-zero if the font loaded - has a character with a smaller width than any other character - before, or if the font loaded has a smaller height than any other - font loaded before. If this happens, it will make a glyph matrix - reallocation necessary. */ - if (dpyinfo->n_fonts == 1) - { - dpyinfo->smallest_font_height = font->font.height; - dpyinfo->smallest_char_width = font->min_width; - fonts_changed_p = 1; - } - else - { - if (dpyinfo->smallest_font_height > font->font.height) - dpyinfo->smallest_font_height = font->font.height, fonts_changed_p |= 1; - if (dpyinfo->smallest_char_width > font->min_width) - dpyinfo->smallest_char_width = font->min_width, fonts_changed_p |= 1; - } - - if (fonts_changed_p) - { - if (dpyinfo->smallest_font_height == 0) - dpyinfo->smallest_font_height = 1; - if (dpyinfo->smallest_char_width == 0) - dpyinfo->smallest_char_width = 1; - } - - return font; + font_object = ftfont_driver.open (f, entity, pixel_size); + if (NILP (font_object)) + return Qnil; + font = XFONT_OBJECT (font_object); + font->driver = &ftxfont_driver; + return font_object; } static void @@ -343,7 +298,6 @@ struct font *font; { ftfont_driver.close (f, font); - FRAME_X_DISPLAY_INFO (f)->n_fonts--; } static int @@ -353,7 +307,7 @@ { FRAME_PTR f = s->f; struct face *face = s->face; - struct font *font = (struct font *) s->font_info; + struct font *font = s->font; XPoint p[0x700]; int n[7]; unsigned *code;