Comment fix.
[bpt/emacs.git] / src / dispextern.h
index 6c31396..820f986 100644 (file)
@@ -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?  */
 
@@ -472,11 +476,13 @@ struct glyph_matrix
   /* Width and height of the matrix in columns and rows.  */
   int matrix_w, matrix_h;
 
-  /* If this structure describes a window matrix, window_top_y is the
-     top-most y-position and window_height is the height of the
-     window, and window_vscroll is the vscroll at the time the matrix
-     was last adjusted.  Only set for window-based redisplay.  */
-  int window_top_y, window_height, window_width, window_vscroll;
+  /* If this structure describes a window matrix of window W,
+     window_left_x is the value of W->left, window_top_y the value of
+     W->top, window_height and window_width are width and height of W,
+     as returned by window_box, and window_vscroll is the value of
+     W->vscroll at the time the matrix was last adjusted.  Only set
+     for window-based redisplay.  */
+  int window_left_x, window_top_y, window_height, window_width, window_vscroll;
 
   /* Number of glyphs reserved for left and right marginal areas when
      the matrix was last adjusted.  */
@@ -496,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;
 };
 
@@ -586,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
@@ -626,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;
@@ -689,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;
 };
@@ -1144,6 +1152,7 @@ enum lface_attribute_index
   LFACE_BOX_INDEX,
   LFACE_FONT_INDEX,
   LFACE_INHERIT_INDEX,
+  LFACE_AVGWIDTH_INDEX,
   LFACE_VECTOR_SIZE
 };
 
@@ -1191,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 */
 
@@ -1237,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
@@ -1278,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; 
 
@@ -1360,6 +1374,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;
 };
 
 
@@ -1576,9 +1594,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.  */
@@ -1613,6 +1631,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;
@@ -1966,6 +1985,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;
 
@@ -1987,8 +2022,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;
@@ -2115,12 +2150,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
 
 \f
 /***********************************************************************
@@ -2129,8 +2172,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 *));
@@ -2141,7 +2189,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,
@@ -2155,7 +2203,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 *));
@@ -2166,6 +2216,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 */
 
@@ -2178,9 +2229,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
@@ -2206,8 +2254,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;
@@ -2236,13 +2284,35 @@ 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;
+unsigned long image_background P_ ((struct image *, struct frame *,
+                                   XImage *ximg));
+int image_background_transparent P_ ((struct image *, struct frame *,
+                                     XImage *mask));
+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 */
 
@@ -2253,8 +2323,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 *));
@@ -2295,7 +2368,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));
@@ -2316,7 +2390,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));
@@ -2328,7 +2401,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 */