]> code.delx.au - gnu-emacs/blobdiff - src/ftxfont.c
Merge from emacs-24
[gnu-emacs] / src / ftxfont.c
index caae9891312dc85b5e9cc1cf147387da41148ee2..6ebe0798b4e3cace652c6b298707f33c422d8a9a 100644 (file)
@@ -1,6 +1,6 @@
 /* ftxfont.c -- FreeType font driver on X (without using XFT).
 /* 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-2012 Free Software Foundation, Inc.
+   Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011
      National Institute of Advanced Industrial Science and Technology (AIST)
      Registration Number H13PRO009
 
      National Institute of Advanced Industrial Science and Technology (AIST)
      Registration Number H13PRO009
 
@@ -21,6 +21,7 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 #include <stdio.h>
 
 #include <config.h>
 #include <stdio.h>
+#include <setjmp.h>
 #include <X11/Xlib.h>
 
 #include "lisp.h"
 #include <X11/Xlib.h>
 
 #include "lisp.h"
@@ -37,19 +38,24 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 
 static Lisp_Object Qftx;
 
 
 static Lisp_Object Qftx;
 
+#if defined HAVE_XFT || !defined HAVE_FREETYPE
+static
+#endif
+struct font_driver ftxfont_driver;
+
 /* Prototypes for helper function.  */
 /* Prototypes for helper function.  */
-static GC *ftxfont_get_gcs P_ ((FRAME_PTR, unsigned long, unsigned long));
-static int ftxfont_draw_bitmap P_ ((FRAME_PTR, GC, GC *, struct font *,
-                                   unsigned, int, int, XPoint *, int, int *,
-                                   int));
-static void ftxfont_draw_backgrond P_ ((FRAME_PTR, struct font *, GC,
-                                       int, int, int));
+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.  */
   XColor colors[2];
 
 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];
    closest to BACKGROUND, and gcs[5] is for a color closest to
    FOREGROUND.  */
   GC gcs[6];
@@ -60,9 +66,7 @@ struct ftxfont_frame_data
 /* Return an array of 6 GCs for antialiasing.  */
 
 static GC *
 /* Return an array of 6 GCs for antialiasing.  */
 
 static GC *
-ftxfont_get_gcs (f, foreground, background)
-     FRAME_PTR f;
-     unsigned long foreground, background;
+ftxfont_get_gcs (FRAME_PTR f, long unsigned int foreground, long unsigned int background)
 {
   XColor color;
   XGCValues xgcv;
 {
   XColor color;
   XGCValues xgcv;
@@ -86,7 +90,7 @@ ftxfont_get_gcs (f, foreground, background)
        }
     }
 
        }
     }
 
-  new = malloc (sizeof (struct ftxfont_frame_data));
+  new = malloc (sizeof *new);
   if (! new)
     return NULL;
   new->next = this;
   if (! new)
     return NULL;
   new->next = this;
@@ -139,15 +143,7 @@ ftxfont_get_gcs (f, foreground, background)
 }
 
 static int
 }
 
 static int
-ftxfont_draw_bitmap (f, gc_fore, gcs, font, code, x, y, p, size, n, flush)
-     FRAME_PTR f;
-     GC gc_fore, *gcs;
-     struct font *font;
-     unsigned code;
-     int x, y;
-     XPoint *p;
-     int size, *n;
-     int flush;
+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)
 {
   struct font_bitmap bitmap;
   unsigned char *b;
 {
   struct font_bitmap bitmap;
   unsigned char *b;
@@ -223,11 +219,8 @@ ftxfont_draw_bitmap (f, gc_fore, gcs, font, code, x, y, p, size, n, flush)
 }
 
 static void
 }
 
 static void
-ftxfont_draw_backgrond (f, font, gc, x, y, width)
-     FRAME_PTR f;
-     struct font *font;
-     GC gc;
-     int x, y, width;
+ftxfont_draw_background (FRAME_PTR f, struct font *font, GC gc, int x, int y,
+                        int width)
 {
   XGCValues xgcv;
 
 {
   XGCValues xgcv;
 
@@ -235,35 +228,29 @@ ftxfont_draw_backgrond (f, font, gc, x, y, width)
                GCForeground | GCBackground, &xgcv);
   XSetForeground (FRAME_X_DISPLAY (f), gc, xgcv.background);
   XFillRectangle (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), gc,
                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.  */
   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 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));
-
-struct font_driver ftxfont_driver;
+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
 
 static Lisp_Object
-ftxfont_list (frame, spec)
-     Lisp_Object frame;
-     Lisp_Object spec;
+ftxfont_list (Lisp_Object frame, Lisp_Object spec)
 {
   Lisp_Object list = ftfont_driver.list (frame, spec), tail;
 {
   Lisp_Object list = ftfont_driver.list (frame, spec), tail;
-  
+
   for (tail = list; CONSP (tail); tail = XCDR (tail))
     ASET (XCAR (tail), FONT_TYPE_INDEX, Qftx);
   return list;
 }
 
 static Lisp_Object
   for (tail = list; CONSP (tail); tail = XCDR (tail))
     ASET (XCAR (tail), FONT_TYPE_INDEX, Qftx);
   return list;
 }
 
 static Lisp_Object
-ftxfont_match (frame, spec)
-     Lisp_Object frame;
-     Lisp_Object spec;
+ftxfont_match (Lisp_Object frame, Lisp_Object spec)
 {
   Lisp_Object entity = ftfont_driver.match (frame, spec);
 
 {
   Lisp_Object entity = ftfont_driver.match (frame, spec);
 
@@ -273,10 +260,7 @@ ftxfont_match (frame, spec)
 }
 
 static Lisp_Object
 }
 
 static Lisp_Object
-ftxfont_open (f, entity, pixel_size)
-     FRAME_PTR f;
-     Lisp_Object entity;
-     int pixel_size;
+ftxfont_open (FRAME_PTR f, Lisp_Object entity, int pixel_size)
 {
   Lisp_Object font_object;
   struct font *font;
 {
   Lisp_Object font_object;
   struct font *font;
@@ -290,17 +274,13 @@ ftxfont_open (f, entity, pixel_size)
 }
 
 static void
 }
 
 static void
-ftxfont_close (f, font)
-     FRAME_PTR f;
-     struct font *font;
+ftxfont_close (FRAME_PTR f, struct font *font)
 {
   ftfont_driver.close (f, font);
 }
 
 static int
 {
   ftfont_driver.close (f, font);
 }
 
 static int
-ftxfont_draw (s, from, to, x, y, with_background)
-     struct glyph_string *s;
-     int from, to, x, y, with_background;
+ftxfont_draw (struct glyph_string *s, int from, int to, int x, int y, int with_background)
 {
   FRAME_PTR f = s->f;
   struct face *face = s->face;
 {
   FRAME_PTR f = s->f;
   struct face *face = s->face;
@@ -317,7 +297,7 @@ ftxfont_draw (s, from, to, x, y, with_background)
 
   BLOCK_INPUT;
   if (with_background)
 
   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)
   code = alloca (sizeof (unsigned) * len);
   for (i = 0; i < len; i++)
     code[i] = ((XCHAR2B_BYTE1 (s->char2b + from + i) << 8)
@@ -371,17 +351,16 @@ ftxfont_draw (s, from, to, x, y, with_background)
 }
 
 static int
 }
 
 static int
-ftxfont_end_for_frame (f)
-     FRAME_PTR f;
+ftxfont_end_for_frame (FRAME_PTR f)
 {
   struct ftxfont_frame_data *data = font_get_frame_data (f, &ftxfont_driver);
 {
   struct ftxfont_frame_data *data = font_get_frame_data (f, &ftxfont_driver);
-  
+
   BLOCK_INPUT;
   while (data)
     {
       struct ftxfont_frame_data *next = data->next;
       int i;
   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);
       for (i = 0; i < 6; i++)
        XFreeGC (FRAME_X_DISPLAY (f), data->gcs[i]);
       free (data);
@@ -395,7 +374,7 @@ ftxfont_end_for_frame (f)
 \f
 
 void
 \f
 
 void
-syms_of_ftxfont ()
+syms_of_ftxfont (void)
 {
   DEFSYM (Qftx, "ftx");
 
 {
   DEFSYM (Qftx, "ftx");
 
@@ -409,6 +388,3 @@ syms_of_ftxfont ()
   ftxfont_driver.end_for_frame = ftxfont_end_for_frame;
   register_font_driver (&ftxfont_driver, NULL);
 }
   ftxfont_driver.end_for_frame = ftxfont_end_for_frame;
   register_font_driver (&ftxfont_driver, NULL);
 }
-
-/* arch-tag: 59bd3469-5330-413f-b29d-1aa36492abe8
-   (do not change this comment) */