#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 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
-
+/* 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
prototypes below reference structure types before their definition
in this file. Some are here because not every file including
ON_RIGHT_MARGIN
};
+/* Number of bits allocated to store fringe bitmap numbers. */
+#define FRINGE_ID_BITS 8
+
\f
/***********************************************************************
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
/* 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;
};
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. */
DESCENT = FONT->descent
HEIGHT = FONT_HEIGHT (FONT)
F_DESCENT = (FRAME_FONT (F)->descent
- - F->output_data.x->baseline_offset)
+ - F->device->output_data.x->baseline_offset)
F_HEIGHT = FRAME_LINE_HEIGHT (F)
*/
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
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<<FRINGE_ID_BITS)
\f
/***********************************************************************
/* Horizontal matrix position reached in move_it_in_display_line.
Only set there, not in display_line. */
int hpos;
+
+ /* 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;
};
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,
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 *));
-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;
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
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_tty_size P_ ((int, int *, int *));
#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;
extern int inverse_video;
extern int required_matrix_width P_ ((struct window *));
extern int required_matrix_height P_ ((struct window *));
-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 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 *));
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));
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 *,
- 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));
/* 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 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_ ((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_display_info *, int));
-extern void delete_glyphs P_ ((int));
-extern void ins_del_lines P_ ((int, int));
+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_ ((struct tty_display_info *, int));
-extern struct tty_display_info *term_init P_ ((Lisp_Object, char *, char *));
-extern struct tty_display_info *term_dummy_init P_ ((void));
+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 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 */