X-Git-Url: https://git.hcoop.net/bpt/emacs.git/blobdiff_plain/b437860aadfd97807b3fcdee9c1e8808c03ba312..54a72868e6b4d3001918d57884c8cf74ec8f9b8b:/src/dispextern.h diff --git a/src/dispextern.h b/src/dispextern.h index a6f12a04b4..2dd0d91b11 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 - Free Software Foundation, Inc. + Copyright (C) 1985, 1993, 1994, 1997, 1998, 1999, 2000, 2001, 2002, + 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -16,8 +16,8 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Emacs; see the file COPYING. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ +the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +Boston, MA 02110-1301, USA. */ /* New redisplay written by Gerd Moellmann . */ @@ -119,13 +119,24 @@ enum window_part #define GLYPH_DEBUG 0 #endif +/* If XASSERTS is non-zero, additional consistency checks are activated. + Turn it off by defining the macro XASSERTS to zero. */ + +#ifndef XASSERTS +#define XASSERTS 0 +#endif + /* Macros to include code only if GLYPH_DEBUG != 0. */ #if GLYPH_DEBUG #define IF_DEBUG(X) X -#define xassert(X) do {if (!(X)) abort ();} while (0) #else #define IF_DEBUG(X) (void) 0 +#endif + +#if XASSERTS +#define xassert(X) do {if (!(X)) abort ();} while (0) +#else #define xassert(X) (void) 0 #endif @@ -355,7 +366,8 @@ struct glyph #define FACE_ID_BITS 21 - /* Face of the glyph. */ + /* Face of the glyph. This is a realized face ID, + an index in the face cache of the frame. */ unsigned face_id : FACE_ID_BITS; /* Type of font used to display the character glyph. May be used to @@ -715,6 +727,11 @@ struct glyph_row position of the next row. */ struct display_pos end; + /* Non-zero means the overlay arrow bitmap is on this line. + -1 means use default overlay arrow bitmap, else + it specifies actual fringe bitmap number. */ + int overlay_arrow_bitmap; + /* Left fringe bitmap number (enum fringe_bitmap_type). */ unsigned left_user_fringe_bitmap : FRINGE_ID_BITS; @@ -753,9 +770,6 @@ struct glyph_row unsigned truncated_on_left_p : 1; unsigned truncated_on_right_p : 1; - /* 1 means the overlay arrow is on this line. */ - unsigned overlay_arrow_p : 1; - /* 1 means that this row displays a continued line, i.e. it has a continuation mark at the right side. */ unsigned continued_p : 1; @@ -1168,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) @@ -1193,6 +1215,11 @@ struct glyph_string /* Slice */ struct glyph_slice slice; + /* Non-null means the horizontal clipping region starts from the + left edge of *clip_head, and ends with the right edge of + *clip_tail, not including their overhangs. */ + struct glyph_string *clip_head, *clip_tail; + struct glyph_string *next, *prev; }; @@ -1574,6 +1601,7 @@ enum face_id CURSOR_FACE_ID, MOUSE_FACE_ID, MENU_FACE_ID, + VERTICAL_BORDER_FACE_ID, BASIC_FACE_ID_SENTINEL }; @@ -1780,6 +1808,18 @@ struct it_slice Lisp_Object height; }; +enum it_method { + GET_FROM_BUFFER = 0, + GET_FROM_DISPLAY_VECTOR, + GET_FROM_COMPOSITION, + GET_FROM_STRING, + GET_FROM_C_STRING, + GET_FROM_IMAGE, + GET_FROM_STRETCH, + NUM_IT_METHODS +}; + +#define IT_STACK_SIZE 4 struct it { @@ -1790,9 +1830,8 @@ struct it /* The window's frame. */ struct frame *f; - /* Function to call to load this structure with the next display - element. */ - int (* method) P_ ((struct it *it)); + /* Method to use to load this structure with the next display element. */ + enum it_method method; /* The next position at which to check for face changes, invisible text, overlay strings, end of text etc., which see. */ @@ -1847,6 +1886,9 @@ struct it means that no such character is involved. */ int dpvec_char_len; + /* Face id to use for all characters in display vector. -1 if unused. */ + int dpvec_face_id; + /* Face id of the iterator saved in case a glyph from dpvec contains a face. The face is restored when all glyphs from dpvec have been delivered. */ @@ -1869,7 +1911,7 @@ struct it /* Vector of overlays to process. Overlay strings are processed OVERLAY_STRING_CHUNK_SIZE at a time. */ -#define OVERLAY_STRING_CHUNK_SIZE 3 +#define OVERLAY_STRING_CHUNK_SIZE 16 Lisp_Object overlay_strings[OVERLAY_STRING_CHUNK_SIZE]; /* Total number of overlay strings to process. This can be > @@ -1887,22 +1929,47 @@ struct it from what we previously had. */ struct iterator_stack_entry { - int stop_charpos; - int face_id; Lisp_Object string; - struct display_pos pos; - int end_charpos; int string_nchars; + int end_charpos; + int stop_charpos; + int face_id; + + /* Save values specific to a given method. */ + union { + /* method == GET_FROM_IMAGE */ + struct { + Lisp_Object object; + struct it_slice slice; + int image_id; + } image; + /* method == GET_FROM_COMPOSITION */ + struct { + Lisp_Object object; + int c, len; + int cmp_id, cmp_len; + } comp; + /* method == GET_FROM_STRETCH */ + struct { + Lisp_Object object; + } stretch; + } u; + + /* current text and display positions. */ + struct text_pos position; + struct display_pos current; enum glyph_row_area area; + enum it_method method; unsigned multibyte_p : 1; unsigned string_from_display_prop_p : 1; unsigned display_ellipsis_p : 1; - struct it_slice slice; + + /* properties from display property that are reset by another display property. */ Lisp_Object space_width; - short voffset; Lisp_Object font_height; + short voffset; } - stack[2]; + stack[IT_STACK_SIZE]; /* Stack pointer. */ int sp; @@ -1939,6 +2006,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; @@ -2234,7 +2305,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 @@ -2377,6 +2448,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. */ @@ -2561,7 +2641,7 @@ int line_bottom_y P_ ((struct it *)); int display_prop_intangible_p P_ ((Lisp_Object)); void resize_echo_area_exactly P_ ((void)); int resize_mini_window P_ ((struct window *, int)); -int try_window P_ ((Lisp_Object, struct text_pos)); +int try_window P_ ((Lisp_Object, struct text_pos, int)); void window_box P_ ((struct window *, int, int *, int *, int *, int *)); int window_box_height P_ ((struct window *)); int window_text_bottom_y P_ ((struct window *)); @@ -2575,10 +2655,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 *, @@ -2608,7 +2690,9 @@ extern Lisp_Object help_echo_object, previous_help_echo_string; extern int help_echo_pos; extern struct frame *last_mouse_frame; extern int last_tool_bar_item; -extern int mouse_autoselect_window; +extern Lisp_Object Vmouse_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, @@ -2632,10 +2716,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 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)); @@ -2648,6 +2734,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)); @@ -2681,6 +2769,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 */ @@ -2693,6 +2784,9 @@ extern void x_reference_bitmap P_ ((struct frame *, int)); extern int x_create_bitmap_from_data P_ ((struct frame *, char *, unsigned int, unsigned int)); extern int x_create_bitmap_from_file P_ ((struct frame *, Lisp_Object)); +#if defined (HAVE_XPM) && defined (HAVE_X_WINDOWS) +extern int x_create_bitmap_from_xpm_data P_ ((struct frame *f, char **bits)); +#endif #ifndef x_destroy_bitmap extern void x_destroy_bitmap P_ ((struct frame *, int)); #endif @@ -2749,7 +2843,7 @@ int lookup_face P_ ((struct frame *, Lisp_Object *, int, struct face *)); int lookup_named_face P_ ((struct frame *, Lisp_Object, int, 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 lookup_derived_face P_ ((struct frame *, Lisp_Object, int, int, int)); void init_frame_faces P_ ((struct frame *)); void free_frame_faces P_ ((struct frame *)); void recompute_basic_faces P_ ((struct frame *)); @@ -2757,9 +2851,11 @@ int face_at_buffer_position P_ ((struct window *, int, int, int, int *, int, int)); int face_at_string_position P_ ((struct window *, Lisp_Object, int, int, int, int, int *, enum face_id, 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)); 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)); @@ -2786,6 +2882,7 @@ EXFUN (Fx_show_tip, 6); EXFUN (Fx_hide_tip, 0); extern void start_hourglass P_ ((void)); extern void cancel_hourglass P_ ((void)); +extern int hourglass_started P_ ((void)); extern int display_hourglass_p; /* Returns the background color of IMG, calculating one heuristically if @@ -2874,10 +2971,10 @@ int scrolling P_ ((struct frame *)); void do_pending_window_change P_ ((int)); void change_frame_size P_ ((struct frame *, int, int, int, int, int)); void bitch_at_user P_ ((void)); -Lisp_Object sit_for P_ ((int, int, int, int, int)); void init_display P_ ((void)); void syms_of_display P_ ((void)); extern Lisp_Object Qredisplay_dont_pause; +GLYPH spec_glyph_lookup_face P_ ((struct window *, GLYPH)); /* Defined in term.c */ @@ -2902,7 +2999,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));