X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/2cc82b9fbc6e67878e89d7006cc69ffb5227daa1..785adfcc8dee02ac544f80e4f7f8d3d5b2965981:/src/font.h diff --git a/src/font.h b/src/font.h index 7781816860..5a3e38a2a6 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-2015 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 @@ -54,7 +56,6 @@ along with GNU Emacs. If not, see . */ Note: Only the method `open' of a font-driver can create this object, and it should never be modified by Lisp. */ -extern Lisp_Object Qfont_spec, Qfont_entity, Qfont_object; /* An enumerator for each font property. This is used as an index to the vector of FONT-SPEC and FONT-ENTITY. @@ -117,7 +118,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 @@ -160,9 +161,6 @@ enum font_property_index /* List of font-objects opened from the font-entity. */ FONT_OBJLIST_INDEX = FONT_SPEC_MAX, - /* Font-entity from which the font-object is opened. */ - FONT_ENTITY_INDEX = FONT_SPEC_MAX, - /* This value is the length of font-entity vector. */ FONT_ENTITY_MAX, @@ -180,9 +178,6 @@ enum font_property_index is not available. */ FONT_FILE_INDEX, - /* Format of the font (symbol) or nil if unknown. */ - FONT_FORMAT_INDEX, - /* This value is the length of font-object vector. */ FONT_OBJECT_MAX }; @@ -201,55 +196,48 @@ 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) -extern Lisp_Object QCspacing, QCdpi, QCscalable, QCotf, QClang, QCscript; -extern Lisp_Object QCavgwidth, QCantialias, QCfont_entity; -extern Lisp_Object Qp; - - -/* Important character set symbols. */ -extern Lisp_Object Qascii_0; -extern Lisp_Object Qiso8859_1, Qiso10646_1, Qunicode_bmp, Qunicode_sip; - -/* Special ADSTYLE properties to avoid fonts used for Latin characters. */ -extern Lisp_Object Qja, Qko; /* Structure for a font-spec. */ @@ -265,9 +253,6 @@ struct font_entity { struct vectorlike_header header; Lisp_Object props[FONT_ENTITY_MAX]; -#ifdef HAVE_NS - struct font_driver *driver; -#endif }; /* A value which may appear in the member `encoding' of struct font @@ -319,9 +304,6 @@ struct font #if defined (HAVE_WINDOW_SYSTEM) - /* The frame where the font was opened. */ - struct frame *frame; - /* Vertical pixel width of the underline. If is zero if that information is not in the font. */ int underline_thickness; @@ -430,43 +412,37 @@ 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. */ -#define FONT_ENTITY_NOT_LOADABLE(entity) \ - EQ (AREF (entity, FONT_OBJLIST_INDEX), Qt) - -/* Flag ENTITY not loadable. */ -#define FONT_ENTITY_SET_NOT_LOADABLE(entity) \ - ASET (entity, FONT_OBJLIST_INDEX, Qt) - - /* 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)) @@ -561,11 +537,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. */ @@ -584,9 +558,9 @@ struct font_driver /* Compute the total metrics of the NGLYPHS glyphs specified by the font FONT and the sequence of glyph codes CODE, and store the result in METRICS. */ - int (*text_extents) (struct font *font, - unsigned *code, int nglyphs, - struct font_metrics *metrics); + void (*text_extents) (struct font *font, + unsigned *code, int nglyphs, + struct font_metrics *metrics); #ifdef HAVE_WINDOW_SYSTEM @@ -612,15 +586,6 @@ struct font_driver #endif /* HAVE_WINDOW_SYSTEM */ - /* Optional. - Return an outline data for glyph-code CODE of FONT. The format - of the outline data depends on the font-driver. */ - void *(*get_outline) (struct font *font, unsigned code); - - /* Optional. - Free OUTLINE (that is obtained by the above method). */ - void (*free_outline) (struct font *font, void *outline); - /* Optional. Get coordinates of the INDEXth anchor point of the glyph whose code is CODE. Store the coordinates in *X and *Y. Return 0 if @@ -722,26 +687,14 @@ struct font_driver_list struct font_driver_list *next; }; - -/* Chain of arbitrary data specific to each font driver. - Each frame has its own font data list at F->font_data_list. */ - -struct font_data_list -{ - /* Pointer to the font driver. */ - struct font_driver *driver; - /* Data specific to the font driver. */ - void *data; - /* Pointer to the next element of the chain. */ - struct font_data_list *next; -}; - extern Lisp_Object copy_font_spec (Lisp_Object); extern Lisp_Object merge_font_spec (Lisp_Object, Lisp_Object); extern Lisp_Object font_make_entity (void); extern Lisp_Object font_make_object (int, Lisp_Object, int); -extern void font_close_object (Lisp_Object); +#if defined (HAVE_XFT) || defined (HAVE_FREETYPE) || defined (HAVE_NS) +extern Lisp_Object font_build_object (int, Lisp_Object, Lisp_Object, double); +#endif extern Lisp_Object find_font_encoding (Lisp_Object); extern int font_registry_charsets (Lisp_Object, struct charset **, @@ -787,10 +740,17 @@ extern void font_parse_family_registry (Lisp_Object family, extern int font_parse_xlfd (char *name, ptrdiff_t len, Lisp_Object font); extern ptrdiff_t font_unparse_xlfd (Lisp_Object font, int pixel_size, char *name, int bytes); -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 *, @@ -800,11 +760,10 @@ extern void font_fill_lglyph_metrics (Lisp_Object, Lisp_Object); extern Lisp_Object font_put_extra (Lisp_Object font, Lisp_Object prop, Lisp_Object val); -extern int font_put_frame_data (struct frame *f, - struct font_driver *driver, - void *data); -extern void *font_get_frame_data (struct frame *f, - struct font_driver *driver); +#if defined (HAVE_XFT) || defined (HAVE_FREETYPE) +extern void font_put_frame_data (struct frame *, Lisp_Object, void *); +extern void *font_get_frame_data (struct frame *f, Lisp_Object); +#endif /* HAVE_XFT || HAVE_FREETYPE */ extern void font_filter_properties (Lisp_Object font, Lisp_Object alist, @@ -820,11 +779,11 @@ extern struct font_driver xfont_driver; extern void syms_of_xfont (void); extern void syms_of_ftxfont (void); #ifdef HAVE_XFT -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; +extern void syms_of_xftfont (void); #endif #ifdef HAVE_BDFFONT extern void syms_of_bdffont (void); @@ -836,7 +795,6 @@ extern struct font_driver uniscribe_font_driver; extern void syms_of_w32font (void); #endif /* HAVE_NTGUI */ #ifdef HAVE_NS -extern Lisp_Object Qfontsize; extern struct font_driver nsfont_driver; extern void syms_of_nsfont (void); extern void syms_of_macfont (void); @@ -846,8 +804,6 @@ extern void syms_of_macfont (void); #define FONT_DEBUG #endif -extern Lisp_Object QCfoundry; - extern void font_add_log (const char *, Lisp_Object, Lisp_Object); extern void font_deferred_log (const char *, Lisp_Object, Lisp_Object); @@ -855,12 +811,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 */