X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/cce7d53002e8abc346b67ea4100507b0e7c4d68e..9654230233e49cf93e6a8f38685e4b809f02789e:/src/ftxfont.c diff --git a/src/ftxfont.c b/src/ftxfont.c index c6fa858af7..d1aa3e4040 100644 --- a/src/ftxfont.c +++ b/src/ftxfont.c @@ -1,5 +1,5 @@ /* ftxfont.c -- FreeType font driver on X (without using XFT). - Copyright (C) 2006-2011 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 @@ -21,7 +21,6 @@ along with GNU Emacs. If not, see . */ #include #include -#include #include #include "lisp.h" @@ -38,19 +37,16 @@ along with GNU Emacs. If not, see . */ static Lisp_Object Qftx; -/* 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_backgrond (FRAME_PTR, struct font *, GC, - int, int, int); +#if defined HAVE_XFT || !defined HAVE_FREETYPE +static +#endif +struct font_driver ftxfont_driver; struct ftxfont_frame_data { /* Background and foreground colors. */ XColor colors[2]; - /* GCs interporationg the above colors. gcs[0] is for a color + /* GCs interpolating the above colors. gcs[0] is for a color closest to BACKGROUND, and gcs[5] is for a color closest to FOREGROUND. */ GC gcs[6]; @@ -61,7 +57,7 @@ struct ftxfont_frame_data /* 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; @@ -85,7 +81,7 @@ ftxfont_get_gcs (FRAME_PTR f, long unsigned int foreground, long unsigned int ba } } - new = malloc (sizeof (struct ftxfont_frame_data)); + new = malloc (sizeof *new); if (! new) return NULL; new->next = this; @@ -102,7 +98,7 @@ ftxfont_get_gcs (FRAME_PTR f, long unsigned int foreground, long unsigned int ba 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++) { @@ -119,14 +115,14 @@ ftxfont_get_gcs (FRAME_PTR f, long unsigned int foreground, long unsigned int ba 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) @@ -138,7 +134,9 @@ ftxfont_get_gcs (FRAME_PTR f, long unsigned int foreground, long unsigned int ba } 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; @@ -214,7 +212,8 @@ ftxfont_draw_bitmap (FRAME_PTR f, GC gc_fore, GC *gcs, struct font *font, unsign } static void -ftxfont_draw_backgrond (FRAME_PTR f, struct font *font, GC gc, int x, int y, int width) +ftxfont_draw_background (struct frame *f, struct font *font, GC gc, int x, int y, + int width) { XGCValues xgcv; @@ -226,29 +225,20 @@ ftxfont_draw_backgrond (FRAME_PTR f, struct font *font, GC gc, int x, int y, int 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); - -struct font_driver ftxfont_driver; - 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); return list; } 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); @@ -256,7 +246,7 @@ ftxfont_match (Lisp_Object frame, Lisp_Object spec) } 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; @@ -270,15 +260,16 @@ ftxfont_open (FRAME_PTR f, Lisp_Object entity, int pixel_size) } 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]; @@ -291,9 +282,9 @@ ftxfont_draw (struct glyph_string *s, int from, int to, int x, int y, int with_b n[0] = n[1] = n[2] = n[3] = n[4] = n[5] = n[6] = 0; - BLOCK_INPUT; + block_input (); if (with_background) - ftxfont_draw_backgrond (f, font, s->gc, x, y, s->width); + ftxfont_draw_background (f, font, s->gc, x, y, s->width); code = alloca (sizeof (unsigned) * len); for (i = 0; i < len; i++) code[i] = ((XCHAR2B_BYTE1 (s->char2b + from + i) << 8) @@ -341,28 +332,28 @@ ftxfont_draw (struct glyph_string *s, int from, int to, int x, int y, int with_b } } - 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; int i; - + for (i = 0; i < 6; i++) XFreeGC (FRAME_X_DISPLAY (f), data->gcs[i]); free (data); data = next; } - UNBLOCK_INPUT; + unblock_input (); font_put_frame_data (f, &ftxfont_driver, NULL); return 0; } @@ -384,4 +375,3 @@ syms_of_ftxfont (void) ftxfont_driver.end_for_frame = ftxfont_end_for_frame; register_font_driver (&ftxfont_driver, NULL); } -