/* Interface definitions for display code.
Copyright (C) 1985, 1993, 1994, 1997, 1998, 1999, 2000, 2001, 2002,
- 2003, 2004, 2005 Free Software Foundation, Inc.
+ 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Emacs.
NUM_IT_METHODS
};
+#define IT_STACK_SIZE 4
+
struct it
{
/* The window in which we iterate over current_buffer (or a string). */
from what we previously had. */
struct iterator_stack_entry
{
- int stop_charpos;
- int face_id;
Lisp_Object string;
- struct display_pos pos;
- int end_charpos;
int string_nchars;
+ int end_charpos;
+ int stop_charpos;
+ int face_id;
+
+ /* Save values specific to a given method. */
+ union {
+ /* method == GET_FROM_IMAGE */
+ struct {
+ Lisp_Object object;
+ struct it_slice slice;
+ int image_id;
+ } image;
+ /* method == GET_FROM_COMPOSITION */
+ struct {
+ Lisp_Object object;
+ int c, len;
+ int cmp_id, cmp_len;
+ } comp;
+ /* method == GET_FROM_STRETCH */
+ struct {
+ Lisp_Object object;
+ } stretch;
+ } u;
+
+ /* current text and display positions. */
+ struct text_pos position;
+ struct display_pos current;
enum glyph_row_area area;
+ enum it_method method;
unsigned multibyte_p : 1;
unsigned string_from_display_prop_p : 1;
unsigned display_ellipsis_p : 1;
- struct it_slice slice;
+
+ /* properties from display property that are reset by another display property. */
Lisp_Object space_width;
- short voffset;
Lisp_Object font_height;
+ short voffset;
}
- stack[2];
+ stack[IT_STACK_SIZE];
/* Stack pointer. */
int sp;
/* 1 means overlay strings at end_charpos have been processed. */
unsigned overlay_strings_at_end_processed_p : 1;
+ /* 1 means to ignore overlay strings at current pos, as they have
+ already been processed. */
+ unsigned ignore_overlay_strings_at_pos_p : 1;
+
/* 1 means the actual glyph is not available in the current
system. */
unsigned glyph_not_available_p : 1;
#define DEFAULT_IMAGE_WIDTH 30
#define DEFAULT_IMAGE_HEIGHT 30
+ /* Top/left and bottom/right corner pixel of actual image data.
+ Used by four_corners_best to consider the real image data,
+ rather than looking at the optional image margin. */
+ int corners[4];
+#define TOP_CORNER 0
+#define LEFT_CORNER 1
+#define BOT_CORNER 2
+#define RIGHT_CORNER 3
+
/* Percent of image height used as ascent. A value of
CENTERED_IMAGE_ASCENT means draw the image centered on the
line. */
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 remember_mouse_glyph P_ ((struct frame *, int, int, NativeRectangle *));
+
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 *,
- struct glyph_matrix *, int, int, int, int));
+int 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,
int, struct glyph_row *, enum face_id));
void init_iterator_to_row_start P_ ((struct it *, struct window *,
extern int help_echo_pos;
extern struct frame *last_mouse_frame;
extern int last_tool_bar_item;
-extern int mouse_autoselect_window;
+extern Lisp_Object Vmouse_autoselect_window;
+extern int unibyte_display_via_language_environment;
+
extern void reseat_at_previous_visible_line_start P_ ((struct it *));
extern int calc_pixel_width_or_height P_ ((double *, struct it *, Lisp_Object,
extern void draw_phys_cursor_glyph P_ ((struct window *,
struct glyph_row *,
enum draw_glyphs_face));
-extern int get_phys_cursor_geometry P_ ((struct window *, struct glyph_row *,
- struct glyph *, int *));
+extern void get_phys_cursor_geometry P_ ((struct window *, struct glyph_row *,
+ struct glyph *, int *, int *, int *));
extern void erase_phys_cursor P_ ((struct window *));
extern void display_and_set_cursor P_ ((struct window *,
int, int, int, int, int));
void w32_init_fringe P_ ((void));
void w32_reset_fringes P_ ((void));
#endif
+#ifdef MAC_OS
+void mac_init_fringe P_ ((void));
+#endif
/* Defined in image.c */
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));
+#if defined (HAVE_XPM) && defined (HAVE_X_WINDOWS)
+extern int x_create_bitmap_from_xpm_data P_ ((struct frame *f, char **bits));
+#endif
#ifndef x_destroy_bitmap
extern void x_destroy_bitmap P_ ((struct frame *, int));
#endif
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));
-Lisp_Object sit_for P_ ((int, int, int, int, int));
void init_display P_ ((void));
void syms_of_display P_ ((void));
extern Lisp_Object Qredisplay_dont_pause;