X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/6df72db96a0cf94f90068924a41cf8e94b27ca5e..4d8ae757b2662eca9e0d49c3fb27e69fb85cab85:/src/dispextern.h diff --git a/src/dispextern.h b/src/dispextern.h index f3d232c6f5..102ae84a6e 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -1,5 +1,5 @@ /* Interface definitions for display code. - Copyright (C) 1985, 1993, 1994, 1997, 1998, 1999, 2000 + Copyright (C) 1985, 1993, 1994, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -242,7 +242,9 @@ struct glyph int charpos; /* Lisp object source of this glyph. Currently either a buffer or - a string, or 0. */ + a string, if the glyph was produced from characters which came from + a buffer or a string; or 0 if the glyph was inserted by redisplay + for its own purposes such as padding. */ Lisp_Object object; /* Width in pixels. */ @@ -281,8 +283,9 @@ struct glyph padding. */ unsigned padding_p : 1; - /* 1 means the actual glyph is not available in the current - system. */ + /* 1 means the actual glyph is not available, draw a box instead. + This can happen when a font couldn't be loaded, or a character + doesn't have a glyph in a font. */ unsigned glyph_not_available_p : 1; /* Face of the glyph. */ @@ -339,7 +342,8 @@ struct glyph && (X)->padding_p == (Y)->padding_p \ && (X)->left_box_line_p == (Y)->left_box_line_p \ && (X)->right_box_line_p == (Y)->right_box_line_p \ - && (X)->voffset == (Y)->voffset) + && (X)->voffset == (Y)->voffset \ + && (X)->pixel_width == (Y)->pixel_width) /* Are character codes, faces, padding_ps of glyphs *X and *Y equal? */ @@ -498,10 +502,12 @@ struct glyph_matrix char method[512]; #endif - /* The buffer this matrix displays. Set in redisplay_internal. */ + /* The buffer this matrix displays. Set in + mark_window_display_accurate_1. */ struct buffer *buffer; - /* Values of BEGV and ZV as of last redisplay. */ + /* Values of BEGV and ZV as of last redisplay. Set in + mark_window_display_accurate_1. */ int begv, zv; }; @@ -588,7 +594,8 @@ struct glyph_row int x, y; /* Width of the row in pixels without taking face extension at the - end of the row into account. */ + end of the row into account, and without counting truncation + and continuation glyphs at the end of a row on ttys. */ int pixel_width; /* Logical ascent/height of this line. The value of ascent is zero @@ -628,10 +635,6 @@ struct glyph_row screen. */ unsigned enabled_p : 1; - /* Display this line in inverse video? Used for the mode line and - menu bar lines. */ - unsigned inverse_p : 1; - /* 1 means row displays a text line that is truncated on the left or right side. */ unsigned truncated_on_left_p : 1; @@ -665,7 +668,7 @@ struct glyph_row unsigned contains_overlapping_glyphs_p : 1; /* 1 means this row is a wide as the window it is displayed in, including - scroll bars, bitmap areas, and internal borders. This also + scroll bars, fringes, and internal borders. This also implies that the row doesn't have marginal areas. */ unsigned full_width_p : 1; @@ -691,6 +694,9 @@ struct glyph_row /* 1 means some glyphs in this row are displayed in mouse-face. */ unsigned mouse_face_p : 1; + /* 1 means this row was ended by a newline from a string. */ + unsigned ends_in_newline_from_string_p : 1; + /* Continuation lines width at the start of the row. */ int continuation_lines_width; }; @@ -962,12 +968,12 @@ extern struct glyph_row scratch_glyph_row; /* Width of display region of window W. For terminal frames, this equals the width of W since there are no vertical scroll bars. For window system frames, the value has to be corrected by the pixel - width of vertical scroll bars, and bitmap areas. */ + width of vertical scroll bars, and fringes. */ #define WINDOW_DISPLAY_PIXEL_WIDTH(W) \ (((XFASTINT ((W)->width) \ - FRAME_SCROLL_BAR_WIDTH (XFRAME (WINDOW_FRAME ((W)))) \ - - FRAME_FLAGS_AREA_COLS (XFRAME (WINDOW_FRAME ((W))))) \ + - FRAME_FRINGE_COLS (XFRAME (WINDOW_FRAME ((W))))) \ * CANON_X_UNIT (XFRAME (WINDOW_FRAME ((W)))))) /* Height of the display region of W, including a mode line, if any. */ @@ -1011,7 +1017,7 @@ extern struct glyph_row scratch_glyph_row; (FRAME_INTERNAL_BORDER_WIDTH_SAFE (XFRAME (WINDOW_FRAME ((W)))) \ + (WINDOW_LEFT_MARGIN ((W)) \ * CANON_X_UNIT (XFRAME (WINDOW_FRAME ((W))))) \ - + FRAME_LEFT_FLAGS_AREA_WIDTH (XFRAME (WINDOW_FRAME ((W))))) + + FRAME_LEFT_FRINGE_WIDTH (XFRAME (WINDOW_FRAME ((W))))) /* Right edge of window W in pixels, relative to its frame. */ @@ -1146,6 +1152,7 @@ enum lface_attribute_index LFACE_BOX_INDEX, LFACE_FONT_INDEX, LFACE_INHERIT_INDEX, + LFACE_AVGWIDTH_INDEX, LFACE_VECTOR_SIZE }; @@ -1193,8 +1200,9 @@ struct face font may still be used somewhere else. */ XFontStruct *font; - /* Background stipple or bitmap used for this face. */ - Pixmap stipple; + /* Background stipple or bitmap used for this face. This is + an id as returned from load_pixmap. */ + int stipple; #else /* not HAVE_WINDOW_SYSTEM */ @@ -1239,7 +1247,11 @@ struct face unsigned int pixmap_w, pixmap_h; /* Non-zero means characters in this face have a box that thickness - around them. */ + around them. If it is negative, the absolute value indicates the + thickness, and the horizontal lines of box (top and bottom) are + drawn inside of characters glyph area. The vartical lines of box + (left and right) are drawn as the same way as the case that this + value is positive. */ int box_line_width; /* Type of box drawn. A value of FACE_NO_BOX means no box is drawn @@ -1280,7 +1292,7 @@ struct face unsigned background_defaulted_p : 1; /* 1 means that either no color is specified for underlining or that - the the specified color couldn't be loaded. Use the foreground + the specified color couldn't be loaded. Use the foreground color when drawing in that case. */ unsigned underline_defaulted_p : 1; @@ -1301,6 +1313,11 @@ struct face unsigned tty_reverse_p : 1; unsigned tty_blinking_p : 1; + /* 1 means that colors of this face may not be freed because they + have been copied bitwise from a base face (see + realize_x_face). */ + unsigned colors_copied_bitwise_p : 1; + /* Next and previous face in hash collision list of face cache. */ struct face *next, *prev; @@ -1335,7 +1352,7 @@ enum face_id DEFAULT_FACE_ID, MODE_LINE_FACE_ID, TOOL_BAR_FACE_ID, - BITMAP_AREA_FACE_ID, + FRINGE_FACE_ID, HEADER_LINE_FACE_ID, SCROLL_BAR_FACE_ID, BORDER_FACE_ID, @@ -1362,6 +1379,10 @@ struct face_cache /* The allocated size, and number of used slots of faces_by_id. */ int size, used; + + /* Flag indicating that attributes of the `menu' face have been + changed. */ + unsigned menu_face_changed_p : 1; }; @@ -1578,9 +1599,9 @@ struct it /* Vector of glyphs for control character translation. The pointer dpvec is set to ctl_chars when a control character is translated. This vector is also used for incomplete multibyte character - translation (e.g \222\244). Such a character is at most 3 bytes, - thus we need at most 12 bytes here. */ - Lisp_Object ctl_chars[12]; + translation (e.g \222\244). Such a character is at most 4 bytes, + thus we need at most 16 bytes here. */ + Lisp_Object ctl_chars[16]; /* Current buffer or string position of the iterator, including position in overlay strings etc. */ @@ -1615,6 +1636,7 @@ struct it enum glyph_row_area area; unsigned multibyte_p : 1; unsigned string_from_display_prop_p : 1; + unsigned display_ellipsis_p : 1; Lisp_Object space_width; short voffset; Lisp_Object font_height; @@ -1968,6 +1990,22 @@ struct image unsigned long *colors; int ncolors; + /* A single `background color' for this image, for the use of anyone that + cares about such a thing. Only valid if the `background_valid' field + is true. This should generally be accessed by calling the accessor + macro `IMAGE_BACKGROUND', which will heuristically calculate a value + if necessary. */ + unsigned long background; + + /* True if this image has a `transparent' background -- that is, is + uses an image mask. The accessor macro for this is + `IMAGE_BACKGROUND_TRANSPARENT'. */ + unsigned background_transparent : 1; + + /* True if the `background' and `background_transparent' fields are + valid, respectively. */ + unsigned background_valid : 1, background_transparent_valid : 1; + /* Width and height of the image. */ int width, height; @@ -1989,8 +2027,8 @@ struct image /* Relief to draw around the image. */ int relief; - /* Optional margin around the image. This includes the relief. */ - int margin; + /* Optional margins around the image. This includes the relief. */ + int hmargin, vmargin; /* Reference to the type of the image. */ struct image_type *type; @@ -2117,12 +2155,20 @@ extern int auto_raise_tool_bar_buttons_p; /* Margin around tool-bar buttons in pixels. */ -extern int tool_bar_button_margin; +extern Lisp_Object Vtool_bar_button_margin; /* Thickness of relief to draw around tool-bar buttons. */ extern int tool_bar_button_relief; +/* Default values of the above variables. */ + +#define DEFAULT_TOOL_BAR_BUTTON_MARGIN 1 +#define DEFAULT_TOOL_BAR_BUTTON_RELIEF 3 + +/* The height in pixels of the default tool-bar images. */ + +#define DEFAULT_TOOL_BAR_IMAGE_HEIGHT 24 /*********************************************************************** @@ -2131,8 +2177,13 @@ extern int tool_bar_button_relief; /* Defined in xdisp.c */ +struct glyph_row *row_containing_pos P_ ((struct window *, int, + struct glyph_row *, + struct glyph_row *, int)); +int string_buffer_position P_ ((struct window *, Lisp_Object, int)); +int line_bottom_y P_ ((struct it *)); int display_prop_intangible_p P_ ((Lisp_Object)); -void resize_echo_area_axactly P_ ((void)); +void resize_echo_area_exactly P_ ((void)); int resize_mini_window P_ ((struct window *, int)); int try_window P_ ((Lisp_Object, struct text_pos)); void window_box P_ ((struct window *, int, int *, int *, int *, int *)); @@ -2143,7 +2194,7 @@ int window_box_left P_ ((struct window *, int)); int window_box_right P_ ((struct window *, int)); void window_box_edges P_ ((struct window *, int, int *, int *, int *, int *)); void mark_window_display_accurate P_ ((Lisp_Object, int)); -void redisplay_preserve_echo_area P_ ((void)); +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)); void init_iterator P_ ((struct it *, struct window *, int, @@ -2157,7 +2208,9 @@ void produce_special_glyphs P_ ((struct it *, enum display_element_type)); void start_display P_ ((struct it *, struct window *, struct text_pos)); void move_it_to P_ ((struct it *, int, int, int, int, int)); void move_it_vertically P_ ((struct it *, int)); +void move_it_vertically_backward P_ ((struct it *, int)); void move_it_by_lines P_ ((struct it *, int, int)); +void move_it_past_eol P_ ((struct it *)); int frame_mode_line_height P_ ((struct frame *)); void highlight_trailing_whitespace P_ ((struct frame *, struct glyph_row *)); int tool_bar_item_info P_ ((struct frame *, struct glyph *, int *)); @@ -2168,6 +2221,7 @@ extern Lisp_Object Vimage_types; extern void add_to_log P_ ((char *, Lisp_Object, Lisp_Object)); extern int help_echo_showing_p; extern int current_mode_line_height, current_header_line_height; +extern int cursor_in_non_selected_windows; /* Defined in sysdep.c */ @@ -2180,9 +2234,6 @@ void init_sigio P_ ((int)); /* Defined in xfaces.c */ -#ifdef USE_X_TOOLKIT -void x_set_menu_resources_from_menu_face P_ ((struct frame *, Widget)); -#endif #ifdef HAVE_X_WINDOWS void x_free_colors P_ ((struct frame *, unsigned long *, int)); #endif @@ -2208,8 +2259,8 @@ void free_frame_faces P_ ((struct frame *)); void recompute_basic_faces P_ ((struct frame *)); 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 face_at_string_position P_ ((struct window *, Lisp_Object, int, int, int, + int, int *, enum face_id, 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; @@ -2238,13 +2289,39 @@ void forall_images_in_image_cache P_ ((struct frame *, int valid_image_p P_ ((Lisp_Object)); void prepare_image_for_display P_ ((struct frame *, struct image *)); int lookup_image P_ ((struct frame *, Lisp_Object)); -extern struct frame *tip_frame; + +#ifdef HAVE_X_WINDOWS +unsigned long image_background P_ ((struct image *, struct frame *, + XImage *ximg)); +int image_background_transparent P_ ((struct image *, struct frame *, + XImage *mask)); +#endif /* HAVE_X_WINDOWS */ + +extern Lisp_Object tip_frame; extern Window tip_window; EXFUN (Fx_show_tip, 6); EXFUN (Fx_hide_tip, 0); -extern void start_busy_cursor P_ ((void)); -extern void cancel_busy_cursor P_ ((void)); -extern int display_busy_cursor_p; +extern void start_hourglass P_ ((void)); +extern void cancel_hourglass P_ ((void)); +extern int display_hourglass_p; + +/* Returns the background color of IMG, calculating one heuristically if + necessary. If non-zero, XIMG is an existing XImage object to use for + the heuristic. */ + +#define IMAGE_BACKGROUND(img, f, ximg) \ + ((img)->background_valid \ + ? (img)->background \ + : image_background (img, f, ximg)) + +/* Returns true if IMG has a `transparent' background, using heuristics + to decide if necessary. If non-zero, MASK is an existing XImage + object to use for the heuristic. */ + +#define IMAGE_BACKGROUND_TRANSPARENT(img, f, mask) \ + ((img)->background_transparent_valid \ + ? (img)->background_transparent \ + : image_background_transparent (img, f, mask)) #endif /* HAVE_WINDOW_SYSTEM */ @@ -2255,8 +2332,11 @@ int popup_activated P_ ((void)); /* Defined in dispnew.c */ -int estimate_mode_line_height P_ ((struct frame *, enum face_id)); -Lisp_Object mode_line_string P_ ((struct window *, int, int, int, int *)); +extern int inverse_video; +extern int required_matrix_width P_ ((struct window *)); +extern int required_matrix_height P_ ((struct window *)); +extern int estimate_mode_line_height P_ ((struct frame *, enum face_id)); +extern Lisp_Object mode_line_string P_ ((struct window *, int, int, int, int *)); extern void redraw_frame P_ ((struct frame *)); extern void redraw_garbaged_frames P_ ((void)); extern void cancel_line P_ ((int, struct frame *)); @@ -2297,7 +2377,8 @@ int direct_output_forward_char P_ ((int)); int update_frame P_ ((struct frame *, int, int)); void update_single_window P_ ((struct window *, int)); int scrolling P_ ((struct frame *)); -int buffer_posn_from_coords P_ ((struct window *, int *, int *)); +void buffer_posn_from_coords P_ ((struct window *, int *, int *, + Lisp_Object *, struct display_pos *)); 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)); @@ -2318,7 +2399,6 @@ extern void set_scroll_region P_ ((int, int)); extern void turn_off_insert P_ ((void)); extern void turn_off_highlight P_ ((void)); extern void background_highlight P_ ((void)); -extern void reassert_line_highlight P_ ((int, int)); extern void clear_frame P_ ((void)); extern void clear_end_of_line P_ ((int)); extern void clear_end_of_line_raw P_ ((int)); @@ -2330,7 +2410,6 @@ extern void calculate_costs P_ ((struct frame *)); extern void term_init P_ ((char *)); extern void fatal P_ ((/* char *, ... */)); void cursor_to P_ ((int, int)); -void change_line_highlight P_ ((int, int, int, int)); /* Defined in scroll.c */