X-Git-Url: http://git.hcoop.net/bpt/emacs.git/blobdiff_plain/79fa9e0fe078dfbaff0585c49f965fdbb77bf6ba..385ed61f9d0bffef8a3f037e8cdc85d0de71bf15:/src/dispextern.h diff --git a/src/dispextern.h b/src/dispextern.h index 00bb2ca095..3b71002a30 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -48,12 +48,30 @@ typedef struct { #include "msdos.h" #endif +#ifdef HAVE_X_WINDOWS +typedef struct x_display_info Display_Info; +typedef XImage * XImagePtr; +typedef XImagePtr XImagePtr_or_DC; +#define NativeRectangle XRectangle +#endif + #ifdef HAVE_NTGUI #include "w32gui.h" +typedef struct w32_display_info Display_Info; +typedef XImage *XImagePtr; +typedef HDC XImagePtr_or_DC; #endif -#ifdef MAC_OS +#ifdef HAVE_CARBON #include "macgui.h" +typedef struct mac_display_info Display_Info; +/* Mac equivalent of XImage. */ +typedef Pixmap XImagePtr; +typedef XImagePtr XImagePtr_or_DC; +#endif + +#ifndef NativeRectangle +#define NativeRectangle int #endif /* Structure forward declarations. Some are here because function @@ -69,6 +87,25 @@ struct frame; 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 +}; + +/* Number of bits allocated to store fringe bitmap numbers. */ +#define FRINGE_ID_BITS 8 + + /*********************************************************************** Debugging @@ -263,6 +300,9 @@ struct glyph /* 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; @@ -301,8 +341,10 @@ struct glyph 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 @@ -492,12 +534,14 @@ struct glyph_matrix 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. */ @@ -644,6 +688,33 @@ struct glyph_row position of the next row. */ struct display_pos end; + /* Left fringe bitmap number (enum fringe_bitmap_type). */ + unsigned left_user_fringe_bitmap : FRINGE_ID_BITS; + + /* Face of the left fringe glyph. */ + unsigned left_user_fringe_face_id : FACE_ID_BITS; + + /* Right fringe bitmap number (enum fringe_bitmap_type). */ + unsigned right_user_fringe_bitmap : FRINGE_ID_BITS; + + /* Face of the right fringe glyph. */ + unsigned right_user_fringe_face_id : FACE_ID_BITS; + + /* Left fringe bitmap number (enum fringe_bitmap_type). */ + unsigned left_fringe_bitmap : FRINGE_ID_BITS; + + /* Face of the left fringe glyph. */ + unsigned left_fringe_face_id : FACE_ID_BITS; + + /* Right fringe bitmap number (enum fringe_bitmap_type). */ + unsigned right_fringe_bitmap : FRINGE_ID_BITS; + + /* Face of the right fringe glyph. */ + unsigned right_fringe_face_id : FACE_ID_BITS; + + /* 1 means that we must draw the bitmaps of this row. */ + unsigned redraw_fringe_bitmaps_p : 1; + /* In a desired matrix, 1 means that this row must be updated. In a current matrix, 0 means that the row has been invalidated, i.e. the row's contents do not agree with what is visible on the @@ -712,6 +783,29 @@ struct glyph_row /* 1 means this row was ended by a newline from a string. */ unsigned ends_in_newline_from_string_p : 1; + /* 1 means this row width is exactly the width of the window, and the + final newline character is hidden in the right fringe. */ + unsigned exact_window_width_line_p : 1; + + /* 1 means this row currently shows the cursor in the right fringe. */ + unsigned cursor_in_fringe_p : 1; + + /* Non-zero means display a bitmap on X frames indicating that this + the first line of the buffer. */ + unsigned indicate_bob_p : 1; + + /* Non-zero means display a bitmap on X frames indicating that this + the top line of the window, but not start of the buffer. */ + unsigned indicate_top_line_p : 1; + + /* Non-zero means display a bitmap on X frames indicating that this + the last line of the buffer. */ + unsigned indicate_eob_p : 1; + + /* Non-zero means display a bitmap on X frames indicating that this + the bottom line of the window, but not end of the buffer. */ + unsigned indicate_bottom_line_p : 1; + /* Continuation lines width at the start of the row. */ int continuation_lines_width; }; @@ -808,13 +902,13 @@ struct glyph_row *matrix_row P_ ((struct glyph_matrix *, int)); #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. */ @@ -874,10 +968,6 @@ extern int fonts_changed_p; extern struct glyph space_glyph; -/* Frame being updated by update_window/update_frame. */ - -extern struct frame *updating_frame; - /* Window being updated by update_window. This is non-null as long as update_window has not finished, and null otherwise. It's role is analogous to updating_frame. */ @@ -921,7 +1011,7 @@ extern struct glyph_row scratch_glyph_row; ************************************************************************/ /* Enumeration for overriding/changing the face to use for drawing - glyphs in x_draw_glyphs. */ + glyphs in draw_glyphs. */ enum draw_glyphs_face { @@ -1139,156 +1229,6 @@ struct glyph_string #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) \ @@ -1297,7 +1237,7 @@ struct glyph_string && 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. */ @@ -1307,7 +1247,42 @@ struct glyph_string && 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->device->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))) /*********************************************************************** @@ -1548,6 +1523,7 @@ enum face_id 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. */ @@ -1626,26 +1602,6 @@ extern int face_change_count; Fringes ***********************************************************************/ -enum fringe_bitmap_type -{ - NO_FRINGE_BITMAP = 0, - LEFT_TRUNCATION_BITMAP, - RIGHT_TRUNCATION_BITMAP, - CONTINUED_LINE_BITMAP, - CONTINUATION_LINE_BITMAP, - OVERLAY_ARROW_BITMAP, - ZV_LINE_BITMAP, - MAX_FRINGE_BITMAPS -}; - -struct fringe_bitmap -{ - int width; - int height; - int period; - unsigned char *bits; -}; - /* Structure used to describe where and how to draw a fringe bitmap. WHICH is the fringe bitmap to draw. WD and H is the (adjusted) width and height of the bitmap, DH is the height adjustment (if @@ -1656,14 +1612,17 @@ struct fringe_bitmap struct draw_fringe_bitmap_params { - enum fringe_bitmap_type which; + int which; /* enum fringe_bitmap_type */ + unsigned short *bits; int wd, h, dh; int x, y; int bx, nx, by, ny; + unsigned cursor_p : 1; + unsigned overlay_p : 1; struct face *face; }; -extern struct fringe_bitmap fringe_bitmaps[MAX_FRINGE_BITMAPS]; +#define MAX_FRINGE_BITMAPS (1<produce_glyphs ((IT)); \ - else \ - produce_glyphs ((IT)); \ - if ((IT)->glyph_row != NULL) \ - inhibit_free_realized_faces = 1; \ - } while (0) +#define PRODUCE_GLYPHS(IT) \ + do { \ + extern int inhibit_free_realized_faces; \ + if (FRAME_RIF ((IT)->f) != NULL) \ + FRAME_RIF ((IT)->f)->produce_glyphs ((IT)); \ + else \ + produce_glyphs ((IT)); \ + if ((IT)->glyph_row != NULL) \ + inhibit_free_realized_faces = 1; \ + } while (0) /* Bit-flags indicating what operation move_it_to should perform. */ @@ -2102,11 +2080,19 @@ struct run }; +/* 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)); @@ -2149,8 +2135,13 @@ struct redisplay_interface /* 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. */ @@ -2169,6 +2160,11 @@ struct redisplay_interface void (*draw_fringe_bitmap) P_ ((struct window *w, struct glyph_row *row, struct draw_fringe_bitmap_params *p)); + /* Define and destroy fringe bitmap no. WHICH. */ + void (*define_fringe_bitmap) P_ ((int which, unsigned short *bits, + int h, int wd)); + void (*destroy_fringe_bitmap) P_ ((int which)); + /* Get metrics of character CHAR2B in FONT of type FONT_TYPE. Value is null if CHAR2B is not contained in the font. */ XCharStruct * (*per_char_metric) P_ ((XFontStruct *font, XChar2b *char2b, @@ -2187,53 +2183,37 @@ struct redisplay_interface /* 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))) - /*********************************************************************** Images @@ -2446,10 +2426,6 @@ enum tool_bar_item_image 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; @@ -2505,8 +2481,14 @@ int window_box_height P_ ((struct window *)); 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 *, @@ -2528,9 +2510,6 @@ void move_it_past_eol P_ ((struct it *)); 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 Lisp_Object Vshow_trailing_whitespace; extern int mode_line_in_non_selected_windows; @@ -2539,6 +2518,17 @@ 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 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; + +extern int calc_pixel_width_or_height P_ ((double *, struct it *, Lisp_Object, + /* XFontStruct */ void *, int, int *)); + +#ifdef HAVE_WINDOW_SYSTEM #if GLYPH_DEBUG extern void dump_glyph_string P_ ((struct glyph_string *)); @@ -2547,21 +2537,107 @@ 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 fringe.c */ + +int valid_fringe_bitmap_id_p (int); +void draw_fringe_bitmap P_ ((struct window *, struct glyph_row *, int)); +void draw_row_fringe_bitmaps P_ ((struct window *, struct glyph_row *)); +void draw_window_fringes P_ ((struct window *)); +int update_window_fringes P_ ((struct window *, int)); +void compute_fringe_widths P_ ((struct frame *, int)); + +#ifdef WINDOWS_NT +void w32_init_fringe P_ ((void)); +void w32_reset_fringes P_ ((void)); +#endif + +/* Defined in image.c */ + +#ifdef HAVE_WINDOW_SYSTEM + +extern int x_bitmap_height P_ ((struct frame *, int)); +extern int x_bitmap_width P_ ((struct frame *, int)); +extern int x_bitmap_pixmap P_ ((struct frame *, int)); +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)); +#ifndef x_destroy_bitmap +extern void x_destroy_bitmap P_ ((struct frame *, int)); +#endif +extern void x_destroy_all_bitmaps P_ ((Display_Info *)); +extern int x_create_bitmap_mask P_ ((struct frame * , int)); +extern Lisp_Object x_find_image_file P_ ((Lisp_Object)); + +void x_kill_gs_process P_ ((Pixmap, struct frame *)); +struct image_cache *make_image_cache P_ ((void)); +void free_image_cache P_ ((struct frame *)); +void clear_image_cache P_ ((struct frame *, int)); +void forall_images_in_image_cache P_ ((struct frame *, + void (*) P_ ((struct image *)))); +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)); + +unsigned long image_background P_ ((struct image *, struct frame *, + XImagePtr_or_DC ximg)); +int image_background_transparent P_ ((struct image *, struct frame *, + XImagePtr_or_DC mask)); + +#endif /* Defined in sysdep.c */ -void get_frame_size P_ ((int *, int *)); +void get_tty_size P_ ((int, 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_ ((int)); +void init_baud_rate P_ ((int)); void init_sigio P_ ((int)); /* Defined in xfaces.c */ @@ -2577,7 +2653,7 @@ void clear_face_cache P_ ((int)); 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 face_font_available_p P_ ((struct frame *, Lisp_Object)); 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 *)); @@ -2607,27 +2683,14 @@ void gamma_correct P_ ((struct frame *, XColor *)); #ifdef WINDOWSNT void gamma_correct P_ ((struct frame *, COLORREF *)); #endif +#ifdef MAC_OS +void gamma_correct P_ ((struct frame *, unsigned long *)); +#endif #ifdef HAVE_WINDOW_SYSTEM -void x_kill_gs_process P_ ((Pixmap, struct frame *)); int x_screen_planes P_ ((struct frame *)); void x_implicitly_set_name P_ ((struct frame *, Lisp_Object, Lisp_Object)); -struct image_cache *make_image_cache P_ ((void)); -void free_image_cache P_ ((struct frame *)); -void clear_image_cache P_ ((struct frame *, int)); -void forall_images_in_image_cache P_ ((struct frame *, - void (*) P_ ((struct image *)))); -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; @@ -2667,9 +2730,19 @@ int popup_activated P_ ((void)); 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 buffer_posn_from_coords P_ ((struct window *, + int *, int *, + struct display_pos *, + Lisp_Object *, + int *, int *, int *, int *)); +extern Lisp_Object mode_line_string P_ ((struct window *, enum window_part, + int *, int *, int *, + Lisp_Object *, + int *, int *, int *, int *)); +extern Lisp_Object marginal_area_string P_ ((struct window *, enum window_part, + int *, int *, int *, + Lisp_Object *, + 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 *)); @@ -2700,8 +2773,8 @@ void clear_glyph_row P_ ((struct glyph_row *)); void prepare_desired_row P_ ((struct glyph_row *)); int line_hash_code P_ ((struct glyph_row *)); void set_window_update_flags P_ ((struct window *, int)); -void write_glyphs P_ ((struct glyph *, int)); -void insert_glyphs P_ ((struct glyph *, int)); +void write_glyphs P_ ((struct frame *, struct glyph *, int)); +void insert_glyphs P_ ((struct frame *, struct glyph *, int)); void redraw_frame P_ ((struct frame *)); void redraw_garbaged_frames P_ ((void)); int scroll_cost P_ ((struct frame *, int, int, int)); @@ -2710,8 +2783,6 @@ 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 *)); -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)); @@ -2722,30 +2793,37 @@ extern Lisp_Object Qredisplay_dont_pause; /* Defined in term.c */ -extern void ring_bell P_ ((void)); -extern void set_terminal_modes P_ ((void)); -extern void reset_terminal_modes P_ ((void)); +extern void ring_bell P_ ((struct frame *)); extern void update_begin P_ ((struct frame *)); 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 clear_frame P_ ((void)); -extern void clear_end_of_line P_ ((int)); -extern void clear_end_of_line_raw P_ ((int)); -extern void delete_glyphs P_ ((int)); -extern void ins_del_lines P_ ((int, int)); +extern void set_terminal_window P_ ((struct frame *, int)); +extern void set_scroll_region P_ ((struct frame *, int, int)); +extern void turn_off_insert P_ ((struct tty_display_info *)); +extern void turn_off_highlight P_ ((struct tty_display_info *)); +extern void background_highlight P_ ((struct tty_display_info *)); +extern void clear_frame P_ ((struct frame *)); +extern void clear_end_of_line P_ ((struct frame *, int)); +extern void clear_end_of_line_raw P_ ((struct frame *, int)); +extern void tty_clear_end_of_line P_ ((struct frame *, int)); +extern void delete_glyphs P_ ((struct frame *, int)); +extern void ins_del_lines P_ ((struct frame *, 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_display_info *, int)); +extern struct display *get_named_tty_display P_ ((char *)); +extern Lisp_Object Fframe_tty_type P_ ((Lisp_Object)); +extern struct display *init_initial_display P_ ((void)); +extern struct display *term_init P_ ((char *, char *, int)); +extern void delete_tty P_ ((struct display *)); 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 void cursor_to P_ ((struct frame *, int, int)); +extern int tty_capable_p P_ ((struct tty_display_info *, unsigned, unsigned long, unsigned long)); +extern void tty_set_terminal_modes P_ ((struct display *)); +extern void tty_reset_terminal_modes P_ ((struct display *)); +extern void create_tty_output P_ ((struct frame *)); + /* Defined in scroll.c */ @@ -2757,4 +2835,38 @@ extern void do_line_insertion_deletion_costs P_ ((struct frame *, char *, 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) */