annotate src/redisplay.h @ 4815:6540302eedf5

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