Merge r21-4-11-chise-0_20-=ucs.
[chise/xemacs-chise.git.1] / src / redisplay.h
index f79847c..88d272f 100644 (file)
@@ -22,8 +22,10 @@ Boston, MA 02111-1307, USA.  */
 
 /* Synched up with: Not in FSF. */
 
-#ifndef _XEMACS_REDISPLAY_H_
-#define _XEMACS_REDISPLAY_H_
+#ifndef INCLUDED_redisplay_h_
+#define INCLUDED_redisplay_h_
+
+#include "character.h"
 
 /* Redisplay DASSERT types */
 #define DB_DISP_POS            1
@@ -97,7 +99,7 @@ typedef struct
 
    #### This should really be made smaller.
 */
-   
+
 typedef struct rune rune;
 struct rune
 {
@@ -121,12 +123,12 @@ struct rune
                                   this. */
                                 /* #### This isn't used as an rvalue anywhere!
                                    remove! */
-                                   
-  
+
+
   short xpos;                  /* horizontal starting position in pixels */
   short width;                 /* pixel width of rune */
-       
-  
+
+
   unsigned char cursor_type;   /* is this rune covered by the cursor? */
   unsigned char type;          /* type of rune object */
                                 /* We used to do bitfields here, but if I
@@ -137,7 +139,7 @@ struct rune
 
   union                                /* Information specific to the type of rune */
   {
-    /* #### GLyps are are. Is it really necessary to waste 8 bytes on every
+    /* #### Glyphs are rare. Is it really necessary to waste 8 bytes on every
        rune for that?! */
     /* DGLYPH */
     struct
@@ -147,6 +149,9 @@ struct rune
                                    If this is a rune in the modeline
                                    then this might be nil. */
 
+      int ascent;               /* Ascent of this glyph, in pixels. */
+      int descent;              /* Descent of this glyph, in pixels. */
+      int yoffset;              /* Offset from line top to reach glyph top */
       int xoffset;             /* Number of pixels that need to be
                                   chopped off the left of the glyph.
                                   This has the effect of shifting the
@@ -155,10 +160,7 @@ struct rune
     } dglyph;
 
     /* CHAR */
-    struct
-    {
-      Emchar ch;               /* Character of this rune. */
-    } chr;
+    struct Charc cglyph;       /* Character of this rune. */
 
     /* HLINE */
     struct
@@ -272,7 +274,7 @@ typedef struct
   to the things that are being displayed, and the context,
   e.g. buffers and windows. According to Chuck this is so that we can
   get speed, which seems fine to me, however this usage is extended
-  too far down the redispay routines IMO. At some level there should
+  too far down the redisplay routines IMO. At some level there should
   be functions that know how to display strings with extents and
   faces, regardless of buffer etc. After all the window system does
   not care. <andy@xemacs.org> */
@@ -308,6 +310,9 @@ struct display_line
 
   char modeline;                       /* t if this line is a modeline */
 
+  char line_continuation;              /* t if this line continues to
+                                           next display line. */
+
   /* Dynamic array of display blocks */
   display_block_dynarr *display_blocks;
 
@@ -415,24 +420,24 @@ struct extent_fragment
    If any of these flags are set, redisplay will look more carefully
    to see if anything has really changed. */
 
-/* non-nil if the contents of a buffer have changed since the last time
-   redisplay completed */
+/* Nonzero if the contents of a buffer have changed since the last time
+   redisplay completed. */
 extern int buffers_changed;
 extern int buffers_changed_set;
 
 /* Nonzero if head_clip or tail_clip of a buffer has changed
- since last redisplay that finished */
+   since last redisplay that finished. */
 extern int clip_changed;
 extern int clip_changed_set;
 
-/* non-nil if any extent has changed since the last time redisplay completed */
+/* Nonzero if any extent has changed since the last time redisplay completed. */
 extern int extents_changed;
 extern int extents_changed_set;
 
-/* non-nil if any face has changed since the last time redisplay completed */
+/* Nonzero if any face has changed since the last time redisplay completed. */
 extern int faces_changed;
 
-/* Nonzero means one or more frames have been marked as garbaged */
+/* Nonzero means one or more frames have been marked as garbaged. */
 extern int frame_changed;
 
 /* True if any of the builtin display glyphs (continuation,
@@ -459,34 +464,38 @@ extern int icon_changed_set;
 extern int menubar_changed;
 extern int menubar_changed_set;
 
-/* true iff we should redraw the modelines on the next redisplay */
+/* True iff we should redraw the modelines on the next redisplay. */
 extern int modeline_changed;
 extern int modeline_changed_set;
 
-/* non-nil if point has changed in some buffer since the last time
-   redisplay completed */
+/* Nonzero if point has changed in some buffer since the last time
+   redisplay completed. */
 extern int point_changed;
 extern int point_changed_set;
 
-/* non-nil if some frame has changed its size */
+/* Nonzero if some frame has changed its size. */
 extern int size_changed;
 
-/* non-nil if some device has signaled that it wants to change size */
+/* Nonzero if some device has signaled that it wants to change size. */
 extern int asynch_device_change_pending;
 
-/* non-nil if any toolbar has changed */
+/* Nonzero if some frame has changed the layout of internal elements
+   (gutters or toolbars). */
+extern int frame_layout_changed;
+
+/* Nonzero if any toolbar has changed. */
 extern int toolbar_changed;
 extern int toolbar_changed_set;
 
-/* non-nil if any gutter has changed */
+/* Nonzero if any gutter has changed. */
 extern int gutter_changed;
 extern int gutter_changed_set;
 
-/* non-nil if any window has changed since the last time redisplay completed */
+/* Nonzero if any window has changed since the last time redisplay completed */
 extern int windows_changed;
 
-/* non-nil if any frame's window structure has changed since the last
-   time redisplay completed */
+/* Nonzero if any frame's window structure has changed since the last
+   time redisplay completed. */
 extern int windows_structure_changed;
 
 /* These macros can be relatively expensive.  Since they are often
@@ -533,6 +542,7 @@ extern int windows_structure_changed;
   (p)->extents_changed = 0;                    \
   (p)->faces_changed = 0;                      \
   (p)->frame_changed = 0;                      \
+  (p)->frame_layout_changed = 0;               \
   (p)->icon_changed = 0;                       \
   (p)->menubar_changed = 0;                    \
   (p)->modeline_changed = 0;                   \
@@ -550,8 +560,8 @@ extern int windows_structure_changed;
   buffers_changed = 0;                         \
   clip_changed = 0;                            \
   extents_changed = 0;                         \
-  faces_changed = 0;                           \
   frame_changed = 0;                           \
+  frame_layout_changed = 0;                    \
   icon_changed = 0;                            \
   menubar_changed = 0;                         \
   modeline_changed = 0;                                \
@@ -571,6 +581,7 @@ extern int windows_structure_changed;
     (p)->extents_changed ||                    \
     (p)->faces_changed ||                      \
     (p)->frame_changed ||                      \
+    (p)->frame_layout_changed ||               \
     (p)->icon_changed ||                       \
     (p)->menubar_changed ||                    \
     (p)->modeline_changed ||                   \
@@ -578,6 +589,7 @@ extern int windows_structure_changed;
     (p)->toolbar_changed ||                    \
     (p)->gutter_changed ||                     \
     (p)->glyphs_changed ||                     \
+    (p)->size_changed ||                       \
     (p)->subwindows_changed ||                 \
     (p)->subwindows_state_changed ||           \
     (p)->windows_changed ||                    \
@@ -589,6 +601,7 @@ extern int windows_structure_changed;
     extents_changed ||                         \
     faces_changed ||                           \
     frame_changed ||                           \
+    frame_layout_changed ||                    \
     icon_changed ||                            \
     menubar_changed ||                         \
     modeline_changed ||                                \
@@ -596,6 +609,7 @@ extern int windows_structure_changed;
     toolbar_changed ||                         \
     gutter_changed ||                          \
     glyphs_changed ||                          \
+    size_changed ||                            \
     subwindows_changed ||                      \
     subwindows_state_changed ||                        \
     windows_changed ||                         \
@@ -638,8 +652,8 @@ extern int in_display;
    where one page is used for Emacs and another for all else. */
 extern int no_redraw_on_reenter;
 
-/* Nonzero means flash the frame instead of ringing the bell.  */
-extern int visible_bell;
+/* Non-nil means flash the frame instead of ringing the bell.  */
+extern Lisp_Object Vvisible_bell;
 
 /* Thickness of shadow border around 3D modelines. */
 extern Lisp_Object Vmodeline_shadow_thickness;
@@ -659,7 +673,7 @@ extern Lisp_Object Vglobal_mode_string;
 extern int display_arg;
 
 /* Type of display specified.  Defined in emacs.c. */
-extern CONST char *display_use;
+extern const char *display_use;
 
 /* Nonzero means reading single-character input with prompt
    so put cursor on minibuffer after the prompt.  */
@@ -668,6 +682,8 @@ extern int cursor_in_echo_area;
 
 extern Lisp_Object Qbar_cursor, Qcursor_in_echo_area, Vwindow_system;
 
+extern Lisp_Object Qtop_bottom;
+
 \f
 /*************************************************************************/
 /*                     redisplay exported functions                      */
@@ -682,6 +698,7 @@ int redisplay_frame_text_width_string (struct frame *f,
                                       Bufbyte *nonreloc,
                                       Lisp_Object reloc,
                                       Bytecount offset, Bytecount len);
+int redisplay_frame (struct frame *f, int preemption_check);
 void redisplay (void);
 struct display_block *get_display_block_from_line (struct display_line *dl,
                                                   enum display_type type);
@@ -694,13 +711,19 @@ int window_half_pixpos (struct window *w);
 void redisplay_echo_area (void);
 void free_display_structs (struct window_mirror *mir);
 void free_display_lines (display_line_dynarr *dla);
-Bufbyte *generate_formatted_string (struct window *w, Lisp_Object format_str,
-                                    Lisp_Object result_str, face_index findex,
-                                    int type);
+void mark_redisplay_structs (display_line_dynarr *dla);
 void generate_displayable_area (struct window *w, Lisp_Object disp_string,
                                int xpos, int ypos, int width, int height,
                                display_line_dynarr* dl,
                                Bufpos start_pos, face_index default_face);
+/* `generate_title_string' in frame.c needs this */
+void generate_formatted_string_db (Lisp_Object format_str,
+                                  Lisp_Object result_str,
+                                  struct window *w,
+                                  struct display_line *dl,
+                                  struct display_block *db,
+                                  face_index findex,
+                                  int min_pixpos, int max_pixpos, int type);
 int real_current_modeline_height (struct window *w);
 int pixel_to_glyph_translation (struct frame *f, int x_coord,
                                int y_coord, int *col, int *row,
@@ -738,7 +761,7 @@ int compute_line_start_cache_dynarr_usage (line_start_cache_dynarr *dyn,
 int get_next_display_block (layout_bounds bounds,
                            display_block_dynarr *dba, int start_pos,
                            int *next_start);
-void redisplay_output_layout (struct window *w,
+void redisplay_output_layout (Lisp_Object domain,
                              Lisp_Object image_instance,
                              struct display_box* db, struct display_glyph_area* dga,
                              face_index findex, int cursor_start, int cursor_width,
@@ -755,14 +778,15 @@ void redisplay_output_pixmap (struct window *w,
                              face_index findex, int cursor_start, int cursor_width,
                              int cursor_height, int offset_bitmap);
 int redisplay_calculate_display_boxes (struct display_line *dl, int xpos,
-                                      int xoffset, int start_pixpos, int width,
-                                      struct display_box* dest,
+                                      int xoffset, int yoffset, int start_pixpos,
+                                       int width, struct display_box* dest,
                                       struct display_glyph_area* src);
 int redisplay_normalize_glyph_area (struct display_box* dest,
                                    struct display_glyph_area* glyphsrc);
 void redisplay_clear_to_window_end (struct window *w, int ypos1, int ypos2);
 void redisplay_clear_region (Lisp_Object window, face_index findex, int x,
                             int y, int width, int height);
+void redisplay_clear_top_of_window (struct window *w);
 void redisplay_clear_bottom_of_window (struct window *w,
                                       display_line_dynarr *ddla,
                                       int min_start, int max_end);
@@ -776,5 +800,8 @@ void redisplay_redraw_cursor (struct frame *f, int run_begin_end_meths);
 void output_display_line (struct window *w, display_line_dynarr *cdla,
                          display_line_dynarr *ddla, int line,
                          int force_start, int force_end);
+void sync_display_line_structs (struct window *w, int line, int do_blocks,
+                               display_line_dynarr *cdla,
+                               display_line_dynarr *ddla);
 
-#endif /* _XEMACS_REDISPLAY_H_ */
+#endif /* INCLUDED_redisplay_h_ */