diff options
author | Kenichi Handa <handa@m17n.org> | 2008-05-14 01:34:02 +0000 |
---|---|---|
committer | Kenichi Handa <handa@m17n.org> | 2008-05-14 01:34:02 +0000 |
commit | a952e54c4a2510de9592a48a187636576cd5f382 (patch) | |
tree | 9eefefc4782e70b06868b284b431658eb6c43560 /src/ftxfont.c | |
parent | 42984a746c17fd54c187bcf69f4609d59f1d0f86 (diff) | |
download | emacs-a952e54c4a2510de9592a48a187636576cd5f382.tar.gz |
(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.
Diffstat (limited to 'src/ftxfont.c')
-rw-r--r-- | src/ftxfont.c | 74 |
1 files changed, 14 insertions, 60 deletions
diff --git a/src/ftxfont.c b/src/ftxfont.c index d575182ef85..4254b11b35e 100644 --- a/src/ftxfont.c +++ b/src/ftxfont.c @@ -244,7 +244,7 @@ ftxfont_draw_backgrond (f, font, gc, x, y, width) /* 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 @@ ftxfont_list (frame, spec) 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 @@ ftxfont_match (frame, spec) 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 @@ ftxfont_close (f, font) struct font *font; { ftfont_driver.close (f, font); - FRAME_X_DISPLAY_INFO (f)->n_fonts--; } static int @@ -353,7 +307,7 @@ ftxfont_draw (s, from, to, x, y, with_background) { 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; |