]> code.delx.au - gnu-emacs/blobdiff - src/dispextern.h
*** empty log message ***
[gnu-emacs] / src / dispextern.h
index 63922183a0b765816c1eccd8c0fd97591076e71f..6aff0dc1803c90f0b6cebc3c71c09ce5d8c98800 100644 (file)
@@ -1,6 +1,6 @@
 /* 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.
 
@@ -1819,6 +1819,8 @@ enum it_method {
   NUM_IT_METHODS
 };
 
+#define IT_STACK_SIZE 4
+
 struct it
 {
   /* The window in which we iterate over current_buffer (or a string).  */
@@ -1927,22 +1929,47 @@ struct it
      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;
@@ -1979,6 +2006,10 @@ struct it
   /* 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;
@@ -2417,6 +2448,15 @@ struct image
 #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.  */
@@ -2615,10 +2655,12 @@ 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 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 *,
@@ -2649,6 +2691,8 @@ extern int help_echo_pos;
 extern struct frame *last_mouse_frame;
 extern int last_tool_bar_item;
 extern int mouse_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,
@@ -2676,8 +2720,8 @@ extern void x_fix_overlapping_area P_ ((struct window *, struct glyph_row *,
 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));
@@ -2725,6 +2769,9 @@ void compute_fringe_widths P_ ((struct frame *, 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 */
 
@@ -2921,7 +2968,6 @@ int scrolling P_ ((struct frame *));
 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;