X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/341dd15a7bd9d0b4adff846e94289b3e1877eed1..7087d5e9af41c8835c3a5090bd8e2c6893685466:/src/ftxfont.c diff --git a/src/ftxfont.c b/src/ftxfont.c index d575182ef8..dcad85ba7f 100644 --- a/src/ftxfont.c +++ b/src/ftxfont.c @@ -1,15 +1,15 @@ /* ftxfont.c -- FreeType font driver on X (without using XFT). - Copyright (C) 2006, 2007, 2008 Free Software Foundation, Inc. - Copyright (C) 2006, 2007, 2008 + Copyright (C) 2006, 2007, 2008, 2009 Free Software Foundation, Inc. + Copyright (C) 2006, 2007, 2008, 2009 National Institute of Advanced Industrial Science and Technology (AIST) Registration Number H13PRO009 This file is part of GNU Emacs. -GNU Emacs is free software; you can redistribute it and/or modify +GNU Emacs is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. GNU Emacs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -17,9 +17,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with GNU Emacs; see the file COPYING. If not, write to -the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -Boston, MA 02110-1301, USA. */ +along with GNU Emacs. If not, see . */ #include #include @@ -244,7 +242,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 +253,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 +272,21 @@ 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 +295,6 @@ ftxfont_close (f, font) struct font *font; { ftfont_driver.close (f, font); - FRAME_X_DISPLAY_INFO (f)->n_fonts--; } static int @@ -353,7 +304,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;