/* 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
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 <http://www.gnu.org/licenses/>. */
#include <config.h>
#include <stdio.h>
GCForeground | GCBackground, &xgcv);
XSetForeground (FRAME_X_DISPLAY (f), gc, xgcv.background);
XFillRectangle (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), gc,
- x, y - font->ascent, width, y + font->descent);
+ x, y - FONT_BASE (font), width, FONT_HEIGHT (font));
XSetForeground (FRAME_X_DISPLAY (f), gc, xgcv.foreground);
}
/* 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));
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
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
struct font *font;
{
ftfont_driver.close (f, font);
- FRAME_X_DISPLAY_INFO (f)->n_fonts--;
}
static int
{
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;