#include "msdos.h"
#endif
+#ifdef HAVE_X_WINDOWS
+typedef struct x_display_info Display_Info;
+#define NativeRectangle XRectangle
+#endif
+
#ifdef HAVE_NTGUI
#include "w32gui.h"
+typedef struct w32_display_info Display_Info;
#endif
-#ifdef MAC_OS
+#ifdef HAVE_CARBON
#include "macgui.h"
+typedef struct mac_display_info Display_Info;
+
+/* Include Carbon.h to define Cursor and Rect. */
+#undef mktime
+#undef DEBUG
+#undef Z
+#undef free
+#undef malloc
+#undef realloc
+/* Macros max and min defined in lisp.h conflict with those in
+ precompiled header Carbon.h. */
+#undef max
+#undef min
+#undef init_process
+#include <Carbon/Carbon.h>
+#undef Z
+#define Z (current_buffer->text->z)
+#undef free
+#define free unexec_free
+#undef malloc
+#define malloc unexec_malloc
+#undef realloc
+#define realloc unexec_realloc
+#undef min
+#define min(a, b) ((a) < (b) ? (a) : (b))
+#undef max
+#define max(a, b) ((a) > (b) ? (a) : (b))
+#undef init_process
+#define init_process emacs_init_process
+
+#endif
+
+
+#ifndef NativeRectangle
+#define NativeRectangle int
#endif
+
/* Structure forward declarations. Some are here because function
prototypes below reference structure types before their definition
in this file. Some are here because not every file including
struct window;
+/* Values returned from coordinates_in_window. */
+
+enum window_part
+{
+ ON_NOTHING,
+ ON_TEXT,
+ ON_MODE_LINE,
+ ON_VERTICAL_BORDER,
+ ON_HEADER_LINE,
+ ON_LEFT_FRINGE,
+ ON_RIGHT_FRINGE,
+ ON_LEFT_MARGIN,
+ ON_RIGHT_MARGIN
+};
+
+
\f
/***********************************************************************
Debugging
/* Width in pixels. */
short pixel_width;
+ /* Ascent and descent in pixels. */
+ short ascent, descent;
+
/* Vertical offset. If < 0, the glyph is displayed raised, if > 0
the glyph is displayed lowered. */
short voffset;
doesn't have a glyph in a font. */
unsigned glyph_not_available_p : 1;
+#define FACE_ID_BITS 21
+
/* Face of the glyph. */
- unsigned face_id : 21;
+ unsigned face_id : FACE_ID_BITS;
/* Type of font used to display the character glyph. May be used to
determine which set of functions to use to obtain font metrics
int matrix_w, matrix_h;
/* 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;
+ window_left_col is the value of W->left_col, window_top_line the
+ value of W->top_line, 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_col, window_top_line;
+ int window_height, window_width;
+ int window_vscroll;
/* Number of glyphs reserved for left and right marginal areas when
the matrix was last adjusted. */
#define MATRIX_ROW_PARTIALLY_VISIBLE_AT_TOP_P(W, ROW) \
(MATRIX_ROW_PARTIALLY_VISIBLE_P ((ROW)) \
- && (ROW)->y < WINDOW_DISPLAY_HEADER_LINE_HEIGHT ((W)))
+ && (ROW)->y < WINDOW_HEADER_LINE_HEIGHT ((W)))
/* Non-zero if ROW is partially visible at the bottom of window W. */
#define MATRIX_ROW_PARTIALLY_VISIBLE_AT_BOTTOM_P(W, ROW) \
(MATRIX_ROW_PARTIALLY_VISIBLE_P ((ROW)) \
- && (ROW)->y + (ROW)->height > WINDOW_DISPLAY_HEIGHT_NO_MODE_LINE ((W)))
+ && (ROW)->y + (ROW)->height > WINDOW_BOX_HEIGHT_NO_MODE_LINE ((W)))
/* Return the bottom Y + 1 of ROW. */
************************************************************************/
/* Enumeration for overriding/changing the face to use for drawing
- glyphs in x_draw_glyphs. */
+ glyphs in draw_glyphs. */
enum draw_glyphs_face
{
DRAW_IMAGE_SUNKEN
};
+#ifdef HAVE_WINDOW_SYSTEM
+
/* A sequence of glyphs to be drawn in the same face. */
struct glyph_string
struct glyph_string *next, *prev;
};
+#endif /* HAVE_WINDOW_SYSTEM */
\f
/************************************************************************
#define DESIRED_HEADER_LINE_HEIGHT(W) \
MATRIX_HEADER_LINE_HEIGHT ((W)->desired_matrix)
-/* Like FRAME_INTERNAL_BORDER_WIDTH but checks whether frame F is a
- window-system frame. */
-
-#define FRAME_INTERNAL_BORDER_WIDTH_SAFE(F) \
- (FRAME_WINDOW_P (F) ? FRAME_INTERNAL_BORDER_WIDTH (F) : 0)
-
-/* 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 fringes. */
-
-#define WINDOW_DISPLAY_PIXEL_WIDTH(W) \
- (((XFASTINT ((W)->width) \
- - FRAME_SCROLL_BAR_WIDTH (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. */
-
-#define WINDOW_DISPLAY_PIXEL_HEIGHT(W) \
- (XFASTINT ((W)->height) \
- * CANON_Y_UNIT (XFRAME (WINDOW_FRAME ((W)))))
-
-/* Height in pixels of the mode line. May be zero if W doesn't have a
- mode line. */
-
-#define WINDOW_DISPLAY_MODE_LINE_HEIGHT(W) \
- (WINDOW_WANTS_MODELINE_P ((W)) \
- ? CURRENT_MODE_LINE_HEIGHT (W) \
- : 0)
-
-/* Height in pixels of the header line. Zero if W doesn't have a header
- line. */
-
-#define WINDOW_DISPLAY_HEADER_LINE_HEIGHT(W) \
- (WINDOW_WANTS_HEADER_LINE_P ((W)) \
- ? CURRENT_HEADER_LINE_HEIGHT (W) \
- : 0)
-
-/* Pixel height of window W without mode line. */
-
-#define WINDOW_DISPLAY_HEIGHT_NO_MODE_LINE(W) \
- (WINDOW_DISPLAY_PIXEL_HEIGHT ((W)) \
- - WINDOW_DISPLAY_MODE_LINE_HEIGHT ((W)))
-
-/* Pixel height of window W without mode and header line. */
-
-#define WINDOW_DISPLAY_TEXT_HEIGHT(W) \
- (WINDOW_DISPLAY_PIXEL_HEIGHT ((W)) \
- - WINDOW_DISPLAY_MODE_LINE_HEIGHT ((W)) \
- - WINDOW_DISPLAY_HEADER_LINE_HEIGHT ((W)))
-
-/* Left edge of W in pixels relative to its frame. */
-
-#define WINDOW_DISPLAY_LEFT_EDGE_PIXEL_X(W) \
- (FRAME_INTERNAL_BORDER_WIDTH_SAFE (XFRAME (WINDOW_FRAME ((W)))) \
- + (WINDOW_LEFT_MARGIN ((W)) \
- * CANON_X_UNIT (XFRAME (WINDOW_FRAME ((W))))) \
- + FRAME_LEFT_FRINGE_WIDTH (XFRAME (WINDOW_FRAME ((W)))))
-
-/* Right edge of window W in pixels, relative to its frame. */
-
-#define WINDOW_DISPLAY_RIGHT_EDGE_PIXEL_X(W) \
- (WINDOW_DISPLAY_LEFT_EDGE_PIXEL_X ((W)) \
- + WINDOW_DISPLAY_PIXEL_WIDTH ((W)))
-
-/* Top edge of W in pixels relative to its frame. */
-
-#define WINDOW_DISPLAY_TOP_EDGE_PIXEL_Y(W) \
- (FRAME_INTERNAL_BORDER_WIDTH_SAFE (XFRAME (WINDOW_FRAME ((W)))) \
- + (XFASTINT ((W)->top) \
- * CANON_Y_UNIT (XFRAME (WINDOW_FRAME ((W))))))
-
-/* Bottom edge of window W relative to its frame. */
-
-#define WINDOW_DISPLAY_BOTTOM_EDGE_PIXEL_Y(W) \
- (WINDOW_DISPLAY_TOP_EDGE_PIXEL_Y ((W)) \
- + WINDOW_DISPLAY_PIXEL_HEIGHT ((W)))
-
-/* Convert window W relative pixel X to frame pixel coordinates. */
-
-#define WINDOW_TO_FRAME_PIXEL_X(W, X) \
- ((X) + WINDOW_DISPLAY_LEFT_EDGE_PIXEL_X ((W)))
-
-/* Convert window W relative pixel Y to frame pixel coordinates. */
-
-#define WINDOW_TO_FRAME_PIXEL_Y(W, Y) \
- ((Y) + WINDOW_DISPLAY_TOP_EDGE_PIXEL_Y ((W)))
-
-/* Convert frame relative pixel X to window relative pixel X. */
-
-#define FRAME_TO_WINDOW_PIXEL_X(W, X) \
- ((X) - WINDOW_DISPLAY_LEFT_EDGE_PIXEL_X ((W)))
-
-/* Convert frame relative pixel Y to window relative pixel Y. */
-
-#define FRAME_TO_WINDOW_PIXEL_Y(W, Y) \
- ((Y) - WINDOW_DISPLAY_TOP_EDGE_PIXEL_Y ((W)))
-
-/* Width of left margin area in pixels. */
-
-#define WINDOW_DISPLAY_LEFT_AREA_PIXEL_WIDTH(W) \
- (NILP ((W)->left_margin_width) \
- ? 0 \
- : (XINT ((W)->left_margin_width) \
- * CANON_X_UNIT (XFRAME (WINDOW_FRAME ((W))))))
-
-/* Width of right marginal area in pixels. */
-
-#define WINDOW_DISPLAY_RIGHT_AREA_PIXEL_WIDTH(W) \
- (NILP ((W)->right_margin_width) \
- ? 0 \
- : (XINT ((W)->right_margin_width) \
- * CANON_X_UNIT (XFRAME (WINDOW_FRAME ((W))))))
-
-/* Width of text area in pixels. */
-
-#define WINDOW_DISPLAY_TEXT_AREA_PIXEL_WIDTH(W) \
- (WINDOW_DISPLAY_PIXEL_WIDTH ((W)) \
- - WINDOW_DISPLAY_LEFT_AREA_PIXEL_WIDTH ((W)) \
- - WINDOW_DISPLAY_RIGHT_AREA_PIXEL_WIDTH ((W)))
-
-/* Convert a text area relative x-position in window W to frame X
- pixel coordinates. */
-
-#define WINDOW_TEXT_TO_FRAME_PIXEL_X(W, X) \
- (WINDOW_TO_FRAME_PIXEL_X ((W), (X)) \
- + WINDOW_DISPLAY_LEFT_AREA_PIXEL_WIDTH ((W)))
-
-/* Translate an x-position relative to AREA in window W to frame pixel
- coordinates. */
-
-#define WINDOW_AREA_TO_FRAME_PIXEL_X(W, AREA, X) \
- (WINDOW_TO_FRAME_PIXEL_X ((W), (X)) \
- + (((AREA) > LEFT_MARGIN_AREA) \
- ? WINDOW_DISPLAY_LEFT_AREA_PIXEL_WIDTH ((W)) \
- : 0) \
- + (((AREA) > TEXT_AREA) \
- ? WINDOW_DISPLAY_TEXT_AREA_PIXEL_WIDTH ((W)) \
- : 0))
-
-/* Return the pixel width of AREA in W. */
-
-#define WINDOW_AREA_PIXEL_WIDTH(W, AREA) \
- (((AREA) == TEXT_AREA) \
- ? WINDOW_DISPLAY_TEXT_AREA_PIXEL_WIDTH ((W)) \
- : (((AREA) == LEFT_MARGIN_AREA) \
- ? WINDOW_DISPLAY_LEFT_AREA_PIXEL_WIDTH ((W)) \
- : WINDOW_DISPLAY_RIGHT_AREA_PIXEL_WIDTH ((W))))
-
/* Value is non-zero if window W wants a mode line. */
#define WINDOW_WANTS_MODELINE_P(W) \
&& FRAME_WANTS_MODELINE_P (XFRAME (WINDOW_FRAME ((W)))) \
&& BUFFERP ((W)->buffer) \
&& !NILP (XBUFFER ((W)->buffer)->mode_line_format) \
- && XFASTINT ((W)->height) > 1)
+ && WINDOW_TOTAL_LINES (W) > 1)
/* Value is non-zero if window W wants a header line. */
&& FRAME_WANTS_MODELINE_P (XFRAME (WINDOW_FRAME ((W)))) \
&& BUFFERP ((W)->buffer) \
&& !NILP (XBUFFER ((W)->buffer)->header_line_format) \
- && XFASTINT ((W)->height) > 1 + !NILP (XBUFFER ((W)->buffer)->mode_line_format))
+ && WINDOW_TOTAL_LINES (W) > 1 + !NILP (XBUFFER ((W)->buffer)->mode_line_format))
+
+
+/* Return proper value to be used as baseline offset of font that has
+ ASCENT and DESCENT to draw characters by the font at the vertical
+ center of the line of frame F.
+
+ Here, our task is to find the value of BOFF in the following figure;
+
+ -------------------------+-----------+-
+ -+-+---------+-+ | |
+ | | | | | |
+ | | | | F_ASCENT F_HEIGHT
+ | | | ASCENT | |
+ HEIGHT | | | | |
+ | | |-|-+------+-----------|------- baseline
+ | | | | BOFF | |
+ | |---------|-+-+ | |
+ | | | DESCENT | |
+ -+-+---------+-+ F_DESCENT |
+ -------------------------+-----------+-
+
+ -BOFF + DESCENT + (F_HEIGHT - HEIGHT) / 2 = F_DESCENT
+ BOFF = DESCENT + (F_HEIGHT - HEIGHT) / 2 - F_DESCENT
+ DESCENT = FONT->descent
+ HEIGHT = FONT_HEIGHT (FONT)
+ F_DESCENT = (FRAME_FONT (F)->descent
+ - F->output_data.x->baseline_offset)
+ F_HEIGHT = FRAME_LINE_HEIGHT (F)
+*/
+
+#define VCENTER_BASELINE_OFFSET(FONT, F) \
+ (FONT_DESCENT (FONT) \
+ + (FRAME_LINE_HEIGHT ((F)) - FONT_HEIGHT ((FONT)) \
+ + (FRAME_LINE_HEIGHT ((F)) > FONT_HEIGHT ((FONT)))) / 2 \
+ - (FONT_DESCENT (FRAME_FONT (F)) - FRAME_BASELINE_OFFSET (F)))
\f
/***********************************************************************
BASIC_FACE_ID_SENTINEL
};
+#define MAX_FACE_ID ((1 << FACE_ID_BITS) - 1)
/* A cache of realized faces. Each frame has its own cache because
Emacs allows different frame-local face definitions. */
thus we need at most 16 bytes here. */
Lisp_Object ctl_chars[16];
+ /* Initial buffer or string position of the iterator, before skipping
+ over display properties and invisible text. */
+ struct display_pos start;
+
/* Current buffer or string position of the iterator, including
position in overlay strings etc. */
struct display_pos current;
short truncation_pixel_width, continuation_pixel_width;
/* First and last visible x-position in the display area. If window
- is hscrolled by n columns, first_visible_x == n * CANON_X_UNIT
+ is hscrolled by n columns, first_visible_x == n * FRAME_COLUMN_WIDTH
(f), and last_visible_x == pixel width of W + first_visible_x. */
int first_visible_x, last_visible_x;
glyph_row in move_it_to and display_line. */
int current_y;
+ /* Vertical matrix position of first text line in window. */
+ int first_vpos;
+
/* Current vertical matrix position, or line number. Automatically
incremented by move_it_to and display_line. */
int vpos;
};
+/* Handlers for setting frame parameters. */
+
+typedef void (*frame_parm_handler) P_ ((struct frame *, Lisp_Object, Lisp_Object));
+
+
/* Structure holding system-dependent interface functions needed
for window-based redisplay. */
struct redisplay_interface
{
+ /* Handlers for setting frame parameters. */
+ frame_parm_handler *frame_parm_handlers;
+
/* Produce glyphs/get display metrics for the display element IT is
loaded with. */
void (*produce_glyphs) P_ ((struct it *it));
/* Flush the display of frame F. For X, this is XFlush. */
void (*flush_display) P_ ((struct frame *f));
+ /* Flush the display of frame F if non-NULL. This is called
+ during redisplay, and should be NULL on systems which flushes
+ automatically before reading input. */
+ void (*flush_display_optional) P_ ((struct frame *f));
+
/* Clear the mouse hightlight in window W, if there is any. */
- void (*clear_mouse_face) P_ ((struct window *w));
+ void (*clear_window_mouse_face) P_ ((struct window *w));
/* Set *LEFT and *RIGHT to the left and right overhang of GLYPH on
frame F. */
void (*fix_overlapping_area) P_ ((struct window *w, struct glyph_row *row,
enum glyph_row_area area));
+#ifdef HAVE_WINDOW_SYSTEM
+
/* Draw a fringe bitmap in window W of row ROW using parameters P. */
void (*draw_fringe_bitmap) P_ ((struct window *w, struct glyph_row *row,
struct draw_fringe_bitmap_params *p));
/* Draw a glyph string S. */
void (*draw_glyph_string) P_ ((struct glyph_string *s));
+/* Define cursor CURSOR on frame F. */
+ void (*define_frame_cursor) P_ ((struct frame *f, Cursor cursor));
+
+/* Clear the area at (X,Y,WIDTH,HEIGHT) of frame F. */
+ void (*clear_frame_area) P_ ((struct frame *f, int x, int y,
+ int width, int height));
+
+/* Draw specified cursor CURSOR_TYPE of width CURSOR_WIDTH
+ at row GLYPH_ROW on window W if ON_P is 1. If ON_P is
+ 0, don't draw cursor. If ACTIVE_P is 1, system caret
+ should track this cursor (when applicable). */
+ void (*draw_window_cursor) P_ ((struct window *w,
+ struct glyph_row *glyph_row,
+ int x, int y,
+ int cursor_type, int cursor_width,
+ int on_p, int active_p));
+
+/* Draw vertical border for window W from (X,Y0) to (X,Y1). */
+ void (*draw_vertical_window_border) P_ ((struct window *w,
+ int x, int y0, int y1));
+
+/* Shift display of frame F to make room for inserted glyphs.
+ The area at pixel (X,Y) of width WIDTH and height HEIGHT is
+ shifted right by SHIFT_BY pixels. */
+ void (*shift_glyphs_for_insert) P_ ((struct frame *f,
+ int x, int y, int width,
+ int height, int shift_by));
+
+#endif /* HAVE_WINDOW_SYSTEM */
};
/* The current interface for window-based redisplay. */
extern struct redisplay_interface *rif;
-/* Hook to call in estimate_mode_line_height. */
-
-extern int (* estimate_mode_line_height_hook) P_ ((struct frame *,
- enum face_id));
-
-
-/* Return proper value to be used as baseline offset of font that has
- ASCENT and DESCENT to draw characters by the font at the vertical
- center of the line of frame F.
-
- Here, out task is to find the value of BOFF in the following figure;
-
- -------------------------+-----------+-
- -+-+---------+-+ | |
- | | | | | |
- | | | | F_ASCENT F_HEIGHT
- | | | ASCENT | |
- HEIGHT | | | | |
- | | |-|-+------+-----------|------- baseline
- | | | | BOFF | |
- | |---------|-+-+ | |
- | | | DESCENT | |
- -+-+---------+-+ F_DESCENT |
- -------------------------+-----------+-
-
- -BOFF + DESCENT + (F_HEIGHT - HEIGHT) / 2 = F_DESCENT
- BOFF = DESCENT + (F_HEIGHT - HEIGHT) / 2 - F_DESCENT
- DESCENT = FONT->descent
- HEIGHT = FONT_HEIGHT (FONT)
- F_DESCENT = (F->output_data.x->font->descent
- - F->output_data.x->baseline_offset)
- F_HEIGHT = FRAME_LINE_HEIGHT (F)
-*/
-
-#define VCENTER_BASELINE_OFFSET(FONT, F) \
- (FONT_DESCENT (FONT) \
- + (FRAME_LINE_HEIGHT ((F)) - FONT_HEIGHT ((FONT)) \
- + (FRAME_LINE_HEIGHT ((F)) > FONT_HEIGHT ((FONT)))) / 2 \
- - (FONT_DESCENT (FRAME_FONT (F)) - FRAME_BASELINE_OFFSET (F)))
-
\f
/***********************************************************************
Images
TOOL_BAR_IMAGE_DISABLED_DESELECTED
};
-/* Non-zero means raise tool-bar buttons when the mouse moves over them. */
-
-extern int auto_raise_tool_bar_buttons_p;
-
/* Margin around tool-bar buttons in pixels. */
extern Lisp_Object Vtool_bar_button_margin;
int window_text_bottom_y P_ ((struct window *));
int window_box_width P_ ((struct window *, int));
int window_box_left P_ ((struct window *, int));
+int window_box_left_offset P_ ((struct window *, int));
int window_box_right P_ ((struct window *, int));
+int window_box_right_offset P_ ((struct window *, int));
void window_box_edges P_ ((struct window *, int, int *, int *, int *, int *));
+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 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 *,
int in_display_vector_p 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 *));
void draw_row_fringe_bitmaps P_ ((struct window *, struct glyph_row *));
void compute_fringe_widths P_ ((struct frame *, int));
extern Lisp_Object Qtool_bar;
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 Lisp_Object help_echo_string, help_echo_window;
+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;
+
+#ifdef HAVE_WINDOW_SYSTEM
#if GLYPH_DEBUG
extern void dump_glyph_string P_ ((struct glyph_string *));
extern void x_get_glyph_overhangs P_ ((struct glyph *, struct frame *,
int *, int *));
extern void x_produce_glyphs P_ ((struct it *));
-extern int x_draw_glyphs P_ ((struct window *, int , struct glyph_row *,
- enum glyph_row_area, int, int,
- enum draw_glyphs_face, int));
-extern void notice_overwritten_cursor P_ ((struct window *,
- enum glyph_row_area,
- int, int, int, int));
+extern void x_write_glyphs P_ ((struct glyph *, int));
+extern void x_insert_glyphs P_ ((struct glyph *, int len));
+extern void x_clear_end_of_line P_ ((int));
+
+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));
+extern void draw_phys_cursor_glyph P_ ((struct window *,
+ struct glyph_row *,
+ enum draw_glyphs_face));
+extern void erase_phys_cursor P_ ((struct window *));
+extern void display_and_set_cursor P_ ((struct window *,
+ int, int, int, int, int));
+
+extern void set_output_cursor P_ ((struct cursor_pos *));
+extern void x_cursor_to P_ ((int, int, int, int));
+
+extern void x_update_cursor P_ ((struct frame *, int));
+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 void get_glyph_string_clip_rect P_ ((struct glyph_string *,
+ NativeRectangle *nr));
+extern Lisp_Object find_hot_spot P_ ((Lisp_Object, int, int));
+extern void note_mouse_highlight P_ ((struct frame *, int, int));
+extern void x_clear_window_mouse_face P_ ((struct window *));
+extern void cancel_mouse_face P_ ((struct frame *));
+
+extern void handle_tool_bar_click P_ ((struct frame *,
+ int, int, int, unsigned int));
+
+/* msdos.c defines its own versions of these functions. */
+extern int clear_mouse_face P_ ((Display_Info *));
+extern void show_mouse_face P_ ((Display_Info *, enum draw_glyphs_face));
+extern int cursor_in_mouse_face_p P_ ((struct window *w));
+
+extern void expose_frame P_ ((struct frame *, int, int, int, int));
+extern int x_intersect_rectangles P_ ((XRectangle *, XRectangle *,
+ XRectangle *));
+#endif
/* Defined in sysdep.c */
-void get_frame_size P_ ((int *, int *));
+void get_tty_size P_ ((struct tty_output *, int *, int *));
void request_sigio P_ ((void));
void unrequest_sigio P_ ((void));
-int tabs_safe_p P_ ((void));
-void init_baud_rate P_ ((void));
+int tabs_safe_p P_ ((struct tty_output *));
+void init_baud_rate P_ ((struct tty_output *));
void init_sigio P_ ((int));
/* Defined in xfaces.c */
unsigned long load_color P_ ((struct frame *, struct face *, Lisp_Object,
enum lface_attribute_index));
void unload_color P_ ((struct frame *, unsigned long));
-int frame_update_line_height P_ ((struct frame *));
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 *));
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 Lisp_Object marginal_area_string P_ ((struct window *, int, int, int, int *));
+extern Lisp_Object mode_line_string P_ ((struct window *, int *, int *,
+ int *, int *,
+ enum window_part, int *));
+extern Lisp_Object marginal_area_string P_ ((struct window *, int *, int *,
+ int *, int *,
+ enum window_part, int *));
extern void redraw_frame P_ ((struct frame *));
extern void redraw_garbaged_frames P_ ((void));
extern void cancel_line P_ ((int, struct frame *));
void update_single_window P_ ((struct window *, int));
int scrolling P_ ((struct frame *));
void buffer_posn_from_coords P_ ((struct window *, int *, int *,
+ 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));
extern void update_end P_ ((struct frame *));
extern void set_terminal_window P_ ((int));
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 turn_off_insert P_ ((struct tty_output *));
+extern void turn_off_highlight P_ ((struct tty_output *));
+extern void background_highlight P_ ((struct tty_output *));
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 tty_clear_end_of_line P_ ((struct tty_output *, int));
extern void delete_glyphs P_ ((int));
extern void ins_del_lines P_ ((int, int));
extern int string_cost P_ ((char *));
extern int per_line_cost P_ ((char *));
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 tty_setup_colors P_ ((struct tty_output *, int));
+extern struct tty_output *term_init P_ ((Lisp_Object, char *, char *));
+extern struct tty_output *term_dummy_init P_ ((void));
extern void fatal P_ ((/* char *, ... */));
void cursor_to P_ ((int, int));
-extern int tty_capable_p P_ ((struct frame *, unsigned, unsigned long, unsigned long));
+extern int tty_capable_p P_ ((struct tty_output *, unsigned, unsigned long, unsigned long));
/* Defined in scroll.c */
void scrolling_1 P_ ((struct frame *, int, int, int, int *, int *, int *,
int *, int));
+/* Defined in frame.c */
+
+#ifdef HAVE_WINDOW_SYSTEM
+
+/* Types we might convert a resource string into. */
+enum resource_types
+{
+ RES_TYPE_NUMBER,
+ RES_TYPE_FLOAT,
+ RES_TYPE_BOOLEAN,
+ RES_TYPE_STRING,
+ RES_TYPE_SYMBOL
+};
+
+extern Lisp_Object x_get_arg P_ ((Display_Info *, Lisp_Object,
+ Lisp_Object, char *, char *class,
+ enum resource_types));
+extern Lisp_Object x_frame_get_arg P_ ((struct frame *, Lisp_Object,
+ Lisp_Object, char *, char *,
+ enum resource_types));
+extern Lisp_Object x_frame_get_and_record_arg P_ ((
+ struct frame *, Lisp_Object,
+ Lisp_Object, char *, char *,
+ enum resource_types));
+extern Lisp_Object x_default_parameter P_ ((struct frame *, Lisp_Object,
+ Lisp_Object, Lisp_Object,
+ char *, char *,
+ enum resource_types));
+
+#endif /* HAVE_WINDOW_SYSTEM */
+
#endif /* not DISPEXTERN_H_INCLUDED */
+
+/* arch-tag: c65c475f-1c1e-4534-8795-990b8509fd65
+ (do not change this comment) */