/* CHAR */
struct
{
- Emchar ch; /* Character of this rune. */
+ Emchar ch; /* Cbaracter of this rune. */
} chr;
/* HLINE */
Dynarr_declare (glyph_block);
} glyph_block_dynarr;
-/*************************************************************************/
-/* display lines */
-/*************************************************************************/
-
-/* Modeline commentary: IMO the modeline is handled very badly, we
- special case virtually *everything* in the redisplay routines for
- the modeline. The fact that dl->bufpos can be either a buffer
- position or a char count highlights this. There is no abstraction at
- all that I can find and it means that the code is made very ugly as
- a result. Either we should treat the modeline *entirely* separately,
- or we should abstract to something that applies equally well to the
- modeline and to buffer text, the things are not enormously different
- after all and handling them identically at some level would
- eliminate some bugs that still exist (mainly to do with modeline
- handling). This problem doesn't help trying to implement gutters
- which are somewhere in between buffer text and modeline text.
-
- Redisplay commentary: Everything in redisplay is tied very tightly
- 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
- 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> */
-
typedef struct display_line display_line;
struct display_line
{
int cursor_elt; /* rune block of TEXT display
block cursor is at or -1 */
char used_prop_data; /* can't incrementally update if line
- used propagation data */
+ used propogation data */
layout_bounds bounds; /* line boundary positions */
/* Dynamic arrays of left and right glyph blocks */
glyph_block_dynarr *left_glyphs;
glyph_block_dynarr *right_glyphs;
-
- face_index left_margin_findex;
- face_index right_margin_findex;
- face_index default_findex;
};
-#define DISPLAY_LINE_HEIGHT(dl) \
-(dl->ascent + dl->descent - dl->clip)
-#define DISPLAY_LINE_YPOS(dl) \
-(dl->ypos - dl->ascent)
-
typedef struct
{
Dynarr_declare (display_line);
extern int glyphs_changed;
extern int glyphs_changed_set;
-/* True if any displayed subwindow is in need of updating
- somewhere. */
-extern int subwindows_changed;
-extern int subwindows_changed_set;
-
/* True if an icon is in need of updating somewhere. */
extern int icon_changed;
extern int icon_changed_set;
extern int toolbar_changed;
extern int toolbar_changed_set;
-/* non-nil 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 */
extern int windows_changed;
if each has already been called and don't bother doing most of the
work if it is currently set. */
-#define MARK_TYPE_CHANGED(object) do { \
- if (!object##_changed_set) { \
- Lisp_Object MTC_devcons, MTC_concons; \
- DEVICE_LOOP_NO_BREAK (MTC_devcons, MTC_concons) \
- { \
- Lisp_Object MTC_frmcons; \
- struct device *MTC_d = XDEVICE (XCAR (MTC_devcons)); \
- DEVICE_FRAME_LOOP (MTC_frmcons, MTC_d) \
- { \
- struct frame *MTC_f = XFRAME (XCAR (MTC_frmcons)); \
- MTC_f->object##_changed = 1; \
- MTC_f->modiff++; \
- } \
- MTC_d->object##_changed = 1; \
- } \
- object##_changed = 1; \
- object##_changed_set = 1; } \
+#define MARK_TYPE_CHANGED(object) do { \
+ if (!object##_changed_set) { \
+ Lisp_Object _devcons_, _concons_; \
+ DEVICE_LOOP_NO_BREAK (_devcons_, _concons_) \
+ { \
+ Lisp_Object _frmcons_; \
+ struct device *_d_ = XDEVICE (XCAR (_devcons_)); \
+ DEVICE_FRAME_LOOP (_frmcons_, _d_) \
+ { \
+ struct frame *_f_ = XFRAME (XCAR (_frmcons_)); \
+ _f_->object##_changed = 1; \
+ _f_->modiff++; \
+ } \
+ _d_->object##_changed = 1; \
+ } \
+ object##_changed = 1; \
+ object##_changed_set = 1; } \
} while (0)
#define MARK_BUFFERS_CHANGED MARK_TYPE_CHANGED (buffers)
#define MARK_MODELINE_CHANGED MARK_TYPE_CHANGED (modeline)
#define MARK_POINT_CHANGED MARK_TYPE_CHANGED (point)
#define MARK_TOOLBAR_CHANGED MARK_TYPE_CHANGED (toolbar)
-#define MARK_GUTTER_CHANGED MARK_TYPE_CHANGED (gutter)
#define MARK_GLYPHS_CHANGED MARK_TYPE_CHANGED (glyphs)
-#define MARK_SUBWINDOWS_CHANGED MARK_TYPE_CHANGED (subwindows)
/* Anytime a console, device or frame is added or deleted we need to reset
these flags. */
-#define RESET_CHANGED_SET_FLAGS \
- do { \
- buffers_changed_set = 0; \
- clip_changed_set = 0; \
- extents_changed_set = 0; \
- icon_changed_set = 0; \
- menubar_changed_set = 0; \
- modeline_changed_set = 0; \
- point_changed_set = 0; \
- toolbar_changed_set = 0; \
- gutter_changed_set = 0; \
- glyphs_changed_set = 0; \
- subwindows_changed_set = 0; \
+#define RESET_CHANGED_SET_FLAGS \
+ do { \
+ buffers_changed_set = 0; \
+ clip_changed_set = 0; \
+ extents_changed_set = 0; \
+ icon_changed_set = 0; \
+ menubar_changed_set = 0; \
+ modeline_changed_set = 0; \
+ point_changed_set = 0; \
+ toolbar_changed_set = 0; \
+ glyphs_changed_set = 0; \
} while (0)
\f
/* redisplay global variables */
/*************************************************************************/
-/* redisplay structure used by various utility routines. */
+/* redisplay structre used by various utility routines. */
extern display_line_dynarr *cmotion_display_lines;
/* Nonzero means truncate lines in all windows less wide than the frame. */
extern int display_arg;
/* Type of display specified. Defined in emacs.c. */
-extern CONST char *display_use;
+extern char *display_use;
/* Nonzero means reading single-character input with prompt
so put cursor on minibuffer after the prompt. */
Bufbyte *generate_formatted_string (struct window *w, Lisp_Object format_str,
Lisp_Object result_str, face_index findex,
int type);
-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);
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,
int get_next_display_block (layout_bounds bounds,
display_block_dynarr *dba, int start_pos,
int *next_start);
-void redisplay_output_subwindow (struct window *w, struct display_line *dl,
- Lisp_Object image_instance, int xpos,
- int xoffset, int start_pixpos, int width,
- face_index findex, int cursor_start,
- int cursor_width, int cursor_height);
-void redisplay_unmap_subwindows_maybe (struct frame* f, int x, int y, int width, int height);
-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_bottom_of_window (struct window *w,
display_line_dynarr *ddla,
int min_start, int max_end);