X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/4fc5845fe896177307f553d8af0d48834206c060..b883cdb2fefa8ea9c3b0d82eba7a9ee792f871bb:/src/dispextern.h diff --git a/src/dispextern.h b/src/dispextern.h index af599792c6..92005e6b14 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -1,6 +1,6 @@ /* Interface definitions for display code. - Copyright (C) 1985,93,94,97,98,99, 2000,01,02,03, 2004, 2005 - Free Software Foundation, Inc. + Copyright (C) 1985, 1993, 1994, 1997, 1998, 1999, 2000, 2001, 2002, + 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -1182,10 +1182,18 @@ struct glyph_string stipple pattern. */ unsigned stippled_p : 1; - /* 1 means only the foreground of this glyph string must be drawn, - and we should use the physical height of the line this glyph - string appears in as clip rect. */ - unsigned for_overlaps_p : 1; +#define OVERLAPS_PRED (1 << 0) +#define OVERLAPS_SUCC (1 << 1) +#define OVERLAPS_BOTH (OVERLAPS_PRED | OVERLAPS_SUCC) +#define OVERLAPS_ERASED_CURSOR (1 << 2) + /* Non-zero means only the foreground of this glyph string must be + drawn, and we should use the physical height of the line this + glyph string appears in as clip rect. If the value is + OVERLAPS_ERASED_CURSOR, the clip rect is restricted to the rect + of the erased cursor. OVERLAPS_PRED and OVERLAPS_SUCC mean we + draw overlaps with the preceding and the succeeding rows, + respectively. */ + unsigned for_overlaps : 3; /* The GC to use for drawing this glyph string. */ #if defined(HAVE_X_WINDOWS) || defined(MAC_OS) @@ -1212,6 +1220,11 @@ struct glyph_string *clip_tail, not including their overhangs. */ struct glyph_string *clip_head, *clip_tail; +#ifdef USE_FONT_BACKEND + /* The current clipping area. */ + int clip_x, clip_y, clip_width, clip_height; +#endif /* USE_FONT_BACKEND */ + struct glyph_string *next, *prev; }; @@ -1383,6 +1396,7 @@ enum lface_attribute_index LFACE_FONT_INDEX, LFACE_INHERIT_INDEX, LFACE_AVGWIDTH_INDEX, + LFACE_FONTSET_INDEX, LFACE_VECTOR_SIZE }; @@ -1467,10 +1481,12 @@ struct face reallocated. */ int font_info_id; - /* Fontset ID if this face uses a fontset, or -1. This is only >= 0 - if the face was realized for a composition sequence. - Otherwise, a specific font is loaded from the set of fonts - specified by the fontset given by the family attribute of the face. */ +#ifdef USE_FONT_BACKEND + struct font_info *font_info; +#endif /* USE_FONT_BACKEND */ + + /* Fontset ID if for this face's fontset. Non-ASCII faces derived + from the same ASCII face have the same fontset. */ int fontset; /* Pixmap width and height. */ @@ -1502,13 +1518,6 @@ struct face /* The hash value of this face. */ unsigned hash; - /* The charset for which this face was realized if it was realized - for use in multibyte text. If fontset >= 0, this is the charset - of the first character of the composition sequence. A value of - charset < 0 means the face was realized for use in unibyte text - where the idea of Emacs charsets isn't applicable. */ - int charset; - /* Non-zero if text in this face should be underlined, overlined, strike-through or have a box drawn around it. */ unsigned underline_p : 1; @@ -1554,9 +1563,15 @@ struct face /* Next and previous face in hash collision list of face cache. */ struct face *next, *prev; - /* If this face is for ASCII characters, this points this face - itself. Otherwise, this points a face for ASCII characters. */ + /* If this face is an ASCII face, this points to this face itself. + Otherwise, this points to an ASCII face that has the same + attributes except the font. */ struct face *ascii_face; + +#ifdef USE_FONT_BACKEND + /* Extra member that a font-driver uses privately. */ + void *extra; +#endif /* USE_FONT_BACKEND */ }; @@ -1644,7 +1659,7 @@ struct face_cache /* Non-zero if FACE is suitable for displaying character CHAR. */ #define FACE_SUITABLE_FOR_CHAR_P(FACE, CHAR) \ - (SINGLE_BYTE_CHAR_P (CHAR) \ + (ASCII_CHAR_P (CHAR) \ ? (FACE) == (FACE)->ascii_face \ : face_suitable_for_char_p ((FACE), (CHAR))) @@ -1652,15 +1667,15 @@ struct face_cache with id ID but is suitable for displaying character CHAR. This macro is only meaningful for multibyte character CHAR. */ -#define FACE_FOR_CHAR(F, FACE, CHAR) \ - (SINGLE_BYTE_CHAR_P (CHAR) \ - ? (FACE)->ascii_face->id \ - : face_for_char ((F), (FACE), (CHAR))) +#define FACE_FOR_CHAR(F, FACE, CHAR, POS, OBJECT) \ + (ASCII_CHAR_P (CHAR) \ + ? (FACE)->ascii_face->id \ + : face_for_char ((F), (FACE), (CHAR), (POS), (OBJECT))) #else /* not HAVE_WINDOW_SYSTEM */ #define FACE_SUITABLE_FOR_CHAR_P(FACE, CHAR) 1 -#define FACE_FOR_CHAR(F, FACE, CHAR) ((FACE)->id) +#define FACE_FOR_CHAR(F, FACE, CHAR, POS, OBJECT) ((FACE)->id) #endif /* not HAVE_WINDOW_SYSTEM */ @@ -1778,6 +1793,7 @@ enum display_element_type enum prop_idx { + AUTO_COMPOSED_PROP_IDX, FONTIFIED_PROP_IDX, FACE_PROP_IDX, INVISIBLE_PROP_IDX, @@ -1971,6 +1987,10 @@ struct it /* 1 means overlay strings at end_charpos have been processed. */ unsigned overlay_strings_at_end_processed_p : 1; + /* 1 means to ignore overlay strings at current pos, as they have + already been processed. */ + unsigned ignore_overlay_strings_at_pos_p : 1; + /* 1 means the actual glyph is not available in the current system. */ unsigned glyph_not_available_p : 1; @@ -2266,7 +2286,7 @@ struct redisplay_interface This function is called from redraw_overlapping_rows after desired rows have been made current. */ void (*fix_overlapping_area) P_ ((struct window *w, struct glyph_row *row, - enum glyph_row_area area)); + enum glyph_row_area area, int)); #ifdef HAVE_WINDOW_SYSTEM @@ -2288,7 +2308,9 @@ struct redisplay_interface the two-byte form of C. Encoding is returned in *CHAR2B. If TWO_BYTE_P is non-null, return non-zero there if font is two-byte. */ int (*encode_char) P_ ((int c, XChar2b *char2b, - struct font_info *font_into, int *two_byte_p)); + struct font_info *font_into, + struct charset *charset, + int *two_byte_p)); /* Compute left and right overhang of glyph string S. A NULL pointer if platform does not support this. */ @@ -2409,6 +2431,15 @@ struct image #define DEFAULT_IMAGE_WIDTH 30 #define DEFAULT_IMAGE_HEIGHT 30 + /* Top/left and bottom/right corner pixel of actual image data. + Used by four_corners_best to consider the real image data, + rather than looking at the optional image margin. */ + int corners[4]; +#define TOP_CORNER 0 +#define LEFT_CORNER 1 +#define BOT_CORNER 2 +#define RIGHT_CORNER 3 + /* Percent of image height used as ascent. A value of CENTERED_IMAGE_ASCENT means draw the image centered on the line. */ @@ -2607,10 +2638,12 @@ int estimate_mode_line_height P_ ((struct frame *, enum face_id)); void pixel_to_glyph_coords P_ ((struct frame *, int, int, int *, int *, NativeRectangle *, int)); int glyph_to_pixel_coords P_ ((struct window *, int, int, int *, int *)); +void remember_mouse_glyph P_ ((struct frame *, int, int, NativeRectangle *)); + void mark_window_display_accurate P_ ((Lisp_Object, int)); void redisplay_preserve_echo_area P_ ((int)); -void set_cursor_from_row P_ ((struct window *, struct glyph_row *, - struct glyph_matrix *, int, int, int, int)); +int set_cursor_from_row P_ ((struct window *, struct glyph_row *, + struct glyph_matrix *, int, int, int, int)); void init_iterator P_ ((struct it *, struct window *, int, int, struct glyph_row *, enum face_id)); void init_iterator_to_row_start P_ ((struct it *, struct window *, @@ -2641,6 +2674,8 @@ extern int help_echo_pos; extern struct frame *last_mouse_frame; extern int last_tool_bar_item; extern int mouse_autoselect_window; +extern int unibyte_display_via_language_environment; + extern void reseat_at_previous_visible_line_start P_ ((struct it *)); extern int calc_pixel_width_or_height P_ ((double *, struct it *, Lisp_Object, @@ -2664,12 +2699,12 @@ extern int x_stretch_cursor_p; extern struct cursor_pos output_cursor; extern void x_fix_overlapping_area P_ ((struct window *, struct glyph_row *, - enum glyph_row_area)); + enum glyph_row_area, int)); extern void draw_phys_cursor_glyph P_ ((struct window *, struct glyph_row *, enum draw_glyphs_face)); -extern int get_phys_cursor_geometry P_ ((struct window *, struct glyph_row *, - struct glyph *, int *)); +extern void get_phys_cursor_geometry P_ ((struct window *, struct glyph_row *, + struct glyph *, int *, int *, int *)); extern void erase_phys_cursor P_ ((struct window *)); extern void display_and_set_cursor P_ ((struct window *, int, int, int, int, int)); @@ -2682,6 +2717,8 @@ extern void x_clear_cursor P_ ((struct window *)); extern void x_draw_vertical_border P_ ((struct window *w)); extern void frame_to_window_pixel_xy P_ ((struct window *, int *, int *)); +extern int get_glyph_string_clip_rects P_ ((struct glyph_string *, + NativeRectangle *, int)); extern void get_glyph_string_clip_rect P_ ((struct glyph_string *, NativeRectangle *nr)); extern Lisp_Object find_hot_spot P_ ((Lisp_Object, int, int)); @@ -2715,6 +2752,9 @@ void compute_fringe_widths P_ ((struct frame *, int)); void w32_init_fringe P_ ((void)); void w32_reset_fringes P_ ((void)); #endif +#ifdef MAC_OS +void mac_init_fringe P_ ((void)); +#endif /* Defined in image.c */ @@ -2775,15 +2815,17 @@ void clear_face_cache P_ ((int)); unsigned long load_color P_ ((struct frame *, struct face *, Lisp_Object, enum lface_attribute_index)); void unload_color P_ ((struct frame *, unsigned long)); -int face_font_available_p P_ ((struct frame *, Lisp_Object)); +char *choose_face_font P_ ((struct frame *, Lisp_Object *, Lisp_Object, + int *)); int ascii_face_of_lisp_face P_ ((struct frame *, int)); void prepare_face_for_display P_ ((struct frame *, struct face *)); int xstricmp P_ ((const unsigned char *, const unsigned char *)); -int lookup_face P_ ((struct frame *, Lisp_Object *, int, struct face *)); -int lookup_named_face P_ ((struct frame *, Lisp_Object, int, int)); +int lookup_face P_ ((struct frame *, Lisp_Object *)); +int lookup_non_ascii_face P_ ((struct frame *, int, struct face *)); +int lookup_named_face P_ ((struct frame *, Lisp_Object, int)); int smaller_face P_ ((struct frame *, int, int)); int face_with_height P_ ((struct frame *, int, int)); -int lookup_derived_face P_ ((struct frame *, Lisp_Object, int, int, int)); +int lookup_derived_face P_ ((struct frame *, Lisp_Object, int, int)); void init_frame_faces P_ ((struct frame *)); void free_frame_faces P_ ((struct frame *)); void recompute_basic_faces P_ ((struct frame *)); @@ -2794,10 +2836,12 @@ int face_at_string_position P_ ((struct window *, Lisp_Object, int, int, int, int merge_faces P_ ((struct frame *, Lisp_Object, int, int)); int compute_char_face P_ ((struct frame *, int, Lisp_Object)); void free_all_realized_faces P_ ((Lisp_Object)); +void free_realized_face P_ ((struct frame *, struct face *)); extern Lisp_Object Qforeground_color, Qbackground_color; extern Lisp_Object Qframe_set_background_mode; extern char unspecified_fg[], unspecified_bg[]; -void free_realized_multibyte_face P_ ((struct frame *, int)); +extern Lisp_Object split_font_name_into_vector P_ ((Lisp_Object)); +extern Lisp_Object build_font_name_from_vector P_ ((Lisp_Object)); /* Defined in xfns.c */ @@ -2940,7 +2984,6 @@ extern void calculate_costs P_ ((struct frame *)); extern void set_tty_color_mode P_ ((struct frame *, Lisp_Object)); extern void tty_setup_colors P_ ((int)); extern void term_init P_ ((char *)); -extern void fatal P_ ((/* char *, ... */)); void cursor_to P_ ((int, int)); extern int tty_capable_p P_ ((struct frame *, unsigned, unsigned long, unsigned long));