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;
};
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
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;
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;
/* 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;
};
/* 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. */
(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. */
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 */
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;
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;
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,
/* 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;
};
/* 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. */
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;
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;
/* 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 *));
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));
+
+#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);
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 */
/* Defined in dispnew.c */
extern int inverse_video;
-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 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 *));
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));
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 */