/* ftxfont.c -- FreeType font driver on X (without using XFT).
- 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
#include <config.h>
#include <stdio.h>
-#include <setjmp.h>
#include <X11/Xlib.h>
#include "lisp.h"
#endif
struct font_driver ftxfont_driver;
-/* Prototypes for helper function. */
-static GC *ftxfont_get_gcs (FRAME_PTR, unsigned long, unsigned long);
-static int ftxfont_draw_bitmap (FRAME_PTR, GC, GC *, struct font *,
- unsigned, int, int, XPoint *, int, int *,
- int);
-static void ftxfont_draw_background (FRAME_PTR, struct font *, GC,
- int, int, int);
-
struct ftxfont_frame_data
{
/* Background and foreground colors. */
/* Return an array of 6 GCs for antialiasing. */
static GC *
-ftxfont_get_gcs (FRAME_PTR f, long unsigned int foreground, long unsigned int background)
+ftxfont_get_gcs (struct frame *f, unsigned long foreground, unsigned long background)
{
XColor color;
XGCValues xgcv;
}
}
- new = malloc (sizeof (struct ftxfont_frame_data));
+ new = malloc (sizeof *new);
if (! new)
return NULL;
new->next = this;
new->colors[0].pixel = background;
new->colors[1].pixel = foreground;
- BLOCK_INPUT;
+ block_input ();
XQueryColors (FRAME_X_DISPLAY (f), FRAME_X_COLORMAP (f), new->colors, 2);
for (i = 1; i < 7; i++)
{
new->gcs[i - 1] = XCreateGC (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
GCForeground, &xgcv);
}
- UNBLOCK_INPUT;
+ unblock_input ();
if (i < 7)
{
- BLOCK_INPUT;
+ block_input ();
for (i--; i >= 0; i--)
XFreeGC (FRAME_X_DISPLAY (f), new->gcs[i]);
- UNBLOCK_INPUT;
+ unblock_input ();
if (prev)
prev->next = new->next;
else if (data)
}
static int
-ftxfont_draw_bitmap (FRAME_PTR f, GC gc_fore, GC *gcs, struct font *font, unsigned int code, int x, int y, XPoint *p, int size, int *n, int flush)
+ftxfont_draw_bitmap (struct frame *f, GC gc_fore, GC *gcs, struct font *font,
+ unsigned int code, int x, int y, XPoint *p, int size,
+ int *n, bool flush)
{
struct font_bitmap bitmap;
unsigned char *b;
}
static void
-ftxfont_draw_background (FRAME_PTR f, struct font *font, GC gc, int x, int y,
+ftxfont_draw_background (struct frame *f, struct font *font, GC gc, int x, int y,
int width)
{
XGCValues xgcv;
XSetForeground (FRAME_X_DISPLAY (f), gc, xgcv.foreground);
}
-/* Prototypes for font-driver methods. */
-static Lisp_Object ftxfont_list (Lisp_Object, Lisp_Object);
-static Lisp_Object ftxfont_match (Lisp_Object, Lisp_Object);
-static Lisp_Object ftxfont_open (FRAME_PTR, Lisp_Object, int);
-static void ftxfont_close (FRAME_PTR, struct font *);
-static int ftxfont_draw (struct glyph_string *, int, int, int, int, int);
-
static Lisp_Object
-ftxfont_list (Lisp_Object frame, Lisp_Object spec)
+ftxfont_list (struct frame *f, Lisp_Object spec)
{
- Lisp_Object list = ftfont_driver.list (frame, spec), tail;
+ Lisp_Object list = ftfont_driver.list (f, spec), tail;
for (tail = list; CONSP (tail); tail = XCDR (tail))
ASET (XCAR (tail), FONT_TYPE_INDEX, Qftx);
}
static Lisp_Object
-ftxfont_match (Lisp_Object frame, Lisp_Object spec)
+ftxfont_match (struct frame *f, Lisp_Object spec)
{
- Lisp_Object entity = ftfont_driver.match (frame, spec);
+ Lisp_Object entity = ftfont_driver.match (f, spec);
if (VECTORP (entity))
ASET (entity, FONT_TYPE_INDEX, Qftx);
}
static Lisp_Object
-ftxfont_open (FRAME_PTR f, Lisp_Object entity, int pixel_size)
+ftxfont_open (struct frame *f, Lisp_Object entity, int pixel_size)
{
Lisp_Object font_object;
struct font *font;
}
static void
-ftxfont_close (FRAME_PTR f, struct font *font)
+ftxfont_close (struct font *font)
{
- ftfont_driver.close (f, font);
+ ftfont_driver.close (font);
}
static int
-ftxfont_draw (struct glyph_string *s, int from, int to, int x, int y, int with_background)
+ftxfont_draw (struct glyph_string *s, int from, int to, int x, int y,
+ bool with_background)
{
- FRAME_PTR f = s->f;
+ struct frame *f = s->f;
struct face *face = s->face;
struct font *font = s->font;
XPoint p[0x700];
n[0] = n[1] = n[2] = n[3] = n[4] = n[5] = n[6] = 0;
- BLOCK_INPUT;
+ block_input ();
if (with_background)
ftxfont_draw_background (f, font, s->gc, x, y, s->width);
code = alloca (sizeof (unsigned) * len);
}
}
- UNBLOCK_INPUT;
+ unblock_input ();
return len;
}
static int
-ftxfont_end_for_frame (FRAME_PTR f)
+ftxfont_end_for_frame (struct frame *f)
{
struct ftxfont_frame_data *data = font_get_frame_data (f, &ftxfont_driver);
- BLOCK_INPUT;
+ block_input ();
while (data)
{
struct ftxfont_frame_data *next = data->next;
free (data);
data = next;
}
- UNBLOCK_INPUT;
+ unblock_input ();
font_put_frame_data (f, &ftxfont_driver, NULL);
return 0;
}