X-Git-Url: http://git.hcoop.net/bpt/emacs.git/blobdiff_plain/a84c99500e38d6e396b911aee69b1d58acdfa488..fa8678ebb05c28c54f114727a0bec7453903dbf0:/src/font.h diff --git a/src/font.h b/src/font.h index 539ebeba52..fb559154d8 100644 --- a/src/font.h +++ b/src/font.h @@ -1,5 +1,5 @@ /* font.h -- Interface definition for font handling. - Copyright (C) 2006-2013 Free Software Foundation, Inc. + Copyright (C) 2006-2014 Free Software Foundation, Inc. Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 National Institute of Advanced Industrial Science and Technology (AIST) Registration Number H13PRO009 @@ -25,6 +25,8 @@ along with GNU Emacs. If not, see . */ #include "ccl.h" #include "frame.h" +INLINE_HEADER_BEGIN + /* We have three types of Lisp objects related to font. FONT-SPEC @@ -117,7 +119,7 @@ enum font_property_index font. */ FONT_AVGWIDTH_INDEX, -#if 0 +#if false /* The following two members are to substitute for the above 6 members (FONT_WEIGHT_INDEX to FONT_AVGWIDTH_INDEX excluding FONT_SIZE_INDEX) if it is found that font-entities consumes too @@ -201,40 +203,44 @@ enum font_property_index ? (XINT (AREF ((font), FONT_WIDTH_INDEX)) >> 8) : -1) /* Return the symbolic weight value of FONT. */ #define FONT_WEIGHT_SYMBOLIC(font) \ - font_style_symbolic (font, FONT_WEIGHT_INDEX, 0) + font_style_symbolic (font, FONT_WEIGHT_INDEX, false) /* Return the symbolic slant value of FONT. */ #define FONT_SLANT_SYMBOLIC(font) \ - font_style_symbolic (font, FONT_SLANT_INDEX, 0) + font_style_symbolic (font, FONT_SLANT_INDEX, false) /* Return the symbolic width value of FONT. */ #define FONT_WIDTH_SYMBOLIC(font) \ - font_style_symbolic (font, FONT_WIDTH_INDEX, 0) + font_style_symbolic (font, FONT_WIDTH_INDEX, false) /* Return the face-weight corresponding to the weight of FONT. */ #define FONT_WEIGHT_FOR_FACE(font) \ - font_style_symbolic (font, FONT_WEIGHT_INDEX, 1) + font_style_symbolic (font, FONT_WEIGHT_INDEX, true) /* Return the face-slant corresponding to the slant of FONT. */ #define FONT_SLANT_FOR_FACE(font) \ - font_style_symbolic (font, FONT_SLANT_INDEX, 1) + font_style_symbolic (font, FONT_SLANT_INDEX, true) /* Return the face-swidth corresponding to the slant of FONT. */ #define FONT_WIDTH_FOR_FACE(font) \ - font_style_symbolic (font, FONT_WIDTH_INDEX, 1) + font_style_symbolic (font, FONT_WIDTH_INDEX, true) /* Return the numeric weight value corresponding ot the symbol NAME. */ #define FONT_WEIGHT_NAME_NUMERIC(name) \ - (font_style_to_value (FONT_WEIGHT_INDEX, (name), 0) >> 8) + (font_style_to_value (FONT_WEIGHT_INDEX, (name), false) >> 8) /* Return the numeric slant value corresponding ot the symbol NAME. */ #define FONT_SLANT_NAME_NUMERIC(name) \ - (font_style_to_value (FONT_SLANT_INDEX, (name), 0) >> 8) + (font_style_to_value (FONT_SLANT_INDEX, (name), false) >> 8) /* Return the numeric width value corresponding ot the symbol NAME. */ #define FONT_WIDTH_NAME_NUMERIC(name) \ - (font_style_to_value (FONT_WIDTH_INDEX, (name), 0) >> 8) + (font_style_to_value (FONT_WIDTH_INDEX, (name), false) >> 8) /* Set the font property PROP of FONT to VAL. PROP is one of style-related font property index (FONT_WEIGHT/SLANT/WIDTH_INDEX). VAL (integer or symbol) is the numeric or symbolic style value. */ #define FONT_SET_STYLE(font, prop, val) \ - ASET ((font), prop, make_number (font_style_to_value (prop, val, 1))) + ASET ((font), prop, make_number (font_style_to_value (prop, val, true))) +#ifndef MSDOS #define FONT_WIDTH(f) ((f)->max_width) +#else +#define FONT_WIDTH(f) 1 +#endif #define FONT_HEIGHT(f) ((f)->height) #define FONT_BASE(f) ((f)->ascent) #define FONT_DESCENT(f) ((f)->descent) @@ -424,19 +430,19 @@ struct font_bitmap /* Predicates to check various font-related objects. */ -/* 1 iff X is one of font-spec, font-entity, and font-object. */ +/* True iff X is one of font-spec, font-entity, and font-object. */ #define FONTP(x) PSEUDOVECTORP (x, PVEC_FONT) -/* 1 iff X is font-spec. */ +/* True iff X is font-spec. */ #define FONT_SPEC_P(x) \ (FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_SPEC_MAX) -/* 1 iff X is font-entity. */ +/* True iff X is font-entity. */ #define FONT_ENTITY_P(x) \ (FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_ENTITY_MAX) -/* 1 iff X is font-object. */ +/* True iff X is font-object. */ #define FONT_OBJECT_P(x) \ (FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_OBJECT_MAX) -/* 1 iff ENTITY can't be loaded. */ +/* True iff ENTITY can't be loaded. */ #define FONT_ENTITY_NOT_LOADABLE(entity) \ EQ (AREF (entity, FONT_OBJLIST_INDEX), Qt) @@ -448,27 +454,30 @@ struct font_bitmap /* Check macros for various font-related objects. */ #define CHECK_FONT(x) \ - do { if (! FONTP (x)) wrong_type_argument (Qfont, x); } while (0) + do { if (! FONTP (x)) wrong_type_argument (Qfont, x); } while (false) #define CHECK_FONT_SPEC(x) \ - do { if (! FONT_SPEC_P (x)) wrong_type_argument (Qfont_spec, x); } while (0) + do { if (! FONT_SPEC_P (x)) wrong_type_argument (Qfont_spec, x); } \ + while (false) #define CHECK_FONT_ENTITY(x) \ - do { if (! FONT_ENTITY_P (x)) wrong_type_argument (Qfont_entity, x); } while (0) + do { if (! FONT_ENTITY_P (x)) wrong_type_argument (Qfont_entity, x); } \ + while (false) #define CHECK_FONT_OBJECT(x) \ - do { if (! FONT_OBJECT_P (x)) wrong_type_argument (Qfont_object, x); } while (0) + do { if (! FONT_OBJECT_P (x)) wrong_type_argument (Qfont_object, x); } \ + while (false) #define CHECK_FONT_GET_OBJECT(x, font) \ do { \ CHECK_FONT_OBJECT (x); \ font = XFONT_OBJECT (x); \ - } while (0) + } while (false) #define XFONT_SPEC(p) \ - (eassert (FONT_SPEC_P (p)), (struct font_spec *) XUNTAG (p, Lisp_Vectorlike)) + (eassert (FONT_SPEC_P (p)), (struct font_spec *) SCM_SMOB_DATA (p)) #define XFONT_ENTITY(p) \ (eassert (FONT_ENTITY_P (p)), \ - (struct font_entity *) XUNTAG (p, Lisp_Vectorlike)) + (struct font_entity *) SCM_SMOB_DATA (p)) #define XFONT_OBJECT(p) \ - (eassert (FONT_OBJECT_P (p)), (struct font *) XUNTAG (p, Lisp_Vectorlike)) + (eassert (FONT_OBJECT_P (p)), (struct font *) SCM_SMOB_DATA (p)) #define XSETFONT(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_FONT)) /* Number of pt per inch (from the TeXbook). */ @@ -555,11 +564,9 @@ struct font_driver /* Close FONT. NOTE: this can be called by GC. */ void (*close) (struct font *font); - /* Optional (if FACE->extra is not used). - Prepare FACE for displaying characters by FONT on frame F by - storing some data in FACE->extra. If successful, return 0. - Otherwise, return -1. */ - int (*prepare_face) (struct frame *f, struct face *face); + /* Prepare FACE for displaying characters by FONT on frame F by + storing some data in FACE->extra. */ + void (*prepare_face) (struct frame *f, struct face *face); /* Optional. Done FACE for displaying characters by FACE->font on frame F. */ @@ -784,6 +791,15 @@ extern int font_unparse_fcname (Lisp_Object font, int pixel_size, char *name, int bytes); extern void register_font_driver (struct font_driver *driver, struct frame *f); extern void free_font_driver_list (struct frame *f); +#ifdef ENABLE_CHECKING +extern bool valid_font_driver (struct font_driver *); +#else +INLINE bool +valid_font_driver (struct font_driver *d) +{ + return true; +} +#endif extern Lisp_Object font_update_drivers (struct frame *f, Lisp_Object list); extern Lisp_Object font_range (ptrdiff_t, ptrdiff_t, ptrdiff_t *, struct window *, struct face *, @@ -816,7 +832,8 @@ extern void syms_of_ftxfont (void); extern Lisp_Object Qxft; extern struct font_driver xftfont_driver; extern void syms_of_xftfont (void); -#elif defined HAVE_FREETYPE +#endif +#if defined HAVE_FREETYPE || defined HAVE_XFT extern struct font_driver ftxfont_driver; #endif #ifdef HAVE_BDFFONT @@ -848,12 +865,14 @@ extern void font_deferred_log (const char *, Lisp_Object, Lisp_Object); do { \ if (! EQ (Vfont_log, Qt)) \ font_add_log ((ACTION), (ARG), (RESULT)); \ - } while (0) + } while (false) #define FONT_DEFERRED_LOG(ACTION, ARG, RESULT) \ do { \ if (! EQ (Vfont_log, Qt)) \ font_deferred_log ((ACTION), (ARG), (RESULT)); \ - } while (0) + } while (false) + +INLINE_HEADER_END #endif /* not EMACS_FONT_H */