X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/7014794467aac02be3a935a093e1bfb8ad410c12..b6c888cc7afed65f24c023b8e90b73649f438e14:/src/font.h diff --git a/src/font.h b/src/font.h index 3035a909ef..7781816860 100644 --- a/src/font.h +++ b/src/font.h @@ -1,5 +1,5 @@ /* font.h -- Interface definition for font handling. - 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 @@ -56,11 +56,6 @@ along with GNU Emacs. If not, see . */ extern Lisp_Object Qfont_spec, Qfont_entity, Qfont_object; - -struct font_driver; -struct font; -struct glyph_string; - /* An enumerator for each font property. This is used as an index to the vector of FONT-SPEC and FONT-ENTITY. @@ -239,6 +234,11 @@ enum font_property_index #define FONT_SET_STYLE(font, prop, val) \ ASET ((font), prop, make_number (font_style_to_value (prop, val, 1))) +#define FONT_WIDTH(f) ((f)->max_width) +#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; @@ -265,6 +265,9 @@ 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 @@ -312,6 +315,13 @@ struct font /* Ascent and descent of the font (in pixels). */ int ascent, descent; + /* The following members makes sense on graphic displays only. */ + +#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; @@ -374,12 +384,6 @@ struct font registered in char-table `use-default-ascent'. */ int default_ascent; - /* CCL program to calculate code points of the font. */ - struct ccl_program *font_encoder; - - /* Font-driver for the font. */ - struct font_driver *driver; - /* Charset to encode a character code into a glyph code of the font. -1 means that the font doesn't require this information to encode a character. */ @@ -390,6 +394,11 @@ struct font determine it. */ int repertory_charset; +#endif /* HAVE_WINDOW_SYSTEM */ + + /* Font-driver for the font. */ + struct font_driver *driver; + /* There are more members in this structure, but they are private to the font-driver. */ }; @@ -417,7 +426,6 @@ struct font_bitmap int left; int top; int advance; - void *extra; }; /* Predicates to check various font-related objects. */ @@ -487,8 +495,6 @@ struct font_bitmap this value. */ #define FONT_PIXEL_SIZE_QUANTUM 1 -struct face; - #define FONT_INVALID_CODE 0xFFFFFFFF /* Font driver. Members specified as "optional" can be NULL. */ @@ -504,7 +510,7 @@ struct font_driver /* Return a cache of font-entities on frame F. The cache must be a cons whose cdr part is the actual cache area. */ - Lisp_Object (*get_cache) (FRAME_PTR F); + Lisp_Object (*get_cache) (struct frame *f); /* List fonts exactly matching with FONT_SPEC on FRAME. The value is a list of font-entities. The font properties to be considered @@ -527,7 +533,7 @@ struct font_driver This and the following `match' are the only APIs that allocate font-entities. */ - Lisp_Object (*list) (Lisp_Object frame, Lisp_Object font_spec); + Lisp_Object (*list) (struct frame *frame, Lisp_Object font_spec); /* Return a font-entity most closely matching with FONT_SPEC on FRAME. Which font property to consider, and how to calculate the @@ -536,12 +542,12 @@ struct font_driver The properties that the font-entity has is the same as `list' method. */ - Lisp_Object (*match) (Lisp_Object frame, Lisp_Object font_spec); + Lisp_Object (*match) (struct frame *f, Lisp_Object spec); /* Optional. List available families. The value is a list of family names (symbols). */ - Lisp_Object (*list_family) (Lisp_Object frame); + Lisp_Object (*list_family) (struct frame *f); /* Optional (if FONT_EXTRA_INDEX is not Lisp_Save_Value). Free FONT_EXTRA_INDEX field of FONT_ENTITY. */ @@ -549,21 +555,21 @@ struct font_driver /* Open a font specified by FONT_ENTITY on frame F. If the font is scalable, open it with PIXEL_SIZE. */ - Lisp_Object (*open) (FRAME_PTR f, Lisp_Object font_entity, + Lisp_Object (*open) (struct frame *f, Lisp_Object font_entity, int pixel_size); - /* Close FONT on frame F. */ - void (*close) (FRAME_PTR f, struct font *font); + /* 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) (FRAME_PTR f, struct face *face); + int (*prepare_face) (struct frame *f, struct face *face); /* Optional. Done FACE for displaying characters by FACE->font on frame F. */ - void (*done_face) (FRAME_PTR f, struct face *face); + void (*done_face) (struct frame *f, struct face *face); /* Optional. If FONT (FONT-ENTITY or FONT-OBJECT) has a glyph for character C @@ -582,6 +588,8 @@ struct font_driver unsigned *code, int nglyphs, struct font_metrics *metrics); +#ifdef HAVE_WINDOW_SYSTEM + /* Optional. Draw glyphs between FROM and TO of S->char2b at (X Y) pixel position of frame F with S->FACE and S->GC. If WITH_BACKGROUND, @@ -602,6 +610,8 @@ struct font_driver Free bitmap data in BITMAP. */ void (*free_bitmap) (struct font *font, struct font_bitmap *bitmap); +#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. */ @@ -646,12 +656,12 @@ struct font_driver Make the font driver ready for frame F. Usually this function makes some data specific to F and stores it in F by calling font_put_frame_data (). */ - int (*start_for_frame) (FRAME_PTR f); + int (*start_for_frame) (struct frame *f); /* Optional. End using the driver for frame F. Usually this function free some data stored for F. */ - int (*end_for_frame) (FRAME_PTR f); + int (*end_for_frame) (struct frame *f); /* Optional. @@ -674,7 +684,7 @@ struct font_driver If FONT is usable on frame F, return 0. Otherwise return -1. This method is used only for debugging. If this method is NULL, Emacs assumes that the font is usable on any frame. */ - int (*check) (FRAME_PTR F, struct font *font); + int (*check) (struct frame *f, struct font *font); /* Optional. @@ -698,8 +708,8 @@ struct font_driver /* Chain of font drivers. There's one global font driver list - (font_driver_list in font.c). In addition, each frame has its own - font driver list at FRAME_PTR->font_driver_list. */ + (font_driver_list in font.c). In addition, each frame has + its own font driver list at F->font_driver_list. */ struct font_driver_list { @@ -713,8 +723,8 @@ struct font_driver_list }; -/* Chain of arbitrary data specific to each font driver. Each frame - has its own font data list at FRAME_PTR->font_data_list. */ +/* 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 { @@ -731,6 +741,7 @@ 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); extern Lisp_Object find_font_encoding (Lisp_Object); extern int font_registry_charsets (Lisp_Object, struct charset **, @@ -742,28 +753,28 @@ extern Lisp_Object font_style_symbolic (Lisp_Object font, bool for_face); extern bool font_match_p (Lisp_Object spec, Lisp_Object font); -extern Lisp_Object font_list_entities (Lisp_Object frame, - Lisp_Object spec); +extern Lisp_Object font_list_entities (struct frame *, Lisp_Object); extern Lisp_Object font_get_name (Lisp_Object font_object); extern Lisp_Object font_spec_from_name (Lisp_Object font_name); extern Lisp_Object font_get_frame (Lisp_Object font_object); -extern int font_has_char (FRAME_PTR, Lisp_Object, int); +extern int font_has_char (struct frame *, Lisp_Object, int); extern void font_clear_prop (Lisp_Object *attrs, enum font_property_index prop); -extern Lisp_Object font_find_for_lface (FRAME_PTR f, Lisp_Object *lface, +extern Lisp_Object font_find_for_lface (struct frame *f, Lisp_Object *lface, Lisp_Object spec, int c); -extern Lisp_Object font_open_for_lface (FRAME_PTR f, Lisp_Object entity, +extern Lisp_Object font_open_for_lface (struct frame *f, Lisp_Object entity, Lisp_Object *lface, Lisp_Object spec); -extern Lisp_Object font_load_for_lface (FRAME_PTR f, Lisp_Object *lface, +extern Lisp_Object font_load_for_lface (struct frame *f, Lisp_Object *lface, Lisp_Object spec); -extern void font_prepare_for_face (FRAME_PTR f, struct face *face); -extern void font_done_for_face (FRAME_PTR f, struct face *face); +extern void font_prepare_for_face (struct frame *f, struct face *face); +extern void font_done_for_face (struct frame *f, struct face *face); +extern void clear_font_cache (struct frame *); -extern Lisp_Object font_open_by_spec (FRAME_PTR f, Lisp_Object spec); -extern Lisp_Object font_open_by_name (FRAME_PTR f, Lisp_Object name); +extern Lisp_Object font_open_by_spec (struct frame *f, Lisp_Object spec); +extern Lisp_Object font_open_by_name (struct frame *f, Lisp_Object name); extern Lisp_Object font_intern_prop (const char *str, ptrdiff_t len, bool force_symbol); @@ -778,10 +789,10 @@ 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, FRAME_PTR f); -extern void free_font_driver_list (FRAME_PTR f); -extern Lisp_Object font_update_drivers (FRAME_PTR f, Lisp_Object list); -extern Lisp_Object font_range (ptrdiff_t, ptrdiff_t *, +extern void register_font_driver (struct font_driver *driver, struct frame *f); +extern void free_font_driver_list (struct frame *f); +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 *, Lisp_Object); extern void font_fill_lglyph_metrics (Lisp_Object, Lisp_Object); @@ -789,10 +800,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 (FRAME_PTR f, +extern int font_put_frame_data (struct frame *f, struct font_driver *driver, void *data); -extern void *font_get_frame_data (FRAME_PTR f, +extern void *font_get_frame_data (struct frame *f, struct font_driver *driver); extern void font_filter_properties (Lisp_Object font, @@ -828,6 +839,7 @@ extern void syms_of_w32font (void); extern Lisp_Object Qfontsize; extern struct font_driver nsfont_driver; extern void syms_of_nsfont (void); +extern void syms_of_macfont (void); #endif /* HAVE_NS */ #ifndef FONT_DEBUG