annotate src/redisplay.h @ 424:11054d720c21 r21-2-20

Import from CVS: tag r21-2-20
author cvs
date Mon, 13 Aug 2007 11:26:11 +0200
parents 95016f13131a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1 /* Redisplay data structures.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2 Copyright (C) 1994, 1995 Board of Trustees, University of Illinois.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3 Copyright (C) 1996 Chuck Thompson.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4 Copyright (C) 1995, 1996 Ben Wing.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
6 This file is part of XEmacs.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
7
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
8 XEmacs is free software; you can redistribute it and/or modify it
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
9 under the terms of the GNU General Public License as published by the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
10 Free Software Foundation; either version 2, or (at your option) any
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
11 later version.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
12
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
13 XEmacs is distributed in the hope that it will be useful, but WITHOUT
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
16 for more details.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
17
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
19 along with XEmacs; see the file COPYING. If not, write to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
20 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
21 Boston, MA 02111-1307, USA. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
22
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
23 /* Synched up with: Not in FSF. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
24
412
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 406
diff changeset
25 #ifndef _XEMACS_REDISPLAY_H_
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 406
diff changeset
26 #define _XEMACS_REDISPLAY_H_
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
27
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
28 /* Redisplay DASSERT types */
2
ac2d302a0011 Import from CVS: tag r19-15b2
cvs
parents: 0
diff changeset
29 #define DB_DISP_POS 1
ac2d302a0011 Import from CVS: tag r19-15b2
cvs
parents: 0
diff changeset
30 #define DB_DISP_TEXT_LAYOUT 2
ac2d302a0011 Import from CVS: tag r19-15b2
cvs
parents: 0
diff changeset
31 #define DB_DISP_REDISPLAY 4
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
32
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
33 /* These are the possible return values from pixel_to_glyph_translation. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
34 #define OVER_MODELINE 0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
35 #define OVER_TEXT 1
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
36 #define OVER_OUTSIDE 2
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
37 #define OVER_NOTHING 3
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
38 #define OVER_BORDER 4
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
39 #define OVER_TOOLBAR 5
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 272
diff changeset
40 #define OVER_V_DIVIDER 6
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
41
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
42 #define NO_BLOCK -1
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
43
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
44 /* Imagine that the text in the buffer is displayed on a piece of paper
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
45 the width of the frame and very very tall. The line start cache is
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
46 an array of struct line_start_cache's, describing the start and
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
47 end buffer positions for a contiguous set of lines on that piece
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
48 of paper. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
49
185
3d6bfa290dbd Import from CVS: tag r20-3b19
cvs
parents: 183
diff changeset
50 typedef struct line_start_cache line_start_cache;
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
51 struct line_start_cache
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
52 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
53 Bufpos start, end;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
54 int height;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
55 };
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
56
185
3d6bfa290dbd Import from CVS: tag r20-3b19
cvs
parents: 183
diff changeset
57 typedef struct
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
58 {
185
3d6bfa290dbd Import from CVS: tag r20-3b19
cvs
parents: 183
diff changeset
59 Dynarr_declare (line_start_cache);
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
60 } line_start_cache_dynarr;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
61
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
62 /* The possible types of runes.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
63
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
64 #### The Lisp_Glyph type is broken. There should instead be a pixmap
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
65 type. Currently the device-specific output routines have to worry
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
66 about whether the glyph is textual or not, etc. For Mule this is
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
67 a big problem because you might need multiple fonts to display the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
68 text. It also eliminates optimizations that could come from glumping
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
69 the text of multiple text glyphs together -- this makes displaying
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
70 binary files (with lots of control chars, etc.) very very slow. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
71
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
72 #define RUNE_BLANK 0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
73 #define RUNE_CHAR 1
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
74 #define RUNE_DGLYPH 2
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
75 #define RUNE_HLINE 3
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
76 #define RUNE_VLINE 4
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
77
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
78 #define CURSOR_ON 0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
79 #define CURSOR_OFF 1
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
80 #define NO_CURSOR 2
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
81 #define NEXT_CURSOR 3
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
82 #define IGNORE_CURSOR 4
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
83
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
84 #define DEFAULT_INDEX (face_index) 0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
85 #define MODELINE_INDEX (face_index) 1
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
86
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
87 /* A rune is a single display element, such as a printable character
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
88 or pixmap. Any single character in a buffer has one or more runes
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
89 (or zero, if the character is invisible) corresponding to it.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
90 (Printable characters typically have one rune associated with them,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
91 but control characters have two -- a ^ and a letter -- and other
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
92 non-printing characters (those displayed in octal) have four. */
185
3d6bfa290dbd Import from CVS: tag r20-3b19
cvs
parents: 183
diff changeset
93
3d6bfa290dbd Import from CVS: tag r20-3b19
cvs
parents: 183
diff changeset
94 typedef struct rune rune;
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
95 struct rune
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
96 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
97 face_index findex; /* face rune is displayed with. The
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
98 face_index is an index into a
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
99 window-specific array of face cache
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
100 elements. Each face cache element
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
101 corresponds to one "merged face"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
102 (the result of merging all the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
103 faces that overlap the rune) and
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
104 contains the instance values for
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
105 each of the face properties in this
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
106 particular window. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
107
412
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 406
diff changeset
108 short xpos; /* horizontal starting position in pixels */
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 406
diff changeset
109 short width; /* pixel width of rune */
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 406
diff changeset
110
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 406
diff changeset
111
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
112 Bufpos bufpos; /* buffer position this rune is displaying;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
113 for the modeline, the value here is a
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
114 Charcount, but who's looking? */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
115 Bufpos endpos; /* if set this rune covers a range of pos */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
116 /* #### Chuck, what does it mean for a rune
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
117 to cover a range of pos? I don't get
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
118 this. */
412
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 406
diff changeset
119 unsigned int cursor_type :3; /* is this rune covered by the cursor? */
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 406
diff changeset
120 unsigned int type :3; /* type of rune object */
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
121
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
122 union /* Information specific to the type of rune */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
123 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
124 /* DGLYPH */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
125 struct
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
126 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
127 Lisp_Object glyph;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
128 Lisp_Object extent; /* extent rune is attached to, if any.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
129 If this is a rune in the modeline
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
130 then this might be nil. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
131
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
132 int xoffset; /* Number of pixels that need to be
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
133 chopped off the left of the glyph.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
134 This has the effect of shifting the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
135 glyph to the left while still clipping
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
136 at XPOS. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
137 } dglyph;
185
3d6bfa290dbd Import from CVS: tag r20-3b19
cvs
parents: 183
diff changeset
138
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
139 /* CHAR */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
140 struct
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
141 {
380
8626e4521993 Import from CVS: tag r21-2-5
cvs
parents: 284
diff changeset
142 Emchar ch; /* Character of this rune. */
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
143 } chr;
185
3d6bfa290dbd Import from CVS: tag r20-3b19
cvs
parents: 183
diff changeset
144
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
145 /* HLINE */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
146 struct
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
147 {
424
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
148 short thickness; /* how thick to make hline */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
149 short yoffset; /* how far down from top of line to put top */
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
150 } hline;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
151 } object; /* actual rune object */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
152 };
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
153
185
3d6bfa290dbd Import from CVS: tag r20-3b19
cvs
parents: 183
diff changeset
154 typedef struct
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
155 {
185
3d6bfa290dbd Import from CVS: tag r20-3b19
cvs
parents: 183
diff changeset
156 Dynarr_declare (rune);
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
157 } rune_dynarr;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
158
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
159 /* These must have distinct values. Note that the ordering actually
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
160 represents priority levels. TEXT has the lowest priority level. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
161 enum display_type
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
162 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
163 TEXT,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
164 LEFT_OUTSIDE_MARGIN,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
165 LEFT_INSIDE_MARGIN,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
166 RIGHT_INSIDE_MARGIN,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
167 RIGHT_OUTSIDE_MARGIN,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
168 OVERWRITE
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
169 };
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
170
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
171 /* A display block represents a run of text on a single line.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
172 Apparently there is only one display block per line for each
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
173 of the types listed in `enum display_type'.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
174
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
175 A display block consists mostly of an array of runes, one per
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
176 atomic display element (printable character, pixmap, etc.). */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
177
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
178 /* #### Yuckity yuckity yuck yuck yuck yuck yuck!!
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
179
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
180 Chuck, I think you should redo this. It should not be the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
181 responsibility of the device-specific code to worry about
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
182 the different faces. The generic stuff in redisplay-output.c
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
183 should glump things up into sub-blocks, each of which
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
184 corresponds to a single pixmap or a single run of text in
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
185 the same font.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
186
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
187 It might still make sense for the device-specific output routine
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
188 to get passed an entire display line. That way, it can make
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
189 calls to XDrawText() (which draws multiple runs of single-font
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
190 data) instead of XDrawString(). The reason for this is to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
191 reduce the amount of X traffic, which will help things significantly
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
192 on a slow line. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
193
185
3d6bfa290dbd Import from CVS: tag r20-3b19
cvs
parents: 183
diff changeset
194 typedef struct display_block display_block;
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
195 struct display_block
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
196 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
197 enum display_type type; /* type of display block */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
198
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
199 int start_pos; /* starting pixel position of block */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
200 int end_pos; /* ending pixel position of block */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
201
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
202 rune_dynarr *runes; /* Dynamic array of runes */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
203 };
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
204
185
3d6bfa290dbd Import from CVS: tag r20-3b19
cvs
parents: 183
diff changeset
205 typedef struct
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
206 {
185
3d6bfa290dbd Import from CVS: tag r20-3b19
cvs
parents: 183
diff changeset
207 Dynarr_declare (display_block);
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
208 } display_block_dynarr;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
209
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
210 typedef struct layout_bounds_type
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
211 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
212 int left_out;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
213 int left_in;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
214 int left_white;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
215 int right_white;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
216 int right_in;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
217 int right_out;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
218 } layout_bounds;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
219
185
3d6bfa290dbd Import from CVS: tag r20-3b19
cvs
parents: 183
diff changeset
220 typedef struct glyph_block glyph_block;
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
221 struct glyph_block
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
222 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
223 Lisp_Object glyph;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
224 Lisp_Object extent;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
225 /* The rest are only used by margin routines. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
226 face_index findex;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
227 int active;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
228 int width;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
229 };
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
230
185
3d6bfa290dbd Import from CVS: tag r20-3b19
cvs
parents: 183
diff changeset
231 typedef struct
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
232 {
185
3d6bfa290dbd Import from CVS: tag r20-3b19
cvs
parents: 183
diff changeset
233 Dynarr_declare (glyph_block);
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
234 } glyph_block_dynarr;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
235
422
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
236 /*************************************************************************/
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
237 /* display lines */
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
238 /*************************************************************************/
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
239
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
240 /* Modeline commentary: IMO the modeline is handled very badly, we
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
241 special case virtually *everything* in the redisplay routines for
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
242 the modeline. The fact that dl->bufpos can be either a buffer
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
243 position or a char count highlights this. There is no abstraction at
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
244 all that I can find and it means that the code is made very ugly as
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
245 a result. Either we should treat the modeline *entirely* separately,
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
246 or we should abstract to something that applies equally well to the
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
247 modeline and to buffer text, the things are not enormously different
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
248 after all and handling them identically at some level would
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
249 eliminate some bugs that still exist (mainly to do with modeline
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
250 handling). This problem doesn't help trying to implement gutters
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
251 which are somewhere in between buffer text and modeline text.
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
252
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
253 Redisplay commentary: Everything in redisplay is tied very tightly
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
254 to the things that are being displayed, and the context,
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
255 e.g. buffers and windows. According to Chuck this is so that we can
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
256 get speed, which seems fine to me, however this usage is extended
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
257 too far down the redispay routines IMO. At some level there should
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
258 be functions that know how to display strings with extents and
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
259 faces, regardless of buffer etc. After all the window system does
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
260 not care. <andy@xemacs.org> */
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
261
185
3d6bfa290dbd Import from CVS: tag r20-3b19
cvs
parents: 183
diff changeset
262 typedef struct display_line display_line;
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
263 struct display_line
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
264 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
265 short ypos; /* vertical position in pixels
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
266 of the baseline for this line. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
267 unsigned short ascent, descent; /* maximum values for this line.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
268 The ascent is the number of
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
269 pixels above the baseline, and
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
270 the descent is the number of
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
271 pixels below the baseline.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
272 The descent includes the baseline
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
273 pixel-row itself, I think. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
274 unsigned short clip; /* amount of bottom of line to clip
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
275 in pixels.*/
424
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
276 unsigned short top_clip; /* amount of top of line to clip
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
277 in pixels.*/
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
278 Bufpos bufpos; /* first buffer position on line */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
279 Bufpos end_bufpos; /* last buffer position on line */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
280 Charcount offset; /* adjustment to bufpos vals */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
281 Charcount num_chars; /* # of chars on line
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
282 including expansion of tabs
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
283 and control chars */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
284 int cursor_elt; /* rune block of TEXT display
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
285 block cursor is at or -1 */
2
ac2d302a0011 Import from CVS: tag r19-15b2
cvs
parents: 0
diff changeset
286 char used_prop_data; /* can't incrementally update if line
380
8626e4521993 Import from CVS: tag r21-2-5
cvs
parents: 284
diff changeset
287 used propagation data */
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
288
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
289 layout_bounds bounds; /* line boundary positions */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
290
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
291 char modeline; /* t if this line is a modeline */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
292
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
293 /* Dynamic array of display blocks */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
294 display_block_dynarr *display_blocks;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
295
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
296 /* Dynamic arrays of left and right glyph blocks */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
297 glyph_block_dynarr *left_glyphs;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
298 glyph_block_dynarr *right_glyphs;
422
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
299
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
300 face_index left_margin_findex;
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
301 face_index right_margin_findex;
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
302 face_index default_findex;
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
303 };
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
304
388
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents: 384
diff changeset
305 #define DISPLAY_LINE_HEIGHT(dl) \
424
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
306 (dl->ascent + dl->descent - (dl->clip + dl->top_clip))
388
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents: 384
diff changeset
307 #define DISPLAY_LINE_YPOS(dl) \
424
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
308 (dl->ypos - (dl->ascent - dl->top_clip))
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
309 #define DISPLAY_LINE_YEND(dl) \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
310 ((dl->ypos + dl->descent) - dl->clip)
388
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents: 384
diff changeset
311
185
3d6bfa290dbd Import from CVS: tag r20-3b19
cvs
parents: 183
diff changeset
312 typedef struct
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
313 {
185
3d6bfa290dbd Import from CVS: tag r20-3b19
cvs
parents: 183
diff changeset
314 Dynarr_declare (display_line);
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
315 } display_line_dynarr;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
316
424
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
317 /* The following two structures are used to represent an area to
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
318 displayed and where to display it. Using these two structures all
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
319 combinations of clipping and position can be accommodated. */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
320
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
321 /* This represents an area to be displayed into. */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
322 typedef struct display_box display_box;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
323 struct display_box
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
324 {
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
325 int xpos; /* absolute horizontal position of area */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
326 int ypos; /* absolute vertical position of area */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
327 int width, height;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
328 };
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
329
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
330 /* This represents the area from a glyph to be displayed. */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
331 typedef struct display_glyph_area display_glyph_area;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
332 struct display_glyph_area
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
333 {
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
334 int xoffset; /* horizontal offset of the glyph, +ve means
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
335 display the glyph with x offset by xoffset,
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
336 -ve means display starting xoffset into the
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
337 glyph. */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
338 int yoffset; /* vertical offset of the glyph, +ve means
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
339 display the glyph with y offset by yoffset,
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
340 -ve means display starting xoffset into the
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
341 glyph. */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
342 int width, height; /* width and height of glyph to display. */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
343 };
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
344
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
345 /* It could be argued that the following two structs belong in
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
346 extents.h, but they're only used by redisplay and it simplifies
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
347 the header files to put them here. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
348
185
3d6bfa290dbd Import from CVS: tag r20-3b19
cvs
parents: 183
diff changeset
349 typedef struct
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
350 {
185
3d6bfa290dbd Import from CVS: tag r20-3b19
cvs
parents: 183
diff changeset
351 Dynarr_declare (EXTENT);
3d6bfa290dbd Import from CVS: tag r20-3b19
cvs
parents: 183
diff changeset
352 } EXTENT_dynarr;
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
353
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
354 struct font_metric_info
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
355 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
356 int width;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
357 int height; /* always ascent + descent; for convenience */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
358 int ascent;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
359 int descent;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
360
183
e121b013d1f0 Import from CVS: tag r20-3b18
cvs
parents: 2
diff changeset
361 int proportional_p;
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
362 };
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
363
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
364 /* NOTE NOTE NOTE: Currently the positions in an extent fragment
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
365 structure are Bytind's, not Bufpos's. This could change. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
366
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
367 struct extent_fragment
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
368 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
369 Lisp_Object object; /* buffer or string */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
370 struct frame *frm;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
371 Bytind pos, end;
185
3d6bfa290dbd Import from CVS: tag r20-3b19
cvs
parents: 183
diff changeset
372 EXTENT_dynarr *extents;
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
373 glyph_block_dynarr *begin_glyphs, *end_glyphs;
2
ac2d302a0011 Import from CVS: tag r19-15b2
cvs
parents: 0
diff changeset
374 unsigned int invisible:1;
ac2d302a0011 Import from CVS: tag r19-15b2
cvs
parents: 0
diff changeset
375 unsigned int invisible_ellipses:1;
ac2d302a0011 Import from CVS: tag r19-15b2
cvs
parents: 0
diff changeset
376 unsigned int previously_invisible:1;
ac2d302a0011 Import from CVS: tag r19-15b2
cvs
parents: 0
diff changeset
377 unsigned int invisible_ellipses_already_displayed:1;
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
378 };
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
379
424
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
380 #define EDGE_TOP 1
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
381 #define EDGE_LEFT 2
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
382 #define EDGE_BOTTOM 4
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
383 #define EDGE_RIGHT 8
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
384 #define EDGE_ALL (EDGE_TOP | EDGE_LEFT | EDGE_BOTTOM | EDGE_RIGHT)
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
385
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
386
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
387 /*************************************************************************/
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
388 /* change flags */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
389 /*************************************************************************/
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
390
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
391 /* Quick flags to signal redisplay. redisplay() sets them all to 0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
392 when it finishes. If none of them are set when it starts, it
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
393 assumes that nothing needs to be done. Functions that make a change
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
394 that is (potentially) visible on the screen should set the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
395 appropriate flag.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
396
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
397 If any of these flags are set, redisplay will look more carefully
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
398 to see if anything has really changed. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
399
412
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 406
diff changeset
400 /* non-nil if the contents of a buffer have changed since the last time
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 406
diff changeset
401 redisplay completed */
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
402 extern int buffers_changed;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
403 extern int buffers_changed_set;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
404
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
405 /* Nonzero if head_clip or tail_clip of a buffer has changed
412
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 406
diff changeset
406 since last redisplay that finished */
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
407 extern int clip_changed;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
408 extern int clip_changed_set;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
409
412
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 406
diff changeset
410 /* non-nil if any extent has changed since the last time redisplay completed */
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
411 extern int extents_changed;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
412 extern int extents_changed_set;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
413
412
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 406
diff changeset
414 /* non-nil if any face has changed since the last time redisplay completed */
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
415 extern int faces_changed;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
416
412
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 406
diff changeset
417 /* Nonzero means one or more frames have been marked as garbaged */
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
418 extern int frame_changed;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
419
269
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 185
diff changeset
420 /* True if any of the builtin display glyphs (continuation,
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 185
diff changeset
421 hscroll, control-arrow, etc) is in need of updating
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 185
diff changeset
422 somewhere. */
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 185
diff changeset
423 extern int glyphs_changed;
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 185
diff changeset
424 extern int glyphs_changed_set;
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 185
diff changeset
425
384
bbff43aa5eb7 Import from CVS: tag r21-2-7
cvs
parents: 380
diff changeset
426 /* True if any displayed subwindow is in need of updating
bbff43aa5eb7 Import from CVS: tag r21-2-7
cvs
parents: 380
diff changeset
427 somewhere. */
bbff43aa5eb7 Import from CVS: tag r21-2-7
cvs
parents: 380
diff changeset
428 extern int subwindows_changed;
bbff43aa5eb7 Import from CVS: tag r21-2-7
cvs
parents: 380
diff changeset
429 extern int subwindows_changed_set;
bbff43aa5eb7 Import from CVS: tag r21-2-7
cvs
parents: 380
diff changeset
430
424
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
431 /* True if any displayed subwindow is in need of updating
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
432 somewhere. */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
433 extern int subwindows_state_changed;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
434 extern int subwindows_state_changed_set;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
435
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
436 /* True if an icon is in need of updating somewhere. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
437 extern int icon_changed;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
438 extern int icon_changed_set;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
439
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
440 /* True if a menubar is in need of updating somewhere. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
441 extern int menubar_changed;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
442 extern int menubar_changed_set;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
443
412
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 406
diff changeset
444 /* true iff we should redraw the modelines on the next redisplay */
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
445 extern int modeline_changed;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
446 extern int modeline_changed_set;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
447
412
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 406
diff changeset
448 /* non-nil if point has changed in some buffer since the last time
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 406
diff changeset
449 redisplay completed */
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
450 extern int point_changed;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
451 extern int point_changed_set;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
452
412
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 406
diff changeset
453 /* non-nil if some frame has changed its size */
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
454 extern int size_changed;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
455
412
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 406
diff changeset
456 /* non-nil if some device has signaled that it wants to change size */
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
457 extern int asynch_device_change_pending;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
458
412
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 406
diff changeset
459 /* non-nil if any toolbar has changed */
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
460 extern int toolbar_changed;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
461 extern int toolbar_changed_set;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
462
422
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
463 /* non-nil if any gutter has changed */
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
464 extern int gutter_changed;
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
465 extern int gutter_changed_set;
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
466
412
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 406
diff changeset
467 /* non-nil if any window has changed since the last time redisplay completed */
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
468 extern int windows_changed;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
469
412
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 406
diff changeset
470 /* non-nil if any frame's window structure has changed since the last
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 406
diff changeset
471 time redisplay completed */
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
472 extern int windows_structure_changed;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
473
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
474 /* These macros can be relatively expensive. Since they are often
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
475 called numerous times between each call to redisplay, we keep track
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
476 if each has already been called and don't bother doing most of the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
477 work if it is currently set. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
478
380
8626e4521993 Import from CVS: tag r21-2-5
cvs
parents: 284
diff changeset
479 #define MARK_TYPE_CHANGED(object) do { \
8626e4521993 Import from CVS: tag r21-2-5
cvs
parents: 284
diff changeset
480 if (!object##_changed_set) { \
8626e4521993 Import from CVS: tag r21-2-5
cvs
parents: 284
diff changeset
481 Lisp_Object MTC_devcons, MTC_concons; \
8626e4521993 Import from CVS: tag r21-2-5
cvs
parents: 284
diff changeset
482 DEVICE_LOOP_NO_BREAK (MTC_devcons, MTC_concons) \
8626e4521993 Import from CVS: tag r21-2-5
cvs
parents: 284
diff changeset
483 { \
8626e4521993 Import from CVS: tag r21-2-5
cvs
parents: 284
diff changeset
484 Lisp_Object MTC_frmcons; \
8626e4521993 Import from CVS: tag r21-2-5
cvs
parents: 284
diff changeset
485 struct device *MTC_d = XDEVICE (XCAR (MTC_devcons)); \
8626e4521993 Import from CVS: tag r21-2-5
cvs
parents: 284
diff changeset
486 DEVICE_FRAME_LOOP (MTC_frmcons, MTC_d) \
8626e4521993 Import from CVS: tag r21-2-5
cvs
parents: 284
diff changeset
487 { \
8626e4521993 Import from CVS: tag r21-2-5
cvs
parents: 284
diff changeset
488 struct frame *MTC_f = XFRAME (XCAR (MTC_frmcons)); \
8626e4521993 Import from CVS: tag r21-2-5
cvs
parents: 284
diff changeset
489 MTC_f->object##_changed = 1; \
8626e4521993 Import from CVS: tag r21-2-5
cvs
parents: 284
diff changeset
490 MTC_f->modiff++; \
8626e4521993 Import from CVS: tag r21-2-5
cvs
parents: 284
diff changeset
491 } \
8626e4521993 Import from CVS: tag r21-2-5
cvs
parents: 284
diff changeset
492 MTC_d->object##_changed = 1; \
8626e4521993 Import from CVS: tag r21-2-5
cvs
parents: 284
diff changeset
493 } \
8626e4521993 Import from CVS: tag r21-2-5
cvs
parents: 284
diff changeset
494 object##_changed = 1; \
8626e4521993 Import from CVS: tag r21-2-5
cvs
parents: 284
diff changeset
495 object##_changed_set = 1; } \
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
496 } while (0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
497
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
498 #define MARK_BUFFERS_CHANGED MARK_TYPE_CHANGED (buffers)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
499 #define MARK_CLIP_CHANGED MARK_TYPE_CHANGED (clip)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
500 #define MARK_EXTENTS_CHANGED MARK_TYPE_CHANGED (extents)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
501 #define MARK_ICON_CHANGED MARK_TYPE_CHANGED (icon)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
502 #define MARK_MENUBAR_CHANGED MARK_TYPE_CHANGED (menubar)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
503 #define MARK_MODELINE_CHANGED MARK_TYPE_CHANGED (modeline)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
504 #define MARK_POINT_CHANGED MARK_TYPE_CHANGED (point)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
505 #define MARK_TOOLBAR_CHANGED MARK_TYPE_CHANGED (toolbar)
422
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
506 #define MARK_GUTTER_CHANGED MARK_TYPE_CHANGED (gutter)
269
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 185
diff changeset
507 #define MARK_GLYPHS_CHANGED MARK_TYPE_CHANGED (glyphs)
384
bbff43aa5eb7 Import from CVS: tag r21-2-7
cvs
parents: 380
diff changeset
508 #define MARK_SUBWINDOWS_CHANGED MARK_TYPE_CHANGED (subwindows)
424
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
509 #define MARK_SUBWINDOWS_STATE_CHANGED MARK_TYPE_CHANGED (subwindows_state)
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
510
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
511
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
512 #define CLASS_RESET_CHANGED_FLAGS(p) do { \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
513 (p)->buffers_changed = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
514 (p)->clip_changed = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
515 (p)->extents_changed = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
516 (p)->faces_changed = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
517 (p)->frame_changed = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
518 (p)->icon_changed = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
519 (p)->menubar_changed = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
520 (p)->modeline_changed = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
521 (p)->point_changed = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
522 (p)->toolbar_changed = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
523 (p)->gutter_changed = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
524 (p)->glyphs_changed = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
525 (p)->subwindows_changed = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
526 (p)->subwindows_state_changed = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
527 (p)->windows_changed = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
528 (p)->windows_structure_changed = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
529 } while (0)
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
530
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
531 #define GLOBAL_RESET_CHANGED_FLAGS do { \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
532 buffers_changed = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
533 clip_changed = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
534 extents_changed = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
535 faces_changed = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
536 frame_changed = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
537 icon_changed = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
538 menubar_changed = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
539 modeline_changed = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
540 point_changed = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
541 toolbar_changed = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
542 gutter_changed = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
543 glyphs_changed = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
544 subwindows_changed = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
545 subwindows_state_changed = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
546 windows_changed = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
547 windows_structure_changed = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
548 } while (0)
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
549
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
550 #define CLASS_REDISPLAY_FLAGS_CHANGEDP(p) \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
551 ( (p)->buffers_changed || \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
552 (p)->clip_changed || \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
553 (p)->extents_changed || \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
554 (p)->faces_changed || \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
555 (p)->frame_changed || \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
556 (p)->icon_changed || \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
557 (p)->menubar_changed || \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
558 (p)->modeline_changed || \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
559 (p)->point_changed || \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
560 (p)->toolbar_changed || \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
561 (p)->gutter_changed || \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
562 (p)->glyphs_changed || \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
563 (p)->subwindows_changed || \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
564 (p)->subwindows_state_changed || \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
565 (p)->windows_changed || \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
566 (p)->windows_structure_changed )
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
567
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
568 #define GLOBAL_REDISPLAY_FLAGS_CHANGEDP \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
569 ( buffers_changed || \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
570 clip_changed || \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
571 extents_changed || \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
572 faces_changed || \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
573 frame_changed || \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
574 icon_changed || \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
575 menubar_changed || \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
576 modeline_changed || \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
577 point_changed || \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
578 toolbar_changed || \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
579 gutter_changed || \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
580 glyphs_changed || \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
581 subwindows_changed || \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
582 subwindows_state_changed || \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
583 windows_changed || \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
584 windows_structure_changed )
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
585
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
586
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
587 /* Anytime a console, device or frame is added or deleted we need to reset
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
588 these flags. */
424
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
589 #define RESET_CHANGED_SET_FLAGS do { \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
590 buffers_changed_set = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
591 clip_changed_set = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
592 extents_changed_set = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
593 icon_changed_set = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
594 menubar_changed_set = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
595 modeline_changed_set = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
596 point_changed_set = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
597 toolbar_changed_set = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
598 gutter_changed_set = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
599 glyphs_changed_set = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
600 subwindows_changed_set = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
601 subwindows_state_changed_set = 0; \
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
602 } while (0)
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
603
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
604
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
605 /*************************************************************************/
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
606 /* redisplay global variables */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
607 /*************************************************************************/
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
608
380
8626e4521993 Import from CVS: tag r21-2-5
cvs
parents: 284
diff changeset
609 /* redisplay structure used by various utility routines. */
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
610 extern display_line_dynarr *cmotion_display_lines;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
611
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
612 /* Nonzero means truncate lines in all windows less wide than the frame. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
613 extern int truncate_partial_width_windows;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
614
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
615 /* Nonzero if we're in a display critical section. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
616 extern int in_display;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
617
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
618 /* Nonzero means no need to redraw the entire frame on resuming
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
619 a suspended Emacs. This is useful on terminals with multiple pages,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
620 where one page is used for Emacs and another for all else. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
621 extern int no_redraw_on_reenter;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
622
412
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 406
diff changeset
623 /* Nonzero means flash the frame instead of ringing the bell. */
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 406
diff changeset
624 extern int visible_bell;
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
625
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
626 /* Thickness of shadow border around 3D modelines. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
627 extern Lisp_Object Vmodeline_shadow_thickness;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
628
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
629 /* Scroll if point lands on the bottom line and that line is partially
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
630 clipped. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
631 extern int scroll_on_clipped_lines;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
632
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
633 extern Lisp_Object Vglobal_mode_string;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
634
2
ac2d302a0011 Import from CVS: tag r19-15b2
cvs
parents: 0
diff changeset
635 /* The following two variables are defined in emacs.c and are used
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
636 to convey information discovered on the command line way early
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
637 (before *anything* is initialized). */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
638
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
639 /* If non-zero, a window-system was specified on the command line.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
640 Defined in emacs.c. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
641 extern int display_arg;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
642
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
643 /* Type of display specified. Defined in emacs.c. */
412
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 406
diff changeset
644 extern CONST char *display_use;
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
645
272
c5d627a313b1 Import from CVS: tag r21-0b34
cvs
parents: 269
diff changeset
646 /* Nonzero means reading single-character input with prompt
c5d627a313b1 Import from CVS: tag r21-0b34
cvs
parents: 269
diff changeset
647 so put cursor on minibuffer after the prompt. */
c5d627a313b1 Import from CVS: tag r21-0b34
cvs
parents: 269
diff changeset
648
c5d627a313b1 Import from CVS: tag r21-0b34
cvs
parents: 269
diff changeset
649 extern int cursor_in_echo_area;
c5d627a313b1 Import from CVS: tag r21-0b34
cvs
parents: 269
diff changeset
650
c5d627a313b1 Import from CVS: tag r21-0b34
cvs
parents: 269
diff changeset
651 extern Lisp_Object Qbar_cursor, Qcursor_in_echo_area, Vwindow_system;
c5d627a313b1 Import from CVS: tag r21-0b34
cvs
parents: 269
diff changeset
652
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
653
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
654 /*************************************************************************/
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
655 /* redisplay exported functions */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
656 /*************************************************************************/
272
c5d627a313b1 Import from CVS: tag r21-0b34
cvs
parents: 269
diff changeset
657 EXFUN (Fredraw_frame, 2);
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
658
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
659 int redisplay_text_width_string (struct window *w, int findex,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
660 Bufbyte *nonreloc, Lisp_Object reloc,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
661 Bytecount offset, Bytecount len);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
662 int redisplay_frame_text_width_string (struct frame *f,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
663 Lisp_Object face,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
664 Bufbyte *nonreloc,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
665 Lisp_Object reloc,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
666 Bytecount offset, Bytecount len);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
667 void redisplay (void);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
668 struct display_block *get_display_block_from_line (struct display_line *dl,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
669 enum display_type type);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
670 layout_bounds calculate_display_line_boundaries (struct window *w,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
671 int modeline);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
672 Bufpos point_at_center (struct window *w, int type, Bufpos start,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
673 Bufpos point);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
674 int line_at_center (struct window *w, int type, Bufpos start, Bufpos point);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
675 int window_half_pixpos (struct window *w);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
676 void redisplay_echo_area (void);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
677 void free_display_structs (struct window_mirror *mir);
424
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
678 void free_display_lines (display_line_dynarr *dla);
412
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 406
diff changeset
679 Bufbyte *generate_formatted_string (struct window *w, Lisp_Object format_str,
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 406
diff changeset
680 Lisp_Object result_str, face_index findex,
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 406
diff changeset
681 int type);
422
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
682 void generate_displayable_area (struct window *w, Lisp_Object disp_string,
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
683 int xpos, int ypos, int width, int height,
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
684 display_line_dynarr* dl,
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
685 Bufpos start_pos, face_index default_face);
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
686 int real_current_modeline_height (struct window *w);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
687 int pixel_to_glyph_translation (struct frame *f, int x_coord,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
688 int y_coord, int *col, int *row,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
689 int *obj_x, int *obj_y,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
690 struct window **w, Bufpos *bufpos,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
691 Bufpos *closest, Charcount *modeline_closest,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
692 Lisp_Object *obj1, Lisp_Object *obj2);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
693 void glyph_to_pixel_translation (struct window *w, int char_x,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
694 int char_y, int *pix_x, int *pix_y);
424
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
695 void mark_redisplay (void);
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
696 int point_in_line_start_cache (struct window *w, Bufpos point,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
697 int min_past);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
698 int point_would_be_visible (struct window *w, Bufpos startp,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
699 Bufpos point);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
700 Bufpos start_of_last_line (struct window *w, Bufpos startp);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
701 Bufpos end_of_last_line (struct window *w, Bufpos startp);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
702 Bufpos start_with_line_at_pixpos (struct window *w, Bufpos point,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
703 int pixpos);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
704 Bufpos start_with_point_on_display_line (struct window *w, Bufpos point,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
705 int line);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
706 int redisplay_variable_changed (Lisp_Object sym, Lisp_Object *val,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
707 Lisp_Object in_object, int flags);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
708 void redisplay_glyph_changed (Lisp_Object glyph, Lisp_Object property,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
709 Lisp_Object locale);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
710
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
711 #ifdef MEMORY_USAGE_STATS
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
712 int compute_display_line_dynarr_usage (display_line_dynarr *dyn,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
713 struct overhead_stats *ovstats);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
714 int compute_line_start_cache_dynarr_usage (line_start_cache_dynarr *dyn,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
715 struct overhead_stats *ovstats);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
716 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
717
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
718
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
719 /* defined in redisplay-output.c */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
720 int get_next_display_block (layout_bounds bounds,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
721 display_block_dynarr *dba, int start_pos,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
722 int *next_start);
424
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
723 void redisplay_output_layout (struct window *w,
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
724 Lisp_Object image_instance,
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
725 struct display_box* db, struct display_glyph_area* dga,
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
726 face_index findex, int cursor_start, int cursor_width,
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
727 int cursor_height);
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
728 void redisplay_output_subwindow (struct window *w,
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
729 Lisp_Object image_instance,
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
730 struct display_box* db, struct display_glyph_area* dga,
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
731 face_index findex, int cursor_start, int cursor_width,
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
732 int cursor_height);
388
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents: 384
diff changeset
733 void redisplay_unmap_subwindows_maybe (struct frame* f, int x, int y, int width, int height);
424
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
734 void redisplay_output_pixmap (struct window *w,
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
735 Lisp_Object image_instance,
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
736 struct display_box* db, struct display_glyph_area* dga,
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
737 face_index findex, int cursor_start, int cursor_width,
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
738 int cursor_height, int offset_bitmap);
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
739 int redisplay_calculate_display_boxes (struct display_line *dl, int xpos,
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
740 int xoffset, int start_pixpos, int width,
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
741 struct display_box* dest,
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
742 struct display_glyph_area* src);
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
743 int redisplay_normalize_glyph_area (struct display_box* dest,
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
744 struct display_glyph_area* glyphsrc);
422
95016f13131a Import from CVS: tag r21-2-19
cvs
parents: 412
diff changeset
745 void redisplay_clear_to_window_end (struct window *w, int ypos1, int ypos2);
384
bbff43aa5eb7 Import from CVS: tag r21-2-7
cvs
parents: 380
diff changeset
746 void redisplay_clear_region (Lisp_Object window, face_index findex, int x,
bbff43aa5eb7 Import from CVS: tag r21-2-7
cvs
parents: 380
diff changeset
747 int y, int width, int height);
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
748 void redisplay_clear_bottom_of_window (struct window *w,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
749 display_line_dynarr *ddla,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
750 int min_start, int max_end);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
751 void redisplay_update_line (struct window *w, int first_line,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
752 int last_line, int update_values);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
753 void redisplay_output_window (struct window *w);
424
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents: 422
diff changeset
754 void bevel_modeline (struct window *w, struct display_line *dl);
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
755 int redisplay_move_cursor (struct window *w, Bufpos new_point,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
756 int no_output_end);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
757 void redisplay_redraw_cursor (struct frame *f, int run_begin_end_meths);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
758 void output_display_line (struct window *w, display_line_dynarr *cdla,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
759 display_line_dynarr *ddla, int line,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
760 int force_start, int force_end);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
761
412
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 406
diff changeset
762 #endif /* _XEMACS_REDISPLAY_H_ */