Implement various display methods for glyphless characters.
[bpt/emacs.git] / src / dispextern.h
1 /* Interface definitions for display code.
2 Copyright (C) 1985, 1993, 1994, 1997, 1998, 1999, 2000, 2001, 2002,
3 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
4 Free Software Foundation, Inc.
5
6 This file is part of GNU Emacs.
7
8 GNU Emacs is free software: you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation, either version 3 of the License, or
11 (at your option) any later version.
12
13 GNU Emacs is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
20
21 /* New redisplay written by Gerd Moellmann <gerd@gnu.org>. */
22
23 #ifndef DISPEXTERN_H_INCLUDED
24 #define DISPEXTERN_H_INCLUDED
25
26 #ifdef HAVE_X_WINDOWS
27
28 #include <X11/Xlib.h>
29 #ifdef USE_X_TOOLKIT
30 #include <X11/Intrinsic.h>
31 #endif /* USE_X_TOOLKIT */
32
33 #else /* !HAVE_X_WINDOWS */
34
35 /* X-related stuff used by non-X gui code. */
36
37 typedef struct {
38 unsigned long pixel;
39 unsigned short red, green, blue;
40 char flags;
41 char pad;
42 } XColor;
43
44 #endif /* HAVE_X_WINDOWS */
45
46 #ifdef MSDOS
47 #include "msdos.h"
48 #endif
49
50 #ifdef HAVE_X_WINDOWS
51 typedef struct x_display_info Display_Info;
52 typedef XImage * XImagePtr;
53 typedef XImagePtr XImagePtr_or_DC;
54 #define NativeRectangle XRectangle
55 #endif
56
57 #ifdef HAVE_NTGUI
58 #include "w32gui.h"
59 typedef struct w32_display_info Display_Info;
60 typedef XImage *XImagePtr;
61 typedef HDC XImagePtr_or_DC;
62 #endif
63
64 #ifdef HAVE_NS
65 #include "nsgui.h"
66 /* following typedef needed to accomodate the MSDOS port, believe it or not */
67 typedef struct ns_display_info Display_Info;
68 typedef Pixmap XImagePtr;
69 typedef XImagePtr XImagePtr_or_DC;
70 #endif
71
72 #ifndef NativeRectangle
73 #define NativeRectangle int
74 #endif
75
76 /* Structure forward declarations. Some are here because function
77 prototypes below reference structure types before their definition
78 in this file. Some are here because not every file including
79 dispextern.h also includes frame.h and windows.h. */
80
81 struct glyph;
82 struct glyph_row;
83 struct glyph_matrix;
84 struct glyph_pool;
85 struct frame;
86 struct window;
87
88
89 /* Values returned from coordinates_in_window. */
90
91 enum window_part
92 {
93 ON_NOTHING,
94 ON_TEXT,
95 ON_MODE_LINE,
96 ON_VERTICAL_BORDER,
97 ON_HEADER_LINE,
98 ON_LEFT_FRINGE,
99 ON_RIGHT_FRINGE,
100 ON_LEFT_MARGIN,
101 ON_RIGHT_MARGIN,
102 ON_SCROLL_BAR
103 };
104
105 /* Number of bits allocated to store fringe bitmap numbers. */
106 #define FRINGE_ID_BITS 16
107
108 /* Number of bits allocated to store fringe bitmap height. */
109 #define FRINGE_HEIGHT_BITS 8
110
111 \f
112 /***********************************************************************
113 Debugging
114 ***********************************************************************/
115
116 /* If GLYPH_DEBUG is non-zero, additional checks are activated. Turn
117 it off by defining the macro GLYPH_DEBUG to zero. */
118
119 #ifndef GLYPH_DEBUG
120 #define GLYPH_DEBUG 0
121 #endif
122
123 /* If XASSERTS is non-zero, additional consistency checks are activated.
124 Turn it off by defining the macro XASSERTS to zero. */
125
126 #ifndef XASSERTS
127 #define XASSERTS 0
128 #endif
129
130 /* Macros to include code only if GLYPH_DEBUG != 0. */
131
132 #if GLYPH_DEBUG
133 #define IF_DEBUG(X) X
134 #else
135 #define IF_DEBUG(X) (void) 0
136 #endif
137
138 #if XASSERTS
139 #define xassert(X) do {if (!(X)) abort ();} while (0)
140 #else
141 #define xassert(X) (void) 0
142 #endif
143
144 /* Macro for displaying traces of redisplay. If Emacs was compiled
145 with GLYPH_DEBUG != 0, the variable trace_redisplay_p can be set to
146 a non-zero value in debugging sessions to activate traces. */
147
148 #if GLYPH_DEBUG
149
150 extern int trace_redisplay_p;
151 #include <stdio.h>
152
153 #define TRACE(X) \
154 if (trace_redisplay_p) \
155 fprintf X; \
156 else \
157 (void) 0
158
159 #else /* GLYPH_DEBUG == 0 */
160
161 #define TRACE(X) (void) 0
162
163 #endif /* GLYPH_DEBUG == 0 */
164
165
166 \f
167 /***********************************************************************
168 Text positions
169 ***********************************************************************/
170
171 /* Starting with Emacs 20.3, characters from strings and buffers have
172 both a character and a byte position associated with them. The
173 following structure holds such a pair of positions. */
174
175 struct text_pos
176 {
177 /* Character position. */
178 EMACS_INT charpos;
179
180 /* Corresponding byte position. */
181 EMACS_INT bytepos;
182 };
183
184 /* Access character and byte position of POS in a functional form. */
185
186 #define BYTEPOS(POS) (POS).bytepos
187 #define CHARPOS(POS) (POS).charpos
188
189 /* Set character position of POS to CHARPOS, byte position to BYTEPOS. */
190
191 #define SET_TEXT_POS(POS, CHARPOS, BYTEPOS) \
192 ((POS).charpos = (CHARPOS), (POS).bytepos = BYTEPOS)
193
194 /* Increment text position POS. */
195
196 #define INC_TEXT_POS(POS, MULTIBYTE_P) \
197 do \
198 { \
199 ++(POS).charpos; \
200 if (MULTIBYTE_P) \
201 INC_POS ((POS).bytepos); \
202 else \
203 ++(POS).bytepos; \
204 } \
205 while (0)
206
207 /* Decrement text position POS. */
208
209 #define DEC_TEXT_POS(POS, MULTIBYTE_P) \
210 do \
211 { \
212 --(POS).charpos; \
213 if (MULTIBYTE_P) \
214 DEC_POS ((POS).bytepos); \
215 else \
216 --(POS).bytepos; \
217 } \
218 while (0)
219
220 /* Set text position POS from marker MARKER. */
221
222 #define SET_TEXT_POS_FROM_MARKER(POS, MARKER) \
223 (CHARPOS (POS) = marker_position ((MARKER)), \
224 BYTEPOS (POS) = marker_byte_position ((MARKER)))
225
226 /* Set marker MARKER from text position POS. */
227
228 #define SET_MARKER_FROM_TEXT_POS(MARKER, POS) \
229 set_marker_both ((MARKER), Qnil, CHARPOS ((POS)), BYTEPOS ((POS)))
230
231 /* Value is non-zero if character and byte positions of POS1 and POS2
232 are equal. */
233
234 #define TEXT_POS_EQUAL_P(POS1, POS2) \
235 ((POS1).charpos == (POS2).charpos \
236 && (POS1).bytepos == (POS2).bytepos)
237
238 /* When rendering glyphs, redisplay scans string or buffer text,
239 overlay strings in that text, and does display table or control
240 character translations. The following structure captures a
241 position taking all this into account. */
242
243 struct display_pos
244 {
245 /* Buffer or string position. */
246 struct text_pos pos;
247
248 /* If this is a position in an overlay string, overlay_string_index
249 is the index of that overlay string in the sequence of overlay
250 strings at `pos' in the order redisplay processes them. A value
251 < 0 means that this is not a position in an overlay string. */
252 int overlay_string_index;
253
254 /* If this is a position in an overlay string, string_pos is the
255 position within that string. */
256 struct text_pos string_pos;
257
258 /* If the character at the position above is a control character or
259 has a display table entry, dpvec_index is an index in the display
260 table or control character translation of that character. A
261 value < 0 means this is not a position in such a translation. */
262 int dpvec_index;
263 };
264
265
266 \f
267 /***********************************************************************
268 Glyphs
269 ***********************************************************************/
270
271 /* Enumeration of glyph types. Glyph structures contain a type field
272 containing one of the enumerators defined here. */
273
274 enum glyph_type
275 {
276 /* Glyph describes a character. */
277 CHAR_GLYPH,
278
279 /* Glyph describes a static composition. */
280 COMPOSITE_GLYPH,
281
282 /* Glyph describes a glyphless character. */
283 GLYPHLESS_GLYPH,
284
285 /* Glyph describes an image. */
286 IMAGE_GLYPH,
287
288 /* Glyph is a space of fractional width and/or height. */
289 STRETCH_GLYPH
290 };
291
292
293 /* Structure describing how to use partial glyphs (images slicing) */
294
295 struct glyph_slice
296 {
297 unsigned x : 16;
298 unsigned y : 16;
299 unsigned width : 16;
300 unsigned height : 16;
301 };
302
303
304 /* Glyphs.
305
306 Be extra careful when changing this structure! Esp. make sure that
307 functions producing glyphs, like append_glyph, fill ALL of the
308 glyph structure, and that GLYPH_EQUAL_P compares all
309 display-relevant members of glyphs (not to imply that these are the
310 only things to check when you add a member). */
311
312 struct glyph
313 {
314 /* Position from which this glyph was drawn. If `object' below is a
315 Lisp string, this is a position in that string. If it is a
316 buffer, this is a position in that buffer. A value of -1
317 together with a null object means glyph is a truncation glyph at
318 the start of a row. */
319 EMACS_INT charpos;
320
321 /* Lisp object source of this glyph. Currently either a buffer or
322 a string, if the glyph was produced from characters which came from
323 a buffer or a string; or 0 if the glyph was inserted by redisplay
324 for its own purposes such as padding. */
325 Lisp_Object object;
326
327 /* Width in pixels. */
328 short pixel_width;
329
330 /* Ascent and descent in pixels. */
331 short ascent, descent;
332
333 /* Vertical offset. If < 0, the glyph is displayed raised, if > 0
334 the glyph is displayed lowered. */
335 short voffset;
336
337 /* Which kind of glyph this is---character, image etc. Value
338 should be an enumerator of type enum glyph_type. */
339 unsigned type : 3;
340
341 /* 1 means this glyph was produced from multibyte text. Zero
342 means it was produced from unibyte text, i.e. charsets aren't
343 applicable, and encoding is not performed. */
344 unsigned multibyte_p : 1;
345
346 /* Non-zero means draw a box line at the left or right side of this
347 glyph. This is part of the implementation of the face attribute
348 `:box'. */
349 unsigned left_box_line_p : 1;
350 unsigned right_box_line_p : 1;
351
352 /* Non-zero means this glyph's physical ascent or descent is greater
353 than its logical ascent/descent, i.e. it may potentially overlap
354 glyphs above or below it. */
355 unsigned overlaps_vertically_p : 1;
356
357 /* For terminal frames, 1 means glyph is a padding glyph. Padding
358 glyphs are used for characters whose visual shape consists of
359 more than one glyph (e.g. Asian characters). All but the first
360 glyph of such a glyph sequence have the padding_p flag set. This
361 flag is used only to minimize code changes. A better way would
362 probably be to use the width field of glyphs to express padding.
363
364 For graphic frames, 1 means the pixel width of the glyph in a
365 font is 0, but 1-pixel is padded on displaying for correct cursor
366 displaying. The member `pixel_width' above is set to 1. */
367 unsigned padding_p : 1;
368
369 /* 1 means the actual glyph is not available, draw a box instead.
370 This can happen when a font couldn't be loaded, or a character
371 doesn't have a glyph in a font. */
372 unsigned glyph_not_available_p : 1;
373
374
375 /* Non-zero means don't display cursor here. */
376 unsigned avoid_cursor_p : 1;
377
378 /* Resolved bidirectional level of this character [0..63]. */
379 unsigned resolved_level : 5;
380
381 /* Resolved bidirectional type of this character, see enum
382 bidi_type_t below. Note that according to UAX#9, only some
383 values (STRONG_L, STRONG_R, WEAK_AN, WEAK_EN, WEAK_BN, and
384 NEUTRAL_B) can appear in the resolved type, so we only reserve
385 space for those that can. */
386 unsigned bidi_type : 3;
387
388 #define FACE_ID_BITS 20
389
390 /* Face of the glyph. This is a realized face ID,
391 an index in the face cache of the frame. */
392 unsigned face_id : FACE_ID_BITS;
393
394 /* Type of font used to display the character glyph. May be used to
395 determine which set of functions to use to obtain font metrics
396 for the glyph. On W32, value should be an enumerator of the type
397 w32_char_font_type. Otherwise it equals FONT_TYPE_UNKNOWN. */
398 unsigned font_type : 3;
399
400 /* A union of sub-structures for different glyph types. */
401 union
402 {
403 /* Metrics of a partial glyph of an image (type == IMAGE_GLYPH). */
404 struct glyph_slice img;
405 /* Start and end indices of glyphs of a graphme cluster of a
406 composition (type == COMPOSITE_GLYPH). */
407 struct { int from, to; } cmp;
408 /* Pixel offsets for upper and lower part of the acronym. */
409 struct {
410 short upper_xoff, upper_yoff;
411 short lower_xoff, lower_yoff;
412 } glyphless;
413 } slice;
414
415 /* A union of sub-structures for different glyph types. */
416 union
417 {
418 /* Character code for character glyphs (type == CHAR_GLYPH). */
419 unsigned ch;
420
421 /* Sub-structures for type == COMPOSITE_GLYPH. */
422 struct
423 {
424 /* Flag to tell if the composition is automatic or not. */
425 unsigned automatic : 1;
426 /* ID of the composition. */
427 unsigned id : 31;
428 } cmp;
429
430 /* Image ID for image glyphs (type == IMAGE_GLYPH). */
431 unsigned img_id;
432
433 /* Sub-structure for type == STRETCH_GLYPH. */
434 struct
435 {
436 /* The height of the glyph. */
437 unsigned height : 16;
438
439 /* The ascent of the glyph. */
440 unsigned ascent : 16;
441 }
442 stretch;
443
444 /* Sub-stretch for type == GLYPHLESS_GLYPH. */
445 struct
446 {
447 /* Value is an enum of the type glyphless_display_method. */
448 unsigned method : 2;
449 /* 1 iff this glyph is for a character of no font. */
450 unsigned for_no_font : 1;
451 /* Length of acronym or hexadecimal code string (at most 8). */
452 unsigned len : 4;
453 /* Character to display. Actually we need only 22 bits. */
454 unsigned ch : 26;
455 } glyphless;
456
457 /* Used to compare all bit-fields above in one step. */
458 unsigned val;
459 } u;
460 };
461
462
463 /* Default value of the glyph font_type field. */
464
465 #define FONT_TYPE_UNKNOWN 0
466
467 /* Is GLYPH a space? */
468
469 #define CHAR_GLYPH_SPACE_P(GLYPH) \
470 ((GLYPH).u.ch == SPACEGLYPH && (GLYPH).face_id == DEFAULT_FACE_ID)
471
472 /* Are glyph slices of glyphs *X and *Y equal? It assumes that both
473 glyphs have the same type.
474
475 Note: for composition glyphs, we don't have to compare slice.cmp.to
476 because they should be the same if and only if slice.cmp.from are
477 the same. */
478
479 #define GLYPH_SLICE_EQUAL_P(X, Y) \
480 ((X)->type == IMAGE_GLYPH \
481 ? ((X)->slice.img.x == (Y)->slice.img.x \
482 && (X)->slice.img.y == (Y)->slice.img.y \
483 && (X)->slice.img.width == (Y)->slice.img.width \
484 && (X)->slice.img.height == (Y)->slice.img.height) \
485 : ((X)->type != COMPOSITE_GLYPH \
486 || (X)->slice.cmp.from == (Y)->slice.cmp.from))
487
488 /* Are glyphs *X and *Y displayed equal? */
489
490 #define GLYPH_EQUAL_P(X, Y) \
491 ((X)->type == (Y)->type \
492 && (X)->u.val == (Y)->u.val \
493 && GLYPH_SLICE_EQUAL_P (X, Y) \
494 && (X)->face_id == (Y)->face_id \
495 && (X)->padding_p == (Y)->padding_p \
496 && (X)->left_box_line_p == (Y)->left_box_line_p \
497 && (X)->right_box_line_p == (Y)->right_box_line_p \
498 && (X)->voffset == (Y)->voffset \
499 && (X)->pixel_width == (Y)->pixel_width)
500
501 /* Are character codes, faces, padding_ps of glyphs *X and *Y equal? */
502
503 #define GLYPH_CHAR_AND_FACE_EQUAL_P(X, Y) \
504 ((X)->u.ch == (Y)->u.ch \
505 && (X)->face_id == (Y)->face_id \
506 && (X)->padding_p == (Y)->padding_p)
507
508 /* Fill a character glyph GLYPH. CODE, FACE_ID, PADDING_P correspond
509 to the bits defined for the typedef `GLYPH' in lisp.h. */
510
511 #define SET_CHAR_GLYPH(GLYPH, CODE, FACE_ID, PADDING_P) \
512 do \
513 { \
514 (GLYPH).u.ch = (CODE); \
515 (GLYPH).face_id = (FACE_ID); \
516 (GLYPH).padding_p = (PADDING_P); \
517 } \
518 while (0)
519
520 /* Fill a character type glyph GLYPH from a glyph typedef FROM as
521 defined in lisp.h. */
522
523 #define SET_CHAR_GLYPH_FROM_GLYPH(GLYPH, FROM) \
524 SET_CHAR_GLYPH ((GLYPH), \
525 GLYPH_CHAR ((FROM)), \
526 GLYPH_FACE ((FROM)), \
527 0)
528
529 /* Construct a glyph code from a character glyph GLYPH. If the
530 character is multibyte, return -1 as we can't use glyph table for a
531 multibyte character. */
532
533 #define SET_GLYPH_FROM_CHAR_GLYPH(G, GLYPH) \
534 do \
535 { \
536 if ((GLYPH).u.ch < 256) \
537 SET_GLYPH ((G), (GLYPH).u.ch, ((GLYPH).face_id)); \
538 else \
539 SET_GLYPH ((G), -1, 0); \
540 } \
541 while (0)
542
543 #define GLYPH_INVALID_P(GLYPH) (GLYPH_CHAR (GLYPH) < 0)
544
545 /* Is GLYPH a padding glyph? */
546
547 #define CHAR_GLYPH_PADDING_P(GLYPH) (GLYPH).padding_p
548
549
550
551 \f
552 /***********************************************************************
553 Glyph Pools
554 ***********************************************************************/
555
556 /* Glyph Pool.
557
558 Glyph memory for frame-based redisplay is allocated from the heap
559 in one vector kept in a glyph pool structure which is stored with
560 the frame. The size of the vector is made large enough to cover
561 all windows on the frame.
562
563 Both frame and window glyph matrices reference memory from a glyph
564 pool in frame-based redisplay.
565
566 In window-based redisplay, no glyphs pools exist; windows allocate
567 and free their glyph memory themselves. */
568
569 struct glyph_pool
570 {
571 /* Vector of glyphs allocated from the heap. */
572 struct glyph *glyphs;
573
574 /* Allocated size of `glyphs'. */
575 int nglyphs;
576
577 /* Number of rows and columns in a matrix. */
578 int nrows, ncolumns;
579 };
580
581
582 \f
583 /***********************************************************************
584 Glyph Matrix
585 ***********************************************************************/
586
587 /* Glyph Matrix.
588
589 Three kinds of glyph matrices exist:
590
591 1. Frame glyph matrices. These are used for terminal frames whose
592 redisplay needs a view of the whole screen due to limited terminal
593 capabilities. Frame matrices are used only in the update phase
594 of redisplay. They are built in update_frame and not used after
595 the update has been performed.
596
597 2. Window glyph matrices on frames having frame glyph matrices.
598 Such matrices are sub-matrices of their corresponding frame matrix,
599 i.e. frame glyph matrices and window glyph matrices share the same
600 glyph memory which is allocated in form of a glyph_pool structure.
601 Glyph rows in such a window matrix are slices of frame matrix rows.
602
603 2. Free-standing window glyph matrices managing their own glyph
604 storage. This form is used in window-based redisplay which
605 includes variable width and height fonts etc.
606
607 The size of a window's row vector depends on the height of fonts
608 defined on its frame. It is chosen so that the vector is large
609 enough to describe all lines in a window when it is displayed in
610 the smallest possible character size. When new fonts are loaded,
611 or window sizes change, the row vector is adjusted accordingly. */
612
613 struct glyph_matrix
614 {
615 /* The pool from which glyph memory is allocated, if any. This is
616 null for frame matrices and for window matrices managing their
617 own storage. */
618 struct glyph_pool *pool;
619
620 /* Vector of glyph row structures. The row at nrows - 1 is reserved
621 for the mode line. */
622 struct glyph_row *rows;
623
624 /* Number of elements allocated for the vector rows above. */
625 int rows_allocated;
626
627 /* The number of rows used by the window if all lines were displayed
628 with the smallest possible character height. */
629 int nrows;
630
631 /* Origin within the frame matrix if this is a window matrix on a
632 frame having a frame matrix. Both values are zero for
633 window-based redisplay. */
634 int matrix_x, matrix_y;
635
636 /* Width and height of the matrix in columns and rows. */
637 int matrix_w, matrix_h;
638
639 /* If this structure describes a window matrix of window W,
640 window_left_col is the value of W->left_col, window_top_line the
641 value of W->top_line, window_height and window_width are width and
642 height of W, as returned by window_box, and window_vscroll is the
643 value of W->vscroll at the time the matrix was last adjusted.
644 Only set for window-based redisplay. */
645 int window_left_col, window_top_line;
646 int window_height, window_width;
647 int window_vscroll;
648
649 /* Number of glyphs reserved for left and right marginal areas when
650 the matrix was last adjusted. */
651 int left_margin_glyphs, right_margin_glyphs;
652
653 /* Flag indicating that scrolling should not be tried in
654 update_window. This flag is set by functions like try_window_id
655 which do their own scrolling. */
656 unsigned no_scrolling_p : 1;
657
658 /* Non-zero means window displayed in this matrix has a top mode
659 line. */
660 unsigned header_line_p : 1;
661
662 #ifdef GLYPH_DEBUG
663 /* A string identifying the method used to display the matrix. */
664 char method[512];
665 #endif
666
667 /* The buffer this matrix displays. Set in
668 mark_window_display_accurate_1. */
669 struct buffer *buffer;
670
671 /* Values of BEGV and ZV as of last redisplay. Set in
672 mark_window_display_accurate_1. */
673 int begv, zv;
674 };
675
676
677 /* Check that glyph pointers stored in glyph rows of MATRIX are okay.
678 This aborts if any pointer is found twice. */
679
680 #if GLYPH_DEBUG
681 void check_matrix_pointer_lossage (struct glyph_matrix *);
682 #define CHECK_MATRIX(MATRIX) check_matrix_pointer_lossage ((MATRIX))
683 #else
684 #define CHECK_MATRIX(MATRIX) (void) 0
685 #endif
686
687
688 \f
689 /***********************************************************************
690 Glyph Rows
691 ***********************************************************************/
692
693 /* Area in window glyph matrix. If values are added or removed, the
694 function mark_object in alloc.c has to be changed. */
695
696 enum glyph_row_area
697 {
698 LEFT_MARGIN_AREA,
699 TEXT_AREA,
700 RIGHT_MARGIN_AREA,
701 LAST_AREA
702 };
703
704
705 /* Rows of glyphs in a windows or frame glyph matrix.
706
707 Each row is partitioned into three areas. The start and end of
708 each area is recorded in a pointer as shown below.
709
710 +--------------------+-------------+---------------------+
711 | left margin area | text area | right margin area |
712 +--------------------+-------------+---------------------+
713 | | | |
714 glyphs[LEFT_MARGIN_AREA] glyphs[RIGHT_MARGIN_AREA]
715 | |
716 glyphs[TEXT_AREA] |
717 glyphs[LAST_AREA]
718
719 Rows in frame matrices reference glyph memory allocated in a frame
720 glyph pool (see the description of struct glyph_pool). Rows in
721 window matrices on frames having frame matrices reference slices of
722 the glyphs of corresponding rows in the frame matrix.
723
724 Rows in window matrices on frames having no frame matrices point to
725 glyphs allocated from the heap via xmalloc;
726 glyphs[LEFT_MARGIN_AREA] is the start address of the allocated
727 glyph structure array. */
728
729 struct glyph_row
730 {
731 /* Pointers to beginnings of areas. The end of an area A is found at
732 A + 1 in the vector. The last element of the vector is the end
733 of the whole row.
734
735 Kludge alert: Even if used[TEXT_AREA] == 0, glyphs[TEXT_AREA][0]'s
736 position field is used. It is -1 if this row does not correspond
737 to any text; it is some buffer position if the row corresponds to
738 an empty display line that displays a line end. This is what old
739 redisplay used to do. (Except in code for terminal frames, this
740 kludge is no longer used, I believe. --gerd).
741
742 See also start, end, displays_text_p and ends_at_zv_p for cleaner
743 ways to do it. The special meaning of positions 0 and -1 will be
744 removed some day, so don't use it in new code. */
745 struct glyph *glyphs[1 + LAST_AREA];
746
747 /* Number of glyphs actually filled in areas. */
748 short used[LAST_AREA];
749
750 /* Window-relative x and y-position of the top-left corner of this
751 row. If y < 0, this means that eabs (y) pixels of the row are
752 invisible because it is partially visible at the top of a window.
753 If x < 0, this means that eabs (x) pixels of the first glyph of
754 the text area of the row are invisible because the glyph is
755 partially visible. */
756 int x, y;
757
758 /* Width of the row in pixels without taking face extension at the
759 end of the row into account, and without counting truncation
760 and continuation glyphs at the end of a row on ttys. */
761 int pixel_width;
762
763 /* Logical ascent/height of this line. The value of ascent is zero
764 and height is 1 on terminal frames. */
765 int ascent, height;
766
767 /* Physical ascent/height of this line. If max_ascent > ascent,
768 this line overlaps the line above it on the display. Otherwise,
769 if max_height > height, this line overlaps the line beneath it. */
770 int phys_ascent, phys_height;
771
772 /* Portion of row that is visible. Partially visible rows may be
773 found at the top and bottom of a window. This is 1 for tty
774 frames. It may be < 0 in case of completely invisible rows. */
775 int visible_height;
776
777 /* Extra line spacing added after this row. Do not consider this
778 in last row when checking if row is fully visible. */
779 int extra_line_spacing;
780
781 /* Hash code. This hash code is available as soon as the row
782 is constructed, i.e. after a call to display_line. */
783 unsigned hash;
784
785 /* First position in this row. This is the text position, including
786 overlay position information etc, where the display of this row
787 started, and can thus be less than the position of the first
788 glyph (e.g. due to invisible text or horizontal scrolling).
789 BIDI Note: In R2L rows, that have its reversed_p flag set, this
790 position is at or beyond the right edge of the row. */
791 struct display_pos start;
792
793 /* Text position at the end of this row. This is the position after
794 the last glyph on this row. It can be greater than the last
795 glyph position + 1, due to a newline that ends the line,
796 truncation, invisible text etc. In an up-to-date display, this
797 should always be equal to the start position of the next row.
798 BIDI Note: In R2L rows, this position is at or beyond the left
799 edge of the row. */
800 struct display_pos end;
801
802 /* The smallest and the largest buffer positions that contributed to
803 glyphs in this row. Note that due to bidi reordering, these are
804 in general different from the text positions stored in `start'
805 and `end' members above, and also different from the buffer
806 positions recorded in the glyphs displayed the leftmost and
807 rightmost on the screen. */
808 struct text_pos minpos, maxpos;
809
810 /* Non-zero means the overlay arrow bitmap is on this line.
811 -1 means use default overlay arrow bitmap, else
812 it specifies actual fringe bitmap number. */
813 int overlay_arrow_bitmap;
814
815 /* Left fringe bitmap number (enum fringe_bitmap_type). */
816 unsigned left_user_fringe_bitmap : FRINGE_ID_BITS;
817
818 /* Right fringe bitmap number (enum fringe_bitmap_type). */
819 unsigned right_user_fringe_bitmap : FRINGE_ID_BITS;
820
821 /* Left fringe bitmap number (enum fringe_bitmap_type). */
822 unsigned left_fringe_bitmap : FRINGE_ID_BITS;
823
824 /* Right fringe bitmap number (enum fringe_bitmap_type). */
825 unsigned right_fringe_bitmap : FRINGE_ID_BITS;
826
827 /* Face of the left fringe glyph. */
828 unsigned left_user_fringe_face_id : FACE_ID_BITS;
829
830 /* Face of the right fringe glyph. */
831 unsigned right_user_fringe_face_id : FACE_ID_BITS;
832
833 /* Face of the left fringe glyph. */
834 unsigned left_fringe_face_id : FACE_ID_BITS;
835
836 /* Face of the right fringe glyph. */
837 unsigned right_fringe_face_id : FACE_ID_BITS;
838
839 /* Vertical offset of the left fringe bitmap. */
840 signed left_fringe_offset : FRINGE_HEIGHT_BITS;
841
842 /* Vertical offset of the right fringe bitmap. */
843 signed right_fringe_offset : FRINGE_HEIGHT_BITS;
844
845 /* 1 means that we must draw the bitmaps of this row. */
846 unsigned redraw_fringe_bitmaps_p : 1;
847
848 /* In a desired matrix, 1 means that this row must be updated. In a
849 current matrix, 0 means that the row has been invalidated, i.e.
850 the row's contents do not agree with what is visible on the
851 screen. */
852 unsigned enabled_p : 1;
853
854 /* 1 means row displays a text line that is truncated on the left or
855 right side. */
856 unsigned truncated_on_left_p : 1;
857 unsigned truncated_on_right_p : 1;
858
859 /* 1 means that this row displays a continued line, i.e. it has a
860 continuation mark at the right side. */
861 unsigned continued_p : 1;
862
863 /* 0 means that this row does not contain any text, i.e. it is
864 a blank line at the window and buffer end. */
865 unsigned displays_text_p : 1;
866
867 /* 1 means that this line ends at ZV. */
868 unsigned ends_at_zv_p : 1;
869
870 /* 1 means the face of the last glyph in the text area is drawn to
871 the right end of the window. This flag is used in
872 update_text_area to optimize clearing to the end of the area. */
873 unsigned fill_line_p : 1;
874
875 /* Non-zero means display a bitmap on X frames indicating that this
876 line contains no text and ends in ZV. */
877 unsigned indicate_empty_line_p : 1;
878
879 /* 1 means this row contains glyphs that overlap each other because
880 of lbearing or rbearing. */
881 unsigned contains_overlapping_glyphs_p : 1;
882
883 /* 1 means this row is as wide as the window it is displayed in, including
884 scroll bars, fringes, and internal borders. This also
885 implies that the row doesn't have marginal areas. */
886 unsigned full_width_p : 1;
887
888 /* Non-zero means row is a mode or header-line. */
889 unsigned mode_line_p : 1;
890
891 /* 1 in a current row means this row is overlapped by another row. */
892 unsigned overlapped_p : 1;
893
894 /* 1 means this line ends in the middle of a character consisting
895 of more than one glyph. Some glyphs have been put in this row,
896 the rest are put in rows below this one. */
897 unsigned ends_in_middle_of_char_p : 1;
898
899 /* 1 means this line starts in the middle of a character consisting
900 of more than one glyph. Some glyphs have been put in the
901 previous row, the rest are put in this row. */
902 unsigned starts_in_middle_of_char_p : 1;
903
904 /* 1 in a current row means this row overlaps others. */
905 unsigned overlapping_p : 1;
906
907 /* 1 means some glyphs in this row are displayed in mouse-face. */
908 unsigned mouse_face_p : 1;
909
910 /* 1 means this row was ended by a newline from a string. */
911 unsigned ends_in_newline_from_string_p : 1;
912
913 /* 1 means this row width is exactly the width of the window, and the
914 final newline character is hidden in the right fringe. */
915 unsigned exact_window_width_line_p : 1;
916
917 /* 1 means this row currently shows the cursor in the right fringe. */
918 unsigned cursor_in_fringe_p : 1;
919
920 /* 1 means the last glyph in the row is part of an ellipsis. */
921 unsigned ends_in_ellipsis_p : 1;
922
923 /* Non-zero means display a bitmap on X frames indicating that this
924 the first line of the buffer. */
925 unsigned indicate_bob_p : 1;
926
927 /* Non-zero means display a bitmap on X frames indicating that this
928 the top line of the window, but not start of the buffer. */
929 unsigned indicate_top_line_p : 1;
930
931 /* Non-zero means display a bitmap on X frames indicating that this
932 the last line of the buffer. */
933 unsigned indicate_eob_p : 1;
934
935 /* Non-zero means display a bitmap on X frames indicating that this
936 the bottom line of the window, but not end of the buffer. */
937 unsigned indicate_bottom_line_p : 1;
938
939 /* Non-zero means the row was reversed to display text in a
940 right-to-left paragraph. */
941 unsigned reversed_p : 1;
942
943 /* Continuation lines width at the start of the row. */
944 int continuation_lines_width;
945
946 #ifdef HAVE_WINDOW_SYSTEM
947 /* Non-NULL means the current clipping area. This is temporarily
948 set while exposing a region. Coordinates are frame-relative. */
949 XRectangle *clip;
950 #endif
951 };
952
953
954 /* Get a pointer to row number ROW in matrix MATRIX. If GLYPH_DEBUG
955 is defined to a non-zero value, the function matrix_row checks that
956 we don't try to access rows that are out of bounds. */
957
958 #if GLYPH_DEBUG
959 struct glyph_row *matrix_row (struct glyph_matrix *, int);
960 #define MATRIX_ROW(MATRIX, ROW) matrix_row ((MATRIX), (ROW))
961 #else
962 #define MATRIX_ROW(MATRIX, ROW) ((MATRIX)->rows + (ROW))
963 #endif
964
965 /* Return a pointer to the row reserved for the mode line in MATRIX.
966 Row MATRIX->nrows - 1 is always reserved for the mode line. */
967
968 #define MATRIX_MODE_LINE_ROW(MATRIX) \
969 ((MATRIX)->rows + (MATRIX)->nrows - 1)
970
971 /* Return a pointer to the row reserved for the header line in MATRIX.
972 This is always the first row in MATRIX because that's the only
973 way that works in frame-based redisplay. */
974
975 #define MATRIX_HEADER_LINE_ROW(MATRIX) (MATRIX)->rows
976
977 /* Return a pointer to first row in MATRIX used for text display. */
978
979 #define MATRIX_FIRST_TEXT_ROW(MATRIX) \
980 ((MATRIX)->rows->mode_line_p ? (MATRIX)->rows + 1 : (MATRIX)->rows)
981
982 /* Return a pointer to the first glyph in the text area of a row.
983 MATRIX is the glyph matrix accessed, and ROW is the row index in
984 MATRIX. */
985
986 #define MATRIX_ROW_GLYPH_START(MATRIX, ROW) \
987 (MATRIX_ROW ((MATRIX), (ROW))->glyphs[TEXT_AREA])
988
989 /* Return the number of used glyphs in the text area of a row. */
990
991 #define MATRIX_ROW_USED(MATRIX, ROW) \
992 (MATRIX_ROW ((MATRIX), (ROW))->used[TEXT_AREA])
993
994 /* Return the character/ byte position at which the display of ROW
995 starts. BIDI Note: this is the smallest character/byte position
996 among characters in ROW, i.e. the first logical-order character
997 displayed by ROW, which is not necessarily the smallest horizontal
998 position. */
999
1000 #define MATRIX_ROW_START_CHARPOS(ROW) ((ROW)->minpos.charpos)
1001 #define MATRIX_ROW_START_BYTEPOS(ROW) ((ROW)->minpos.bytepos)
1002
1003 /* Return the character/ byte position at which ROW ends. BIDI Note:
1004 this is the largest character/byte position among characters in
1005 ROW, i.e. the last logical-order character displayed by ROW, which
1006 is not necessarily the largest horizontal position. */
1007
1008 #define MATRIX_ROW_END_CHARPOS(ROW) ((ROW)->maxpos.charpos)
1009 #define MATRIX_ROW_END_BYTEPOS(ROW) ((ROW)->maxpos.bytepos)
1010
1011 /* Return the vertical position of ROW in MATRIX. */
1012
1013 #define MATRIX_ROW_VPOS(ROW, MATRIX) ((ROW) - (MATRIX)->rows)
1014
1015 /* Return the last glyph row + 1 in MATRIX on window W reserved for
1016 text. If W has a mode line, the last row in the matrix is reserved
1017 for it. */
1018
1019 #define MATRIX_BOTTOM_TEXT_ROW(MATRIX, W) \
1020 ((MATRIX)->rows \
1021 + (MATRIX)->nrows \
1022 - (WINDOW_WANTS_MODELINE_P ((W)) ? 1 : 0))
1023
1024 /* Non-zero if the face of the last glyph in ROW's text area has
1025 to be drawn to the end of the text area. */
1026
1027 #define MATRIX_ROW_EXTENDS_FACE_P(ROW) ((ROW)->fill_line_p)
1028
1029 /* Set and query the enabled_p flag of glyph row ROW in MATRIX. */
1030
1031 #define SET_MATRIX_ROW_ENABLED_P(MATRIX, ROW, VALUE) \
1032 (MATRIX_ROW ((MATRIX), (ROW))->enabled_p = (VALUE) != 0)
1033
1034 #define MATRIX_ROW_ENABLED_P(MATRIX, ROW) \
1035 (MATRIX_ROW ((MATRIX), (ROW))->enabled_p)
1036
1037 /* Non-zero if ROW displays text. Value is non-zero if the row is
1038 blank but displays a line end. */
1039
1040 #define MATRIX_ROW_DISPLAYS_TEXT_P(ROW) ((ROW)->displays_text_p)
1041
1042
1043 /* Helper macros */
1044
1045 #define MR_PARTIALLY_VISIBLE(ROW) \
1046 ((ROW)->height != (ROW)->visible_height)
1047
1048 #define MR_PARTIALLY_VISIBLE_AT_TOP(W, ROW) \
1049 ((ROW)->y < WINDOW_HEADER_LINE_HEIGHT ((W)))
1050
1051 #define MR_PARTIALLY_VISIBLE_AT_BOTTOM(W, ROW) \
1052 (((ROW)->y + (ROW)->height - (ROW)->extra_line_spacing) \
1053 > WINDOW_BOX_HEIGHT_NO_MODE_LINE ((W)))
1054
1055 /* Non-zero if ROW is not completely visible in window W. */
1056
1057 #define MATRIX_ROW_PARTIALLY_VISIBLE_P(W, ROW) \
1058 (MR_PARTIALLY_VISIBLE ((ROW)) \
1059 && (MR_PARTIALLY_VISIBLE_AT_TOP ((W), (ROW)) \
1060 || MR_PARTIALLY_VISIBLE_AT_BOTTOM ((W), (ROW))))
1061
1062
1063
1064 /* Non-zero if ROW is partially visible at the top of window W. */
1065
1066 #define MATRIX_ROW_PARTIALLY_VISIBLE_AT_TOP_P(W, ROW) \
1067 (MR_PARTIALLY_VISIBLE ((ROW)) \
1068 && MR_PARTIALLY_VISIBLE_AT_TOP ((W), (ROW)))
1069
1070 /* Non-zero if ROW is partially visible at the bottom of window W. */
1071
1072 #define MATRIX_ROW_PARTIALLY_VISIBLE_AT_BOTTOM_P(W, ROW) \
1073 (MR_PARTIALLY_VISIBLE ((ROW)) \
1074 && MR_PARTIALLY_VISIBLE_AT_BOTTOM ((W), (ROW)))
1075
1076 /* Return the bottom Y + 1 of ROW. */
1077
1078 #define MATRIX_ROW_BOTTOM_Y(ROW) ((ROW)->y + (ROW)->height)
1079
1080 /* Is ROW the last visible one in the display described by the
1081 iterator structure pointed to by IT?. */
1082
1083 #define MATRIX_ROW_LAST_VISIBLE_P(ROW, IT) \
1084 (MATRIX_ROW_BOTTOM_Y ((ROW)) >= (IT)->last_visible_y)
1085
1086 /* Non-zero if ROW displays a continuation line. */
1087
1088 #define MATRIX_ROW_CONTINUATION_LINE_P(ROW) \
1089 ((ROW)->continuation_lines_width > 0)
1090
1091 /* Non-zero if ROW ends in the middle of a character. This is the
1092 case for continued lines showing only part of a display table entry
1093 or a control char, or an overlay string. */
1094
1095 #define MATRIX_ROW_ENDS_IN_MIDDLE_OF_CHAR_P(ROW) \
1096 ((ROW)->end.dpvec_index > 0 \
1097 || (ROW)->end.overlay_string_index >= 0 \
1098 || (ROW)->ends_in_middle_of_char_p)
1099
1100 /* Non-zero if ROW ends in the middle of an overlay string. */
1101
1102 #define MATRIX_ROW_ENDS_IN_OVERLAY_STRING_P(ROW) \
1103 ((ROW)->end.overlay_string_index >= 0)
1104
1105 /* Non-zero if ROW starts in the middle of a character. See above. */
1106
1107 #define MATRIX_ROW_STARTS_IN_MIDDLE_OF_CHAR_P(ROW) \
1108 ((ROW)->start.dpvec_index > 0 \
1109 || (ROW)->starts_in_middle_of_char_p \
1110 || ((ROW)->start.overlay_string_index >= 0 \
1111 && (ROW)->start.string_pos.charpos > 0))
1112
1113 /* Non-zero means ROW overlaps its predecessor. */
1114
1115 #define MATRIX_ROW_OVERLAPS_PRED_P(ROW) \
1116 ((ROW)->phys_ascent > (ROW)->ascent)
1117
1118 /* Non-zero means ROW overlaps its successor. */
1119
1120 #define MATRIX_ROW_OVERLAPS_SUCC_P(ROW) \
1121 ((ROW)->phys_height - (ROW)->phys_ascent \
1122 > (ROW)->height - (ROW)->ascent)
1123
1124 /* Non-zero means that fonts have been loaded since the last glyph
1125 matrix adjustments. The function redisplay_internal adjusts glyph
1126 matrices when this flag is non-zero. */
1127
1128 extern int fonts_changed_p;
1129
1130 /* A glyph for a space. */
1131
1132 extern struct glyph space_glyph;
1133
1134 /* Window being updated by update_window. This is non-null as long as
1135 update_window has not finished, and null otherwise. */
1136
1137 extern struct window *updated_window;
1138
1139 /* Glyph row and area updated by update_window_line. */
1140
1141 extern struct glyph_row *updated_row;
1142 extern int updated_area;
1143
1144 /* Non-zero means reading single-character input with prompt so put
1145 cursor on mini-buffer after the prompt. Positive means at end of
1146 text in echo area; negative means at beginning of line. */
1147
1148 extern int cursor_in_echo_area;
1149
1150 /* Non-zero means last display completed. Zero means it was
1151 preempted. */
1152
1153 extern int display_completed;
1154
1155 /* A temporary storage area, including a row of glyphs. Initialized
1156 in xdisp.c. Used for various purposes, as an example see
1157 get_overlay_arrow_glyph_row. */
1158
1159 extern struct glyph_row scratch_glyph_row;
1160
1161
1162 \f
1163 /************************************************************************
1164 Glyph Strings
1165 ************************************************************************/
1166
1167 /* Enumeration for overriding/changing the face to use for drawing
1168 glyphs in draw_glyphs. */
1169
1170 enum draw_glyphs_face
1171 {
1172 DRAW_NORMAL_TEXT,
1173 DRAW_INVERSE_VIDEO,
1174 DRAW_CURSOR,
1175 DRAW_MOUSE_FACE,
1176 DRAW_IMAGE_RAISED,
1177 DRAW_IMAGE_SUNKEN
1178 };
1179
1180 #ifdef HAVE_WINDOW_SYSTEM
1181
1182 /* A sequence of glyphs to be drawn in the same face. */
1183
1184 struct glyph_string
1185 {
1186 /* X-origin of the string. */
1187 int x;
1188
1189 /* Y-origin and y-position of the base line of this string. */
1190 int y, ybase;
1191
1192 /* The width of the string, not including a face extension. */
1193 int width;
1194
1195 /* The width of the string, including a face extension. */
1196 int background_width;
1197
1198 /* The height of this string. This is the height of the line this
1199 string is drawn in, and can be different from the height of the
1200 font the string is drawn in. */
1201 int height;
1202
1203 /* Number of pixels this string overwrites in front of its x-origin.
1204 This number is zero if the string has an lbearing >= 0; it is
1205 -lbearing, if the string has an lbearing < 0. */
1206 int left_overhang;
1207
1208 /* Number of pixels this string overwrites past its right-most
1209 nominal x-position, i.e. x + width. Zero if the string's
1210 rbearing is <= its nominal width, rbearing - width otherwise. */
1211 int right_overhang;
1212
1213 /* The frame on which the glyph string is drawn. */
1214 struct frame *f;
1215
1216 /* The window on which the glyph string is drawn. */
1217 struct window *w;
1218
1219 /* X display and window for convenience. */
1220 Display *display;
1221 Window window;
1222
1223 /* The glyph row for which this string was built. It determines the
1224 y-origin and height of the string. */
1225 struct glyph_row *row;
1226
1227 /* The area within row. */
1228 enum glyph_row_area area;
1229
1230 /* Characters to be drawn, and number of characters. */
1231 XChar2b *char2b;
1232 int nchars;
1233
1234 /* A face-override for drawing cursors, mouse face and similar. */
1235 enum draw_glyphs_face hl;
1236
1237 /* Face in which this string is to be drawn. */
1238 struct face *face;
1239
1240 /* Font in which this string is to be drawn. */
1241 struct font *font;
1242
1243 /* Non-null means this string describes (part of) a static
1244 composition. */
1245 struct composition *cmp;
1246
1247 /* If not negative, this string describes a compos. */
1248 int cmp_id;
1249
1250 /* Start and end glyph indices in a glyph-string. */
1251 int cmp_from, cmp_to;
1252
1253 /* 1 means this glyph strings face has to be drawn to the right end
1254 of the window's drawing area. */
1255 unsigned extends_to_end_of_line_p : 1;
1256
1257 /* 1 means the background of this string has been drawn. */
1258 unsigned background_filled_p : 1;
1259
1260 /* 1 means glyph string must be drawn with 16-bit functions. */
1261 unsigned two_byte_p : 1;
1262
1263 /* 1 means that the original font determined for drawing this glyph
1264 string could not be loaded. The member `font' has been set to
1265 the frame's default font in this case. */
1266 unsigned font_not_found_p : 1;
1267
1268 /* 1 means that the face in which this glyph string is drawn has a
1269 stipple pattern. */
1270 unsigned stippled_p : 1;
1271
1272 #define OVERLAPS_PRED (1 << 0)
1273 #define OVERLAPS_SUCC (1 << 1)
1274 #define OVERLAPS_BOTH (OVERLAPS_PRED | OVERLAPS_SUCC)
1275 #define OVERLAPS_ERASED_CURSOR (1 << 2)
1276 /* Non-zero means only the foreground of this glyph string must be
1277 drawn, and we should use the physical height of the line this
1278 glyph string appears in as clip rect. If the value is
1279 OVERLAPS_ERASED_CURSOR, the clip rect is restricted to the rect
1280 of the erased cursor. OVERLAPS_PRED and OVERLAPS_SUCC mean we
1281 draw overlaps with the preceding and the succeeding rows,
1282 respectively. */
1283 unsigned for_overlaps : 3;
1284
1285 /* 1 means that all glyphs in this glyph string has the flag
1286 padding_p set, and thus must be drawn one by one to have 1-pixel
1287 width even though the logical width in the font is zero. */
1288 unsigned padding_p : 1;
1289
1290 /* The GC to use for drawing this glyph string. */
1291 #if defined(HAVE_X_WINDOWS)
1292 GC gc;
1293 #endif
1294 #if defined(HAVE_NTGUI)
1295 XGCValues *gc;
1296 HDC hdc;
1297 #endif
1298
1299 /* A pointer to the first glyph in the string. This glyph
1300 corresponds to char2b[0]. Needed to draw rectangles if
1301 font_not_found_p is 1. */
1302 struct glyph *first_glyph;
1303
1304 /* Image, if any. */
1305 struct image *img;
1306
1307 /* Slice */
1308 struct glyph_slice slice;
1309
1310 /* Non-null means the horizontal clipping region starts from the
1311 left edge of *clip_head, and ends with the right edge of
1312 *clip_tail, not including their overhangs. */
1313 struct glyph_string *clip_head, *clip_tail;
1314
1315 /* The current clipping areas. */
1316 NativeRectangle clip[2];
1317
1318 /* Number of clipping areas. */
1319 int num_clips;
1320
1321 int underline_position;
1322
1323 int underline_thickness;
1324
1325 struct glyph_string *next, *prev;
1326 };
1327
1328 #endif /* HAVE_WINDOW_SYSTEM */
1329
1330 \f
1331 /************************************************************************
1332 Display Dimensions
1333 ************************************************************************/
1334
1335 /* Return the height of the mode line in glyph matrix MATRIX, or zero
1336 if not known. This macro is called under circumstances where
1337 MATRIX might not have been allocated yet. */
1338
1339 #define MATRIX_MODE_LINE_HEIGHT(MATRIX) \
1340 ((MATRIX) && (MATRIX)->rows \
1341 ? MATRIX_MODE_LINE_ROW (MATRIX)->height \
1342 : 0)
1343
1344 /* Return the height of the header line in glyph matrix MATRIX, or zero
1345 if not known. This macro is called under circumstances where
1346 MATRIX might not have been allocated yet. */
1347
1348 #define MATRIX_HEADER_LINE_HEIGHT(MATRIX) \
1349 ((MATRIX) && (MATRIX)->rows \
1350 ? MATRIX_HEADER_LINE_ROW (MATRIX)->height \
1351 : 0)
1352
1353 /* Return the desired face id for the mode line of a window, depending
1354 on whether the window is selected or not, or if the window is the
1355 scrolling window for the currently active minibuffer window.
1356
1357 Due to the way display_mode_lines manipulates with the contents of
1358 selected_window, this macro needs three arguments: SELW which is
1359 compared against the current value of selected_window, MBW which is
1360 compared against minibuf_window (if SELW doesn't match), and SCRW
1361 which is compared against minibuf_selected_window (if MBW matches). */
1362
1363 #define CURRENT_MODE_LINE_FACE_ID_3(SELW, MBW, SCRW) \
1364 ((!mode_line_in_non_selected_windows \
1365 || (SELW) == XWINDOW (selected_window) \
1366 || (minibuf_level > 0 \
1367 && !NILP (minibuf_selected_window) \
1368 && (MBW) == XWINDOW (minibuf_window) \
1369 && (SCRW) == XWINDOW (minibuf_selected_window))) \
1370 ? MODE_LINE_FACE_ID \
1371 : MODE_LINE_INACTIVE_FACE_ID)
1372
1373
1374 /* Return the desired face id for the mode line of window W. */
1375
1376 #define CURRENT_MODE_LINE_FACE_ID(W) \
1377 (CURRENT_MODE_LINE_FACE_ID_3((W), XWINDOW (selected_window), (W)))
1378
1379 /* Return the current height of the mode line of window W. If not
1380 known from current_mode_line_height, look at W's current glyph
1381 matrix, or return a default based on the height of the font of the
1382 face `mode-line'. */
1383
1384 #define CURRENT_MODE_LINE_HEIGHT(W) \
1385 (current_mode_line_height >= 0 \
1386 ? current_mode_line_height \
1387 : (MATRIX_MODE_LINE_HEIGHT ((W)->current_matrix) \
1388 ? MATRIX_MODE_LINE_HEIGHT ((W)->current_matrix) \
1389 : estimate_mode_line_height (XFRAME ((W)->frame), \
1390 CURRENT_MODE_LINE_FACE_ID (W))))
1391
1392 /* Return the current height of the header line of window W. If not
1393 known from current_header_line_height, look at W's current glyph
1394 matrix, or return an estimation based on the height of the font of
1395 the face `header-line'. */
1396
1397 #define CURRENT_HEADER_LINE_HEIGHT(W) \
1398 (current_header_line_height >= 0 \
1399 ? current_header_line_height \
1400 : (MATRIX_HEADER_LINE_HEIGHT ((W)->current_matrix) \
1401 ? MATRIX_HEADER_LINE_HEIGHT ((W)->current_matrix) \
1402 : estimate_mode_line_height (XFRAME ((W)->frame), \
1403 HEADER_LINE_FACE_ID)))
1404
1405 /* Return the height of the desired mode line of window W. */
1406
1407 #define DESIRED_MODE_LINE_HEIGHT(W) \
1408 MATRIX_MODE_LINE_HEIGHT ((W)->desired_matrix)
1409
1410 /* Return the height of the desired header line of window W. */
1411
1412 #define DESIRED_HEADER_LINE_HEIGHT(W) \
1413 MATRIX_HEADER_LINE_HEIGHT ((W)->desired_matrix)
1414
1415 /* Value is non-zero if window W wants a mode line. */
1416
1417 #define WINDOW_WANTS_MODELINE_P(W) \
1418 (!MINI_WINDOW_P ((W)) \
1419 && !(W)->pseudo_window_p \
1420 && FRAME_WANTS_MODELINE_P (XFRAME (WINDOW_FRAME ((W)))) \
1421 && BUFFERP ((W)->buffer) \
1422 && !NILP (XBUFFER ((W)->buffer)->mode_line_format) \
1423 && WINDOW_TOTAL_LINES (W) > 1)
1424
1425 /* Value is non-zero if window W wants a header line. */
1426
1427 #define WINDOW_WANTS_HEADER_LINE_P(W) \
1428 (!MINI_WINDOW_P ((W)) \
1429 && !(W)->pseudo_window_p \
1430 && FRAME_WANTS_MODELINE_P (XFRAME (WINDOW_FRAME ((W)))) \
1431 && BUFFERP ((W)->buffer) \
1432 && !NILP (XBUFFER ((W)->buffer)->header_line_format) \
1433 && WINDOW_TOTAL_LINES (W) > 1 + !NILP (XBUFFER ((W)->buffer)->mode_line_format))
1434
1435
1436 /* Return proper value to be used as baseline offset of font that has
1437 ASCENT and DESCENT to draw characters by the font at the vertical
1438 center of the line of frame F.
1439
1440 Here, our task is to find the value of BOFF in the following figure;
1441
1442 -------------------------+-----------+-
1443 -+-+---------+-+ | |
1444 | | | | | |
1445 | | | | F_ASCENT F_HEIGHT
1446 | | | ASCENT | |
1447 HEIGHT | | | | |
1448 | | |-|-+------+-----------|------- baseline
1449 | | | | BOFF | |
1450 | |---------|-+-+ | |
1451 | | | DESCENT | |
1452 -+-+---------+-+ F_DESCENT |
1453 -------------------------+-----------+-
1454
1455 -BOFF + DESCENT + (F_HEIGHT - HEIGHT) / 2 = F_DESCENT
1456 BOFF = DESCENT + (F_HEIGHT - HEIGHT) / 2 - F_DESCENT
1457 DESCENT = FONT->descent
1458 HEIGHT = FONT_HEIGHT (FONT)
1459 F_DESCENT = (FRAME_FONT (F)->descent
1460 - F->terminal->output_data.x->baseline_offset)
1461 F_HEIGHT = FRAME_LINE_HEIGHT (F)
1462 */
1463
1464 #define VCENTER_BASELINE_OFFSET(FONT, F) \
1465 (FONT_DESCENT (FONT) \
1466 + (FRAME_LINE_HEIGHT ((F)) - FONT_HEIGHT ((FONT)) \
1467 + (FRAME_LINE_HEIGHT ((F)) > FONT_HEIGHT ((FONT)))) / 2 \
1468 - (FONT_DESCENT (FRAME_FONT (F)) - FRAME_BASELINE_OFFSET (F)))
1469
1470 \f
1471 /***********************************************************************
1472 Faces
1473 ***********************************************************************/
1474
1475 /* Indices of face attributes in Lisp face vectors. Slot zero is the
1476 symbol `face'. */
1477
1478 enum lface_attribute_index
1479 {
1480 LFACE_FAMILY_INDEX = 1,
1481 LFACE_FOUNDRY_INDEX,
1482 LFACE_SWIDTH_INDEX,
1483 LFACE_HEIGHT_INDEX,
1484 LFACE_WEIGHT_INDEX,
1485 LFACE_SLANT_INDEX,
1486 LFACE_UNDERLINE_INDEX,
1487 LFACE_INVERSE_INDEX,
1488 LFACE_FOREGROUND_INDEX,
1489 LFACE_BACKGROUND_INDEX,
1490 LFACE_STIPPLE_INDEX,
1491 LFACE_OVERLINE_INDEX,
1492 LFACE_STRIKE_THROUGH_INDEX,
1493 LFACE_BOX_INDEX,
1494 LFACE_FONT_INDEX,
1495 LFACE_INHERIT_INDEX,
1496 LFACE_FONTSET_INDEX,
1497 LFACE_VECTOR_SIZE
1498 };
1499
1500
1501 /* Box types of faces. */
1502
1503 enum face_box_type
1504 {
1505 /* No box around text. */
1506 FACE_NO_BOX,
1507
1508 /* Simple box of specified width and color. Default width is 1, and
1509 default color is the foreground color of the face. */
1510 FACE_SIMPLE_BOX,
1511
1512 /* Boxes with 3D shadows. Color equals the background color of the
1513 face. Width is specified. */
1514 FACE_RAISED_BOX,
1515 FACE_SUNKEN_BOX
1516 };
1517
1518
1519 /* Structure describing a realized face.
1520
1521 For each Lisp face, 0..N realized faces can exist for different
1522 frames and different charsets. Realized faces are built from Lisp
1523 faces and text properties/overlays by merging faces and adding
1524 unspecified attributes from the `default' face. */
1525
1526 struct face
1527 {
1528 /* The id of this face. The id equals the index of this face in the
1529 vector faces_by_id of its face cache. */
1530 int id;
1531
1532 #ifdef HAVE_WINDOW_SYSTEM
1533
1534 /* If non-zero, this is a GC that we can use without modification for
1535 drawing the characters in this face. */
1536 GC gc;
1537
1538 /* Background stipple or bitmap used for this face. This is
1539 an id as returned from load_pixmap. */
1540 int stipple;
1541
1542 #else /* not HAVE_WINDOW_SYSTEM */
1543
1544 /* Dummy. */
1545 int stipple;
1546
1547 #endif /* not HAVE_WINDOW_SYSTEM */
1548
1549 /* Pixel value of foreground color for X frames. Color index
1550 for tty frames. */
1551 unsigned long foreground;
1552
1553 /* Pixel value or color index of background color. */
1554 unsigned long background;
1555
1556 /* Pixel value or color index of underline color. */
1557 unsigned long underline_color;
1558
1559 /* Pixel value or color index of overlined, strike-through, or box
1560 color. */
1561 unsigned long overline_color;
1562 unsigned long strike_through_color;
1563 unsigned long box_color;
1564
1565 struct font *font;
1566
1567 /* Fontset ID if for this face's fontset. Non-ASCII faces derived
1568 from the same ASCII face have the same fontset. */
1569 int fontset;
1570
1571 /* Pixmap width and height. */
1572 unsigned int pixmap_w, pixmap_h;
1573
1574 /* Non-zero means characters in this face have a box that thickness
1575 around them. If it is negative, the absolute value indicates the
1576 thickness, and the horizontal lines of box (top and bottom) are
1577 drawn inside of characters glyph area. The vertical lines of box
1578 (left and right) are drawn as the same way as the case that this
1579 value is positive. */
1580 int box_line_width;
1581
1582 /* Type of box drawn. A value of FACE_NO_BOX means no box is drawn
1583 around text in this face. A value of FACE_SIMPLE_BOX means a box
1584 of width box_line_width is drawn in color box_color. A value of
1585 FACE_RAISED_BOX or FACE_SUNKEN_BOX means a 3D box is drawn with
1586 shadow colors derived from the background color of the face. */
1587 enum face_box_type box;
1588
1589 /* If `box' above specifies a 3D type, 1 means use box_color for
1590 drawing shadows. */
1591 unsigned use_box_color_for_shadows_p : 1;
1592
1593 /* Non-zero if text in this face should be underlined, overlined,
1594 strike-through or have a box drawn around it. */
1595 unsigned underline_p : 1;
1596 unsigned overline_p : 1;
1597 unsigned strike_through_p : 1;
1598
1599 /* 1 means that the colors specified for this face could not be
1600 loaded, and were replaced by default colors, so they shouldn't be
1601 freed. */
1602 unsigned foreground_defaulted_p : 1;
1603 unsigned background_defaulted_p : 1;
1604
1605 /* 1 means that either no color is specified for underlining or that
1606 the specified color couldn't be loaded. Use the foreground
1607 color when drawing in that case. */
1608 unsigned underline_defaulted_p : 1;
1609
1610 /* 1 means that either no color is specified for the corresponding
1611 attribute or that the specified color couldn't be loaded.
1612 Use the foreground color when drawing in that case. */
1613 unsigned overline_color_defaulted_p : 1;
1614 unsigned strike_through_color_defaulted_p : 1;
1615 unsigned box_color_defaulted_p : 1;
1616
1617 /* TTY appearances. Blinking is not yet implemented. Colors are
1618 found in `lface' with empty color string meaning the default
1619 color of the TTY. */
1620 unsigned tty_bold_p : 1;
1621 unsigned tty_dim_p : 1;
1622 unsigned tty_underline_p : 1;
1623 unsigned tty_alt_charset_p : 1;
1624 unsigned tty_reverse_p : 1;
1625 unsigned tty_blinking_p : 1;
1626
1627 /* 1 means that colors of this face may not be freed because they
1628 have been copied bitwise from a base face (see
1629 realize_x_face). */
1630 unsigned colors_copied_bitwise_p : 1;
1631
1632 /* If non-zero, use overstrike (to simulate bold-face). */
1633 unsigned overstrike : 1;
1634
1635 /* NOTE: this is not used yet, but eventually this impl should be done
1636 similarly to overstrike */
1637 #ifdef HAVE_NS
1638 /* If non-zero, use geometric rotation (to simulate italic). */
1639 unsigned synth_ital : 1;
1640 #endif
1641
1642 /* The Lisp face attributes this face realizes. All attributes
1643 in this vector are non-nil. */
1644 Lisp_Object lface[LFACE_VECTOR_SIZE];
1645
1646 /* The hash value of this face. */
1647 unsigned hash;
1648
1649 /* Next and previous face in hash collision list of face cache. */
1650 struct face *next, *prev;
1651
1652 /* If this face is an ASCII face, this points to this face itself.
1653 Otherwise, this points to an ASCII face that has the same
1654 attributes except the font. */
1655 struct face *ascii_face;
1656
1657 /* Extra member that a font-driver uses privately. */
1658 void *extra;
1659 };
1660
1661
1662 /* Color index indicating that face uses a terminal's default color. */
1663
1664 #define FACE_TTY_DEFAULT_COLOR ((unsigned long) -1)
1665
1666 /* Color index indicating that face uses an unknown foreground color. */
1667
1668 #define FACE_TTY_DEFAULT_FG_COLOR ((unsigned long) -2)
1669
1670 /* Color index indicating that face uses an unknown background color. */
1671
1672 #define FACE_TTY_DEFAULT_BG_COLOR ((unsigned long) -3)
1673
1674 /* Non-zero if FACE was realized for unibyte use. */
1675
1676 #define FACE_UNIBYTE_P(FACE) ((FACE)->charset < 0)
1677
1678
1679 /* IDs of important faces known by the C face code. These are the IDs
1680 of the faces for CHARSET_ASCII. */
1681
1682 enum face_id
1683 {
1684 DEFAULT_FACE_ID,
1685 MODE_LINE_FACE_ID,
1686 MODE_LINE_INACTIVE_FACE_ID,
1687 TOOL_BAR_FACE_ID,
1688 FRINGE_FACE_ID,
1689 HEADER_LINE_FACE_ID,
1690 SCROLL_BAR_FACE_ID,
1691 BORDER_FACE_ID,
1692 CURSOR_FACE_ID,
1693 MOUSE_FACE_ID,
1694 MENU_FACE_ID,
1695 VERTICAL_BORDER_FACE_ID,
1696 BASIC_FACE_ID_SENTINEL
1697 };
1698
1699 #define MAX_FACE_ID ((1 << FACE_ID_BITS) - 1)
1700
1701 /* A cache of realized faces. Each frame has its own cache because
1702 Emacs allows different frame-local face definitions. */
1703
1704 struct face_cache
1705 {
1706 /* Hash table of cached realized faces. */
1707 struct face **buckets;
1708
1709 /* Back-pointer to the frame this cache belongs to. */
1710 struct frame *f;
1711
1712 /* A vector of faces so that faces can be referenced by an ID. */
1713 struct face **faces_by_id;
1714
1715 /* The allocated size, and number of used slots of faces_by_id. */
1716 int size, used;
1717
1718 /* Flag indicating that attributes of the `menu' face have been
1719 changed. */
1720 unsigned menu_face_changed_p : 1;
1721 };
1722
1723
1724 /* Prepare face FACE for use on frame F. This must be called before
1725 using X resources of FACE. */
1726
1727 #define PREPARE_FACE_FOR_DISPLAY(F, FACE) \
1728 if ((FACE)->gc == 0) \
1729 prepare_face_for_display ((F), (FACE)); \
1730 else \
1731 (void) 0
1732
1733 /* Return a pointer to the face with ID on frame F, or null if such a
1734 face doesn't exist. */
1735
1736 #define FACE_FROM_ID(F, ID) \
1737 (((unsigned) (ID) < FRAME_FACE_CACHE (F)->used) \
1738 ? FRAME_FACE_CACHE (F)->faces_by_id[ID] \
1739 : NULL)
1740
1741 #ifdef HAVE_WINDOW_SYSTEM
1742
1743 /* Non-zero if FACE is suitable for displaying character CHAR. */
1744
1745 #define FACE_SUITABLE_FOR_CHAR_P(FACE, CHAR) \
1746 (ASCII_CHAR_P (CHAR) \
1747 ? (FACE) == (FACE)->ascii_face \
1748 : face_suitable_for_char_p ((FACE), (CHAR)))
1749
1750 /* Return the id of the realized face on frame F that is like the face
1751 with id ID but is suitable for displaying character CHAR.
1752 This macro is only meaningful for multibyte character CHAR. */
1753
1754 #define FACE_FOR_CHAR(F, FACE, CHAR, POS, OBJECT) \
1755 ((ASCII_CHAR_P (CHAR) || CHAR_BYTE8_P (CHAR)) \
1756 ? (FACE)->ascii_face->id \
1757 : face_for_char ((F), (FACE), (CHAR), (POS), (OBJECT)))
1758
1759 #else /* not HAVE_WINDOW_SYSTEM */
1760
1761 #define FACE_SUITABLE_FOR_CHAR_P(FACE, CHAR) 1
1762 #define FACE_FOR_CHAR(F, FACE, CHAR, POS, OBJECT) ((FACE)->id)
1763
1764 #endif /* not HAVE_WINDOW_SYSTEM */
1765
1766 /* Non-zero means face attributes have been changed since the last
1767 redisplay. Used in redisplay_internal. */
1768
1769 extern int face_change_count;
1770
1771 /* For reordering of bidirectional text. */
1772 #define BIDI_MAXLEVEL 64
1773
1774 /* Data type for describing the bidirectional character types. The
1775 first 7 must be at the beginning, because they are the only values
1776 valid in the `bidi_type' member of `struct glyph'; we only reserve
1777 3 bits for it, so we cannot use there values larger than 7. */
1778 typedef enum {
1779 UNKNOWN_BT = 0,
1780 STRONG_L, /* strong left-to-right */
1781 STRONG_R, /* strong right-to-left */
1782 WEAK_EN, /* european number */
1783 WEAK_AN, /* arabic number */
1784 WEAK_BN, /* boundary neutral */
1785 NEUTRAL_B, /* paragraph separator */
1786 STRONG_AL, /* arabic right-to-left letter */
1787 LRE, /* left-to-right embedding */
1788 LRO, /* left-to-right override */
1789 RLE, /* right-to-left embedding */
1790 RLO, /* right-to-left override */
1791 PDF, /* pop directional format */
1792 WEAK_ES, /* european number separator */
1793 WEAK_ET, /* european number terminator */
1794 WEAK_CS, /* common separator */
1795 WEAK_NSM, /* non-spacing mark */
1796 NEUTRAL_S, /* segment separator */
1797 NEUTRAL_WS, /* whitespace */
1798 NEUTRAL_ON /* other neutrals */
1799 } bidi_type_t;
1800
1801 /* The basic directionality data type. */
1802 typedef enum { NEUTRAL_DIR, L2R, R2L } bidi_dir_t;
1803
1804 /* Data type for storing information about characters we need to
1805 remember. */
1806 struct bidi_saved_info {
1807 EMACS_INT bytepos, charpos; /* character's buffer position */
1808 bidi_type_t type; /* character's resolved bidi type */
1809 bidi_type_t type_after_w1; /* original type of the character, after W1 */
1810 bidi_type_t orig_type; /* type as we found it in the buffer */
1811 };
1812
1813 /* Data type for keeping track of saved embedding levels and override
1814 status information. */
1815 struct bidi_stack {
1816 int level;
1817 bidi_dir_t override;
1818 };
1819
1820 /* Data type for iterating over bidi text. */
1821 struct bidi_it {
1822 EMACS_INT bytepos; /* iterator's position in buffer */
1823 EMACS_INT charpos;
1824 int ch; /* character itself */
1825 int ch_len; /* length of its multibyte sequence */
1826 bidi_type_t type; /* bidi type of this character, after
1827 resolving weak and neutral types */
1828 bidi_type_t type_after_w1; /* original type, after overrides and W1 */
1829 bidi_type_t orig_type; /* original type, as found in the buffer */
1830 int resolved_level; /* final resolved level of this character */
1831 int invalid_levels; /* how many PDFs to ignore */
1832 int invalid_rl_levels; /* how many PDFs from RLE/RLO to ignore */
1833 int prev_was_pdf; /* if non-zero, previous char was PDF */
1834 struct bidi_saved_info prev; /* info about previous character */
1835 struct bidi_saved_info last_strong; /* last-seen strong directional char */
1836 struct bidi_saved_info next_for_neutral; /* surrounding characters for... */
1837 struct bidi_saved_info prev_for_neutral; /* ...resolving neutrals */
1838 struct bidi_saved_info next_for_ws; /* character after sequence of ws */
1839 EMACS_INT next_en_pos; /* position of next EN char for ET */
1840 EMACS_INT ignore_bn_limit; /* position until which to ignore BNs */
1841 bidi_dir_t sor; /* direction of start-of-run in effect */
1842 int scan_dir; /* direction of text scan, 1: forw, -1: back */
1843 int stack_idx; /* index of current data on the stack */
1844 /* Note: Everything from here on is not copied/saved when the bidi
1845 iterator state is saved, pushed, or popped. So only put here
1846 stuff that is not part of the bidi iterator's state! */
1847 struct bidi_stack level_stack[BIDI_MAXLEVEL]; /* stack of embedding levels */
1848 int first_elt; /* if non-zero, examine current char first */
1849 bidi_dir_t paragraph_dir; /* current paragraph direction */
1850 int new_paragraph; /* if non-zero, we expect a new paragraph */
1851 EMACS_INT separator_limit; /* where paragraph separator should end */
1852 };
1853
1854 /* Value is non-zero when the bidi iterator is at base paragraph
1855 embedding level. */
1856 #define BIDI_AT_BASE_LEVEL(BIDI_IT) \
1857 ((BIDI_IT).resolved_level == (BIDI_IT).level_stack[0].level)
1858
1859 \f
1860 /***********************************************************************
1861 Fringes
1862 ***********************************************************************/
1863
1864 /* Structure used to describe where and how to draw a fringe bitmap.
1865 WHICH is the fringe bitmap to draw. WD and H is the (adjusted)
1866 width and height of the bitmap, DH is the height adjustment (if
1867 bitmap is periodic). X and Y are frame coordinates of the area to
1868 display the bitmap, DY is relative offset of the bitmap into that
1869 area. BX, NX, BY, NY specifies the area to clear if the bitmap
1870 does not fill the entire area. FACE is the fringe face. */
1871
1872 struct draw_fringe_bitmap_params
1873 {
1874 int which; /* enum fringe_bitmap_type */
1875 unsigned short *bits;
1876 int wd, h, dh;
1877 int x, y;
1878 int bx, nx, by, ny;
1879 unsigned cursor_p : 1;
1880 unsigned overlay_p : 1;
1881 struct face *face;
1882 };
1883
1884 #define MAX_FRINGE_BITMAPS (1<<FRINGE_ID_BITS)
1885
1886 \f
1887 /***********************************************************************
1888 Display Iterator
1889 ***********************************************************************/
1890
1891 /* Iteration over things to display in current_buffer or in a string.
1892
1893 The iterator handles:
1894
1895 1. Overlay strings (after-string, before-string).
1896 2. Face properties.
1897 3. Invisible text properties.
1898 4. Selective display.
1899 5. Translation of characters via display tables.
1900 6. Translation of control characters to the forms `\003' or `^C'.
1901 7. `glyph' and `space-width' properties.
1902
1903 Iterators are initialized by calling init_iterator or one of the
1904 equivalent functions below. A call to get_next_display_element
1905 loads the iterator structure with information about what next to
1906 display. A call to set_iterator_to_next increments the iterator's
1907 position.
1908
1909 Characters from overlay strings, display table entries or control
1910 character translations are returned one at a time. For example, if
1911 we have a text of `a\x01' where `a' has a display table definition
1912 of `cd' and the control character is displayed with a leading
1913 arrow, then the iterator will return:
1914
1915 Call Return Source Call next
1916 -----------------------------------------------------------------
1917 next c display table move
1918 next d display table move
1919 next ^ control char move
1920 next A control char move
1921
1922 The same mechanism is also used to return characters for ellipses
1923 displayed at the end of invisible text.
1924
1925 CAVEAT: Under some circumstances, move_.* functions can be called
1926 asynchronously, e.g. when computing a buffer position from an x and
1927 y pixel position. This means that these functions and functions
1928 called from them SHOULD NOT USE xmalloc and alike. See also the
1929 comment at the start of xdisp.c. */
1930
1931 /* Enumeration describing what kind of display element an iterator is
1932 loaded with after a call to get_next_display_element. */
1933
1934 enum display_element_type
1935 {
1936 /* A normal character. */
1937 IT_CHARACTER,
1938
1939 /* A composition (static and automatic). */
1940 IT_COMPOSITION,
1941
1942 /* A glyphless character (e.g. ZWNJ, LRE). */
1943 IT_GLYPHLESS,
1944
1945 /* An image. */
1946 IT_IMAGE,
1947
1948 /* A flexible width and height space. */
1949 IT_STRETCH,
1950
1951 /* End of buffer or string. */
1952 IT_EOB,
1953
1954 /* Truncation glyphs. Never returned by get_next_display_element.
1955 Used to get display information about truncation glyphs via
1956 produce_glyphs. */
1957 IT_TRUNCATION,
1958
1959 /* Continuation glyphs. See the comment for IT_TRUNCATION. */
1960 IT_CONTINUATION
1961 };
1962
1963
1964 /* An enumerator for each text property that has a meaning for display
1965 purposes. */
1966
1967 enum prop_idx
1968 {
1969 FONTIFIED_PROP_IDX,
1970 FACE_PROP_IDX,
1971 INVISIBLE_PROP_IDX,
1972 DISPLAY_PROP_IDX,
1973 COMPOSITION_PROP_IDX,
1974
1975 /* Not a property. Used to indicate changes in overlays. */
1976 OVERLAY_PROP_IDX,
1977
1978 /* Sentinel. */
1979 LAST_PROP_IDX
1980 };
1981
1982 /* An enumerator for the method of wrapping long lines. */
1983
1984 enum line_wrap_method
1985 {
1986 TRUNCATE,
1987 WORD_WRAP,
1988 WINDOW_WRAP
1989 };
1990
1991 /* An enumerator for the method of displaying glyphless characters. */
1992
1993 enum glyphless_display_method
1994 {
1995 /* Display a thin (1-pixel width) space. */
1996 GLYPHLESS_DISPLAY_THIN_SPACE,
1997 /* Display an empty box of proper width. */
1998 GLYPHLESS_DISPLAY_EMPTY_BOX,
1999 /* Display an acronym string in a box. */
2000 GLYPHLESS_DISPLAY_ACRONYM,
2001 /* Display a hexadecimal character code in a box. */
2002 GLYPHLESS_DISPLAY_HEXA_CODE
2003 };
2004
2005 struct it_slice
2006 {
2007 Lisp_Object x;
2008 Lisp_Object y;
2009 Lisp_Object width;
2010 Lisp_Object height;
2011 };
2012
2013 /* Input sources for fetching characters or data to display.
2014 The input source is found in the `method' field. */
2015
2016 enum it_method {
2017 GET_FROM_BUFFER = 0,
2018 GET_FROM_DISPLAY_VECTOR,
2019 GET_FROM_STRING,
2020 GET_FROM_C_STRING,
2021 GET_FROM_IMAGE,
2022 GET_FROM_STRETCH,
2023 NUM_IT_METHODS
2024 };
2025
2026 /* FIXME: What is this? Why 5? */
2027 #define IT_STACK_SIZE 5
2028
2029 /* Iterator for composition (both for static and automatic). */
2030 struct composition_it
2031 {
2032 /* Next position at which to check the composition. */
2033 EMACS_INT stop_pos;
2034 /* ID number of the composition or glyph-string. If negative, we
2035 are not iterating over a composition now. */
2036 int id;
2037 /* If non-negative, character that triggers the automatic
2038 composition at `stop_pos', and this is an automatic composition.
2039 If negative, this is a static composition. This is set to -2
2040 temporarily if searching of composition reach a limit or a
2041 newline. */
2042 int ch;
2043 /* If this is an automatic composition, index of a rule for making
2044 the automatic composition. Provided that ELT is an element of
2045 Vcomposition_function_table for CH, (nth ELT RULE_IDX) is the
2046 rule for the composition. */
2047 int rule_idx;
2048 /* If this is an automatic composition, how many characters to look
2049 back from the position where a character triggering the
2050 composition exists. */
2051 int lookback;
2052 /* If non-negative, number of glyphs of the glyph-string. */
2053 int nglyphs;
2054 /* Nonzero iff the composition is created while buffer is scanned in
2055 reverse order, and thus the grapheme clusters must be rendered
2056 from the last to the first. */
2057 int reversed_p;
2058
2059 /** The following members contain information about the current
2060 grapheme cluster. */
2061 /* Position of the first character of the current grapheme cluster. */
2062 EMACS_INT charpos;
2063 /* Number of characters and bytes of the current grapheme cluster. */
2064 int nchars, nbytes;
2065 /* Indices of the glyphs for the current grapheme cluster. */
2066 int from, to;
2067 /* Width of the current grapheme cluster in units of pixels on a
2068 graphic display and in units of canonical characters on a
2069 terminal display. */
2070 int width;
2071 };
2072
2073 struct it
2074 {
2075 /* The window in which we iterate over current_buffer (or a string). */
2076 Lisp_Object window;
2077 struct window *w;
2078
2079 /* The window's frame. */
2080 struct frame *f;
2081
2082 /* Method to use to load this structure with the next display element. */
2083 enum it_method method;
2084
2085 /* The next position at which to check for face changes, invisible
2086 text, overlay strings, end of text etc., which see. */
2087 EMACS_INT stop_charpos;
2088
2089 /* Previous stop position, i.e. the last one before the current
2090 iterator position in `current'. */
2091 EMACS_INT prev_stop;
2092
2093 /* Last stop position iterated across whose bidi embedding level is
2094 equal to the current paragraph's base embedding level. */
2095 EMACS_INT base_level_stop;
2096
2097 /* Maximum string or buffer position + 1. ZV when iterating over
2098 current_buffer. */
2099 EMACS_INT end_charpos;
2100
2101 /* C string to iterate over. Non-null means get characters from
2102 this string, otherwise characters are read from current_buffer
2103 or it->string. */
2104 const unsigned char *s;
2105
2106 /* Number of characters in the string (s, or it->string) we iterate
2107 over. */
2108 EMACS_INT string_nchars;
2109
2110 /* Start and end of a visible region; -1 if the region is not
2111 visible in the window. */
2112 EMACS_INT region_beg_charpos, region_end_charpos;
2113
2114 /* Position at which redisplay end trigger functions should be run. */
2115 EMACS_INT redisplay_end_trigger_charpos;
2116
2117 /* 1 means multibyte characters are enabled. */
2118 unsigned multibyte_p : 1;
2119
2120 /* 1 means window has a mode line at its top. */
2121 unsigned header_line_p : 1;
2122
2123 /* 1 means `string' is the value of a `display' property.
2124 Don't handle some `display' properties in these strings. */
2125 unsigned string_from_display_prop_p : 1;
2126
2127 /* When METHOD == next_element_from_display_vector,
2128 this is 1 if we're doing an ellipsis. Otherwise meaningless. */
2129 unsigned ellipsis_p : 1;
2130
2131 /* True means cursor shouldn't be displayed here. */
2132 unsigned avoid_cursor_p : 1;
2133
2134 /* Display table in effect or null for none. */
2135 struct Lisp_Char_Table *dp;
2136
2137 /* Current display table vector to return characters from and its
2138 end. dpvec null means we are not returning characters from a
2139 display table entry; current.dpvec_index gives the current index
2140 into dpvec. This same mechanism is also used to return
2141 characters from translated control characters, i.e. `\003' or
2142 `^C'. */
2143 Lisp_Object *dpvec, *dpend;
2144
2145 /* Length in bytes of the char that filled dpvec. A value of zero
2146 means that no such character is involved. */
2147 int dpvec_char_len;
2148
2149 /* Face id to use for all characters in display vector. -1 if unused. */
2150 int dpvec_face_id;
2151
2152 /* Face id of the iterator saved in case a glyph from dpvec contains
2153 a face. The face is restored when all glyphs from dpvec have
2154 been delivered. */
2155 int saved_face_id;
2156
2157 /* Vector of glyphs for control character translation. The pointer
2158 dpvec is set to ctl_chars when a control character is translated.
2159 This vector is also used for incomplete multibyte character
2160 translation (e.g \222\244). Such a character is at most 4 bytes,
2161 thus we need at most 16 bytes here. */
2162 Lisp_Object ctl_chars[16];
2163
2164 /* Initial buffer or string position of the iterator, before skipping
2165 over display properties and invisible text. */
2166 struct display_pos start;
2167
2168 /* Current buffer or string position of the iterator, including
2169 position in overlay strings etc. */
2170 struct display_pos current;
2171
2172 /* Total number of overlay strings to process. This can be >
2173 OVERLAY_STRING_CHUNK_SIZE. */
2174 int n_overlay_strings;
2175
2176 /* Vector of overlays to process. Overlay strings are processed
2177 OVERLAY_STRING_CHUNK_SIZE at a time. */
2178 #define OVERLAY_STRING_CHUNK_SIZE 16
2179 Lisp_Object overlay_strings[OVERLAY_STRING_CHUNK_SIZE];
2180
2181 /* For each overlay string, the overlay it came from. */
2182 Lisp_Object string_overlays[OVERLAY_STRING_CHUNK_SIZE];
2183
2184 /* If non-nil, a Lisp string being processed. If
2185 current.overlay_string_index >= 0, this is an overlay string from
2186 pos. */
2187 Lisp_Object string;
2188
2189 /* If non-nil, we are processing a string that came
2190 from a `display' property given by an overlay. */
2191 Lisp_Object from_overlay;
2192
2193 /* Stack of saved values. New entries are pushed when we begin to
2194 process an overlay string or a string from a `glyph' property.
2195 Entries are popped when we return to deliver display elements
2196 from what we previously had. */
2197 struct iterator_stack_entry
2198 {
2199 Lisp_Object string;
2200 int string_nchars;
2201 EMACS_INT end_charpos;
2202 EMACS_INT stop_charpos;
2203 EMACS_INT prev_stop;
2204 EMACS_INT base_level_stop;
2205 struct composition_it cmp_it;
2206 int face_id;
2207
2208 /* Save values specific to a given method. */
2209 union {
2210 /* method == GET_FROM_IMAGE */
2211 struct {
2212 Lisp_Object object;
2213 struct it_slice slice;
2214 int image_id;
2215 } image;
2216 /* method == GET_FROM_COMPOSITION */
2217 struct {
2218 Lisp_Object object;
2219 } comp;
2220 /* method == GET_FROM_STRETCH */
2221 struct {
2222 Lisp_Object object;
2223 } stretch;
2224 } u;
2225
2226 /* current text and display positions. */
2227 struct text_pos position;
2228 struct display_pos current;
2229 Lisp_Object from_overlay;
2230 enum glyph_row_area area;
2231 enum it_method method;
2232 unsigned multibyte_p : 1;
2233 unsigned string_from_display_prop_p : 1;
2234 unsigned display_ellipsis_p : 1;
2235 unsigned avoid_cursor_p : 1;
2236 enum line_wrap_method line_wrap;
2237
2238 /* properties from display property that are reset by another display property. */
2239 short voffset;
2240 Lisp_Object space_width;
2241 Lisp_Object font_height;
2242 }
2243 stack[IT_STACK_SIZE];
2244
2245 /* Stack pointer. */
2246 int sp;
2247
2248 /* -1 means selective display hides everything between a \r and the
2249 next newline; > 0 means hide lines indented more than that value. */
2250 int selective;
2251
2252 /* An enumeration describing what the next display element is
2253 after a call to get_next_display_element. */
2254 enum display_element_type what;
2255
2256 /* Face to use. */
2257 int face_id;
2258
2259 /* Setting of buffer-local variable selective-display-ellipsis. */
2260 unsigned selective_display_ellipsis_p : 1;
2261
2262 /* 1 means control characters are translated into the form `^C'
2263 where the `^' can be replaced by a display table entry. */
2264 unsigned ctl_arrow_p : 1;
2265
2266 /* Non-zero means that the current face has a box. */
2267 unsigned face_box_p : 1;
2268
2269 /* Non-null means that the current character is the first in a run
2270 of characters with box face. */
2271 unsigned start_of_box_run_p : 1;
2272
2273 /* Non-zero means that the current character is the last in a run
2274 of characters with box face. */
2275 unsigned end_of_box_run_p : 1;
2276
2277 /* 1 means overlay strings at end_charpos have been processed. */
2278 unsigned overlay_strings_at_end_processed_p : 1;
2279
2280 /* 1 means to ignore overlay strings at current pos, as they have
2281 already been processed. */
2282 unsigned ignore_overlay_strings_at_pos_p : 1;
2283
2284 /* 1 means the actual glyph is not available in the current
2285 system. */
2286 unsigned glyph_not_available_p : 1;
2287
2288 /* 1 means the next line in display_line continues a character
2289 consisting of more than one glyph, and some glyphs of this
2290 character have been put on the previous line. */
2291 unsigned starts_in_middle_of_char_p : 1;
2292
2293 /* If 1, saved_face_id contains the id of the face in front of text
2294 skipped due to selective display. */
2295 unsigned face_before_selective_p : 1;
2296
2297 /* If 1, adjust current glyph so it does not increase current row
2298 descent/ascent (line-height property). Reset after this glyph. */
2299 unsigned constrain_row_ascent_descent_p : 1;
2300
2301 enum line_wrap_method line_wrap;
2302
2303 /* The ID of the default face to use. One of DEFAULT_FACE_ID,
2304 MODE_LINE_FACE_ID, etc, depending on what we are displaying. */
2305 int base_face_id;
2306
2307 /* If `what' == IT_CHARACTER, the character and the length in bytes
2308 of its multibyte sequence. The character comes from a buffer or
2309 a string. It may be different from the character displayed in
2310 case that unibyte_display_via_language_environment is set.
2311
2312 If `what' == IT_COMPOSITION, the first component of a composition
2313 and length in bytes of the composition.
2314
2315 If `what' is anything else, these two are undefined (will
2316 probably hold values for the last IT_CHARACTER or IT_COMPOSITION
2317 traversed by the iterator.
2318
2319 The values are updated by get_next_display_element, so they are
2320 out of sync with the value returned by IT_CHARPOS between the
2321 time set_iterator_to_next advances the position and the time
2322 get_next_display_element loads the new values into c and len. */
2323 int c, len;
2324
2325 /* If what == IT_COMPOSITION, iterator substructure for the
2326 composition. */
2327 struct composition_it cmp_it;
2328
2329 /* The character to display, possibly translated to multibyte if
2330 multibyte_p is zero or unibyte_display_via_language_environment
2331 is set. This is set after get_next_display_element has been
2332 called. If we are setting it->C directly before calling
2333 PRODUCE_GLYPHS, this should be set beforehand too. */
2334 int char_to_display;
2335
2336 /* If what == IT_GLYPHLESS, the method to display such a
2337 character. */
2338 enum glyphless_display_method glyphless_method;
2339
2340 /* If what == IT_IMAGE, the id of the image to display. */
2341 int image_id;
2342
2343 /* Values from `slice' property. */
2344 struct it_slice slice;
2345
2346 /* Value of the `space-width' property, if any; nil if none. */
2347 Lisp_Object space_width;
2348
2349 /* Computed from the value of the `raise' property. */
2350 short voffset;
2351
2352 /* Number of columns per \t. */
2353 short tab_width;
2354
2355 /* Value of the `height' property, if any; nil if none. */
2356 Lisp_Object font_height;
2357
2358 /* Object and position where the current display element came from.
2359 Object can be a Lisp string in case the current display element
2360 comes from an overlay string, or it is buffer. It may also be nil
2361 during mode-line update. Position is a position in object. */
2362 Lisp_Object object;
2363 struct text_pos position;
2364
2365 /* Width in pixels of truncation and continuation glyphs. */
2366 short truncation_pixel_width, continuation_pixel_width;
2367
2368 /* First and last visible x-position in the display area. If window
2369 is hscrolled by n columns, first_visible_x == n * FRAME_COLUMN_WIDTH
2370 (f), and last_visible_x == pixel width of W + first_visible_x. */
2371 int first_visible_x, last_visible_x;
2372
2373 /* Last visible y-position + 1 in the display area without a mode
2374 line, if the window has one. */
2375 int last_visible_y;
2376
2377 /* Default amount of additional space in pixels between lines (for
2378 window systems only.) */
2379 int extra_line_spacing;
2380
2381 /* Max extra line spacing added in this row. */
2382 int max_extra_line_spacing;
2383
2384 /* Override font height information for this glyph.
2385 Used if override_ascent >= 0. Cleared after this glyph. */
2386 int override_ascent, override_descent, override_boff;
2387
2388 /* If non-null, glyphs are produced in glyph_row with each call to
2389 produce_glyphs. */
2390 struct glyph_row *glyph_row;
2391
2392 /* The area of glyph_row to which glyphs are added. */
2393 enum glyph_row_area area;
2394
2395 /* Number of glyphs needed for the last character requested via
2396 produce_glyphs. This is 1 except for tabs. */
2397 int nglyphs;
2398
2399 /* Width of the display element in pixels. Result of
2400 produce_glyphs. */
2401 int pixel_width;
2402
2403 /* Current, maximum logical, and maximum physical line height
2404 information. Result of produce_glyphs. */
2405 int ascent, descent, max_ascent, max_descent;
2406 int phys_ascent, phys_descent, max_phys_ascent, max_phys_descent;
2407
2408 /* Current x pixel position within the display line. This value
2409 does not include the width of continuation lines in front of the
2410 line. The value of current_x is automatically incremented by
2411 pixel_width with each call to produce_glyphs. */
2412 int current_x;
2413
2414 /* Accumulated width of continuation lines. If > 0, this means we
2415 are currently in a continuation line. This is initially zero and
2416 incremented/reset by display_line, move_it_to etc. */
2417 int continuation_lines_width;
2418
2419 /* Buffer position that ends the buffer text line being iterated.
2420 This is normally the position after the newline at EOL. If this
2421 is the last line of the buffer and it doesn't have a newline,
2422 value is ZV/ZV_BYTE. Set and used only if IT->bidi_p, for
2423 setting the end position of glyph rows produced for continuation
2424 lines, see display_line. */
2425 struct text_pos eol_pos;
2426
2427 /* Current y-position. Automatically incremented by the height of
2428 glyph_row in move_it_to and display_line. */
2429 int current_y;
2430
2431 /* Vertical matrix position of first text line in window. */
2432 int first_vpos;
2433
2434 /* Current vertical matrix position, or line number. Automatically
2435 incremented by move_it_to and display_line. */
2436 int vpos;
2437
2438 /* Horizontal matrix position reached in move_it_in_display_line.
2439 Only set there, not in display_line. */
2440 int hpos;
2441
2442 /* Left fringe bitmap number (enum fringe_bitmap_type). */
2443 unsigned left_user_fringe_bitmap : FRINGE_ID_BITS;
2444
2445 /* Right fringe bitmap number (enum fringe_bitmap_type). */
2446 unsigned right_user_fringe_bitmap : FRINGE_ID_BITS;
2447
2448 /* Face of the left fringe glyph. */
2449 unsigned left_user_fringe_face_id : FACE_ID_BITS;
2450
2451 /* Face of the right fringe glyph. */
2452 unsigned right_user_fringe_face_id : FACE_ID_BITS;
2453
2454 /* Non-zero means we need to reorder bidirectional text for display
2455 in the visual order. */
2456 int bidi_p;
2457
2458 /* For iterating over bidirectional text. */
2459 struct bidi_it bidi_it;
2460 bidi_dir_t paragraph_embedding;
2461 };
2462
2463
2464 /* Access to positions of iterator IT. */
2465
2466 #define IT_CHARPOS(IT) CHARPOS ((IT).current.pos)
2467 #define IT_BYTEPOS(IT) BYTEPOS ((IT).current.pos)
2468 #define IT_STRING_CHARPOS(IT) CHARPOS ((IT).current.string_pos)
2469 #define IT_STRING_BYTEPOS(IT) BYTEPOS ((IT).current.string_pos)
2470
2471 /* Test if IT has reached the end of its buffer or string. This will
2472 only work after get_next_display_element has been called. */
2473
2474 #define ITERATOR_AT_END_P(IT) ((IT)->what == IT_EOB)
2475
2476 /* Non-zero means IT is at the end of a line. This is the case if it
2477 is either on a newline or on a carriage return and selective
2478 display hides the rest of the line. */
2479
2480 #define ITERATOR_AT_END_OF_LINE_P(IT) \
2481 ((IT)->what == IT_CHARACTER \
2482 && ((IT)->c == '\n' \
2483 || ((IT)->c == '\r' && (IT)->selective)))
2484
2485 /* Call produce_glyphs or FRAME_RIF->produce_glyphs, if set. Shortcut
2486 to avoid the function call overhead. */
2487
2488 #define PRODUCE_GLYPHS(IT) \
2489 do { \
2490 if ((IT)->glyph_row != NULL && (IT)->bidi_p) \
2491 { \
2492 if ((IT)->bidi_it.paragraph_dir == R2L) \
2493 (IT)->glyph_row->reversed_p = 1; \
2494 else \
2495 (IT)->glyph_row->reversed_p = 0; \
2496 } \
2497 if (FRAME_RIF ((IT)->f) != NULL) \
2498 FRAME_RIF ((IT)->f)->produce_glyphs ((IT)); \
2499 else \
2500 produce_glyphs ((IT)); \
2501 if ((IT)->glyph_row != NULL) \
2502 inhibit_free_realized_faces = 1; \
2503 } while (0)
2504
2505 /* Bit-flags indicating what operation move_it_to should perform. */
2506
2507 enum move_operation_enum
2508 {
2509 /* Stop if specified x-position is reached. */
2510 MOVE_TO_X = 0x01,
2511
2512 /* Stop if specified y-position is reached. */
2513 MOVE_TO_Y = 0x02,
2514
2515 /* Stop if specified vpos is reached. */
2516 MOVE_TO_VPOS = 0x04,
2517
2518 /* Stop if specified buffer or string position is reached. */
2519 MOVE_TO_POS = 0x08
2520 };
2521
2522
2523 \f
2524 /***********************************************************************
2525 Window-based redisplay interface
2526 ***********************************************************************/
2527
2528 /* Structure used to describe runs of lines that must be scrolled. */
2529
2530 struct run
2531 {
2532 /* Source and destination y pixel position. */
2533 int desired_y, current_y;
2534
2535 /* Source and destination vpos in matrix. */
2536 int desired_vpos, current_vpos;
2537
2538 /* Height in pixels, number of glyph rows. */
2539 int height, nrows;
2540 };
2541
2542
2543 /* Handlers for setting frame parameters. */
2544
2545 typedef void (*frame_parm_handler) (struct frame *, Lisp_Object, Lisp_Object);
2546
2547
2548 /* Structure holding system-dependent interface functions needed
2549 for window-based redisplay. */
2550
2551 struct redisplay_interface
2552 {
2553 /* Handlers for setting frame parameters. */
2554 frame_parm_handler *frame_parm_handlers;
2555
2556 /* Produce glyphs/get display metrics for the display element IT is
2557 loaded with. */
2558 void (*produce_glyphs) (struct it *it);
2559
2560 /* Write or insert LEN glyphs from STRING at the nominal output
2561 position. */
2562 void (*write_glyphs) (struct glyph *string, int len);
2563 void (*insert_glyphs) (struct glyph *start, int len);
2564
2565 /* Clear from nominal output position to X. X < 0 means clear
2566 to right end of display. */
2567 void (*clear_end_of_line) (int x);
2568
2569 /* Function to call to scroll the display as described by RUN on
2570 window W. */
2571 void (*scroll_run_hook) (struct window *w, struct run *run);
2572
2573 /* Function to call after a line in a display has been completely
2574 updated. Used to draw truncation marks and alike. DESIRED_ROW
2575 is the desired row which has been updated. */
2576 void (*after_update_window_line_hook) (struct glyph_row *desired_row);
2577
2578 /* Function to call before beginning to update window W in
2579 window-based redisplay. */
2580 void (*update_window_begin_hook) (struct window *w);
2581
2582 /* Function to call after window W has been updated in window-based
2583 redisplay. CURSOR_ON_P non-zero means switch cursor on.
2584 MOUSE_FACE_OVERWRITTEN_P non-zero means that some lines in W
2585 that contained glyphs in mouse-face were overwritten, so we
2586 have to update the mouse highlight. */
2587 void (*update_window_end_hook) (struct window *w, int cursor_on_p,
2588 int mouse_face_overwritten_p);
2589
2590 /* Move cursor to row/column position VPOS/HPOS, pixel coordinates
2591 Y/X. HPOS/VPOS are window-relative row and column numbers and X/Y
2592 are window-relative pixel positions. */
2593 void (*cursor_to) (int vpos, int hpos, int y, int x);
2594
2595 /* Flush the display of frame F. For X, this is XFlush. */
2596 void (*flush_display) (struct frame *f);
2597
2598 /* Flush the display of frame F if non-NULL. This is called
2599 during redisplay, and should be NULL on systems which flushes
2600 automatically before reading input. */
2601 void (*flush_display_optional) (struct frame *f);
2602
2603 /* Clear the mouse hightlight in window W, if there is any. */
2604 void (*clear_window_mouse_face) (struct window *w);
2605
2606 /* Set *LEFT and *RIGHT to the left and right overhang of GLYPH on
2607 frame F. */
2608 void (*get_glyph_overhangs) (struct glyph *glyph, struct frame *f,
2609 int *left, int *right);
2610
2611 /* Fix the display of AREA of ROW in window W for overlapping rows.
2612 This function is called from redraw_overlapping_rows after
2613 desired rows have been made current. */
2614 void (*fix_overlapping_area) (struct window *w, struct glyph_row *row,
2615 enum glyph_row_area area, int);
2616
2617 #ifdef HAVE_WINDOW_SYSTEM
2618
2619 /* Draw a fringe bitmap in window W of row ROW using parameters P. */
2620 void (*draw_fringe_bitmap) (struct window *w, struct glyph_row *row,
2621 struct draw_fringe_bitmap_params *p);
2622
2623 /* Define and destroy fringe bitmap no. WHICH. */
2624 void (*define_fringe_bitmap) (int which, unsigned short *bits,
2625 int h, int wd);
2626 void (*destroy_fringe_bitmap) (int which);
2627
2628 /* Compute left and right overhang of glyph string S.
2629 A NULL pointer if platform does not support this. */
2630 void (*compute_glyph_string_overhangs) (struct glyph_string *s);
2631
2632 /* Draw a glyph string S. */
2633 void (*draw_glyph_string) (struct glyph_string *s);
2634
2635 /* Define cursor CURSOR on frame F. */
2636 void (*define_frame_cursor) (struct frame *f, Cursor cursor);
2637
2638 /* Clear the area at (X,Y,WIDTH,HEIGHT) of frame F. */
2639 void (*clear_frame_area) (struct frame *f, int x, int y,
2640 int width, int height);
2641
2642 /* Draw specified cursor CURSOR_TYPE of width CURSOR_WIDTH
2643 at row GLYPH_ROW on window W if ON_P is 1. If ON_P is
2644 0, don't draw cursor. If ACTIVE_P is 1, system caret
2645 should track this cursor (when applicable). */
2646 void (*draw_window_cursor) (struct window *w,
2647 struct glyph_row *glyph_row,
2648 int x, int y,
2649 int cursor_type, int cursor_width,
2650 int on_p, int active_p);
2651
2652 /* Draw vertical border for window W from (X,Y0) to (X,Y1). */
2653 void (*draw_vertical_window_border) (struct window *w,
2654 int x, int y0, int y1);
2655
2656 /* Shift display of frame F to make room for inserted glyphs.
2657 The area at pixel (X,Y) of width WIDTH and height HEIGHT is
2658 shifted right by SHIFT_BY pixels. */
2659 void (*shift_glyphs_for_insert) (struct frame *f,
2660 int x, int y, int width,
2661 int height, int shift_by);
2662
2663 #endif /* HAVE_WINDOW_SYSTEM */
2664 };
2665
2666 \f
2667 /***********************************************************************
2668 Images
2669 ***********************************************************************/
2670
2671 #ifdef HAVE_WINDOW_SYSTEM
2672
2673 /* Structure forward declarations. */
2674
2675 struct image;
2676
2677
2678 /* Each image format (JPEG, TIFF, ...) supported is described by
2679 a structure of the type below. */
2680
2681 struct image_type
2682 {
2683 /* A symbol uniquely identifying the image type, .e.g `jpeg'. */
2684 Lisp_Object *type;
2685
2686 /* Check that SPEC is a valid image specification for the given
2687 image type. Value is non-zero if SPEC is valid. */
2688 int (* valid_p) (Lisp_Object spec);
2689
2690 /* Load IMG which is used on frame F from information contained in
2691 IMG->spec. Value is non-zero if successful. */
2692 int (* load) (struct frame *f, struct image *img);
2693
2694 /* Free resources of image IMG which is used on frame F. */
2695 void (* free) (struct frame *f, struct image *img);
2696
2697 /* Next in list of all supported image types. */
2698 struct image_type *next;
2699 };
2700
2701
2702 /* Structure describing an image. Specific image formats like XBM are
2703 converted into this form, so that display only has to deal with
2704 this type of image. */
2705
2706 struct image
2707 {
2708 /* The time in seconds at which the image was last displayed. Set
2709 in prepare_image_for_display. */
2710 unsigned long timestamp;
2711
2712 /* Pixmaps of the image. */
2713 Pixmap pixmap, mask;
2714
2715 /* Colors allocated for this image, if any. Allocated via xmalloc. */
2716 unsigned long *colors;
2717 int ncolors;
2718
2719 /* A single `background color' for this image, for the use of anyone that
2720 cares about such a thing. Only valid if the `background_valid' field
2721 is true. This should generally be accessed by calling the accessor
2722 macro `IMAGE_BACKGROUND', which will heuristically calculate a value
2723 if necessary. */
2724 unsigned long background;
2725
2726 /* Foreground and background colors of the frame on which the image
2727 is created. */
2728 unsigned long frame_foreground, frame_background;
2729
2730 /* True if this image has a `transparent' background -- that is, is
2731 uses an image mask. The accessor macro for this is
2732 `IMAGE_BACKGROUND_TRANSPARENT'. */
2733 unsigned background_transparent : 1;
2734
2735 /* True if the `background' and `background_transparent' fields are
2736 valid, respectively. */
2737 unsigned background_valid : 1, background_transparent_valid : 1;
2738
2739 /* Width and height of the image. */
2740 int width, height;
2741
2742 /* These values are used for the rectangles displayed for images
2743 that can't be loaded. */
2744 #define DEFAULT_IMAGE_WIDTH 30
2745 #define DEFAULT_IMAGE_HEIGHT 30
2746
2747 /* Top/left and bottom/right corner pixel of actual image data.
2748 Used by four_corners_best to consider the real image data,
2749 rather than looking at the optional image margin. */
2750 int corners[4];
2751 #define TOP_CORNER 0
2752 #define LEFT_CORNER 1
2753 #define BOT_CORNER 2
2754 #define RIGHT_CORNER 3
2755
2756 /* Percent of image height used as ascent. A value of
2757 CENTERED_IMAGE_ASCENT means draw the image centered on the
2758 line. */
2759 int ascent;
2760 #define DEFAULT_IMAGE_ASCENT 50
2761 #define CENTERED_IMAGE_ASCENT -1
2762
2763 /* Lisp specification of this image. */
2764 Lisp_Object spec;
2765
2766 /* List of "references" followed to build the image.
2767 Typically will just contain the name of the image file.
2768 Used to allow fine-grained cache flushing. */
2769 Lisp_Object dependencies;
2770
2771 /* Relief to draw around the image. */
2772 int relief;
2773
2774 /* Optional margins around the image. This includes the relief. */
2775 int hmargin, vmargin;
2776
2777 /* Reference to the type of the image. */
2778 struct image_type *type;
2779
2780 /* 1 means that loading the image failed. Don't try again. */
2781 unsigned load_failed_p;
2782
2783 /* A place for image types to store additional data. The member
2784 data.lisp_val is marked during GC, so it's safe to store Lisp data
2785 there. Image types should free this data when their `free'
2786 function is called. */
2787 struct
2788 {
2789 int int_val;
2790 void *ptr_val;
2791 Lisp_Object lisp_val;
2792 } data;
2793
2794 /* Hash value of image specification to speed up comparisons. */
2795 unsigned hash;
2796
2797 /* Image id of this image. */
2798 int id;
2799
2800 /* Hash collision chain. */
2801 struct image *next, *prev;
2802 };
2803
2804
2805 /* Cache of images. Each frame has a cache. X frames with the same
2806 x_display_info share their caches. */
2807
2808 struct image_cache
2809 {
2810 /* Hash table of images. */
2811 struct image **buckets;
2812
2813 /* Vector mapping image ids to images. */
2814 struct image **images;
2815
2816 /* Allocated size of `images'. */
2817 unsigned size;
2818
2819 /* Number of images in the cache. */
2820 unsigned used;
2821
2822 /* Reference count (number of frames sharing this cache). */
2823 int refcount;
2824 };
2825
2826
2827 /* Value is a pointer to the image with id ID on frame F, or null if
2828 no image with that id exists. */
2829
2830 #define IMAGE_FROM_ID(F, ID) \
2831 (((ID) >= 0 && (ID) < (FRAME_IMAGE_CACHE (F)->used)) \
2832 ? FRAME_IMAGE_CACHE (F)->images[ID] \
2833 : NULL)
2834
2835 /* Size of bucket vector of image caches. Should be prime. */
2836
2837 #define IMAGE_CACHE_BUCKETS_SIZE 1001
2838
2839 #endif /* HAVE_WINDOW_SYSTEM */
2840
2841
2842 \f
2843 /***********************************************************************
2844 Tool-bars
2845 ***********************************************************************/
2846
2847 /* Enumeration defining where to find tool-bar item information in
2848 tool-bar items vectors stored with frames. Each tool-bar item
2849 occupies TOOL_BAR_ITEM_NSLOTS elements in such a vector. */
2850
2851 enum tool_bar_item_idx
2852 {
2853 /* The key of the tool-bar item. Used to remove items when a binding
2854 for `undefined' is found. */
2855 TOOL_BAR_ITEM_KEY,
2856
2857 /* Non-nil if item is enabled. */
2858 TOOL_BAR_ITEM_ENABLED_P,
2859
2860 /* Non-nil if item is selected (pressed). */
2861 TOOL_BAR_ITEM_SELECTED_P,
2862
2863 /* Caption. */
2864 TOOL_BAR_ITEM_CAPTION,
2865
2866 /* Image(s) to display. This is either a single image specification
2867 or a vector of specifications. */
2868 TOOL_BAR_ITEM_IMAGES,
2869
2870 /* The binding. */
2871 TOOL_BAR_ITEM_BINDING,
2872
2873 /* Button type. One of nil, `:radio' or `:toggle'. */
2874 TOOL_BAR_ITEM_TYPE,
2875
2876 /* Help string. */
2877 TOOL_BAR_ITEM_HELP,
2878
2879 /* Icon file name of right to left image when an RTL locale is used. */
2880 TOOL_BAR_ITEM_RTL_IMAGE,
2881
2882 /* Label to show when text labels are enabled. */
2883 TOOL_BAR_ITEM_LABEL,
2884
2885 /* Sentinel = number of slots in tool_bar_items occupied by one
2886 tool-bar item. */
2887 TOOL_BAR_ITEM_NSLOTS
2888 };
2889
2890
2891 /* An enumeration for the different images that can be specified
2892 for a tool-bar item. */
2893
2894 enum tool_bar_item_image
2895 {
2896 TOOL_BAR_IMAGE_ENABLED_SELECTED,
2897 TOOL_BAR_IMAGE_ENABLED_DESELECTED,
2898 TOOL_BAR_IMAGE_DISABLED_SELECTED,
2899 TOOL_BAR_IMAGE_DISABLED_DESELECTED
2900 };
2901
2902 /* Margin around tool-bar buttons in pixels. */
2903
2904 extern Lisp_Object Vtool_bar_button_margin;
2905
2906 /* Tool bar style */
2907
2908 extern Lisp_Object Vtool_bar_style;
2909
2910 /* Maximum number of characters a label can have to be shown. */
2911
2912 extern EMACS_INT tool_bar_max_label_size;
2913 #define DEFAULT_TOOL_BAR_LABEL_SIZE 14
2914
2915 /* Thickness of relief to draw around tool-bar buttons. */
2916
2917 extern EMACS_INT tool_bar_button_relief;
2918
2919 /* Default values of the above variables. */
2920
2921 #define DEFAULT_TOOL_BAR_BUTTON_MARGIN 4
2922 #define DEFAULT_TOOL_BAR_BUTTON_RELIEF 1
2923
2924 /* The height in pixels of the default tool-bar images. */
2925
2926 #define DEFAULT_TOOL_BAR_IMAGE_HEIGHT 24
2927
2928 \f
2929 /***********************************************************************
2930 Terminal Capabilities
2931 ***********************************************************************/
2932
2933 /* Each of these is a bit representing a terminal `capability' (bold,
2934 inverse, etc). They are or'd together to specify the set of
2935 capabilities being queried for when calling `tty_capable_p' (which
2936 returns true if the terminal supports all of them). */
2937
2938 #define TTY_CAP_INVERSE 0x01
2939 #define TTY_CAP_UNDERLINE 0x02
2940 #define TTY_CAP_BOLD 0x04
2941 #define TTY_CAP_DIM 0x08
2942 #define TTY_CAP_BLINK 0x10
2943 #define TTY_CAP_ALT_CHARSET 0x20
2944
2945 \f
2946 /***********************************************************************
2947 Function Prototypes
2948 ***********************************************************************/
2949
2950 /* Defined in bidi.c */
2951
2952 extern void bidi_init_it (EMACS_INT, EMACS_INT, struct bidi_it *);
2953 extern void bidi_move_to_visually_next (struct bidi_it *);
2954 extern void bidi_paragraph_init (bidi_dir_t, struct bidi_it *, int);
2955 extern int bidi_mirror_char (int);
2956
2957 /* Defined in xdisp.c */
2958
2959 struct glyph_row *row_containing_pos (struct window *, EMACS_INT,
2960 struct glyph_row *,
2961 struct glyph_row *, int);
2962 EMACS_INT string_buffer_position (struct window *, Lisp_Object,
2963 EMACS_INT);
2964 int line_bottom_y (struct it *);
2965 int display_prop_intangible_p (Lisp_Object);
2966 void resize_echo_area_exactly (void);
2967 int resize_mini_window (struct window *, int);
2968 int try_window (Lisp_Object, struct text_pos, int);
2969 void window_box (struct window *, int, int *, int *, int *, int *);
2970 int window_box_height (struct window *);
2971 int window_text_bottom_y (struct window *);
2972 int window_box_width (struct window *, int);
2973 int window_box_left (struct window *, int);
2974 int window_box_left_offset (struct window *, int);
2975 int window_box_right (struct window *, int);
2976 int window_box_right_offset (struct window *, int);
2977 void window_box_edges (struct window *, int, int *, int *, int *, int *);
2978 int estimate_mode_line_height (struct frame *, enum face_id);
2979 void pixel_to_glyph_coords (struct frame *, int, int, int *, int *,
2980 NativeRectangle *, int);
2981 int glyph_to_pixel_coords (struct window *, int, int, int *, int *);
2982 void remember_mouse_glyph (struct frame *, int, int, NativeRectangle *);
2983
2984 void mark_window_display_accurate (Lisp_Object, int);
2985 void redisplay_preserve_echo_area (int);
2986 int set_cursor_from_row (struct window *, struct glyph_row *,
2987 struct glyph_matrix *, EMACS_INT, EMACS_INT,
2988 int, int);
2989 void init_iterator (struct it *, struct window *, EMACS_INT,
2990 EMACS_INT, struct glyph_row *, enum face_id);
2991 void init_iterator_to_row_start (struct it *, struct window *,
2992 struct glyph_row *);
2993 int get_next_display_element (struct it *);
2994 void set_iterator_to_next (struct it *, int);
2995 void start_display (struct it *, struct window *, struct text_pos);
2996 void move_it_to (struct it *, EMACS_INT, int, int, int, int);
2997 void move_it_vertically (struct it *, int);
2998 void move_it_vertically_backward (struct it *, int);
2999 void move_it_by_lines (struct it *, int, int);
3000 void move_it_past_eol (struct it *);
3001 void move_it_in_display_line (struct it *it,
3002 EMACS_INT to_charpos, int to_x,
3003 enum move_operation_enum op);
3004 int in_display_vector_p (struct it *);
3005 int frame_mode_line_height (struct frame *);
3006 void highlight_trailing_whitespace (struct frame *, struct glyph_row *);
3007 extern Lisp_Object Qtool_bar;
3008 extern Lisp_Object Vshow_trailing_whitespace;
3009 extern int mode_line_in_non_selected_windows;
3010 extern int redisplaying_p;
3011 extern int help_echo_showing_p;
3012 extern int current_mode_line_height, current_header_line_height;
3013 extern Lisp_Object help_echo_string, help_echo_window;
3014 extern Lisp_Object help_echo_object, previous_help_echo_string;
3015 extern EMACS_INT help_echo_pos;
3016 extern struct frame *last_mouse_frame;
3017 extern int last_tool_bar_item;
3018 extern Lisp_Object Vmouse_autoselect_window;
3019 extern int unibyte_display_via_language_environment;
3020 extern EMACS_INT underline_minimum_offset;
3021 extern Lisp_Object Vglyphless_char_display;
3022
3023 extern void reseat_at_previous_visible_line_start (struct it *);
3024
3025 extern int calc_pixel_width_or_height (double *, struct it *, Lisp_Object,
3026 struct font *, int, int *);
3027
3028 #ifdef HAVE_WINDOW_SYSTEM
3029
3030 #if GLYPH_DEBUG
3031 extern void dump_glyph_string (struct glyph_string *);
3032 #endif
3033
3034 extern void x_get_glyph_overhangs (struct glyph *, struct frame *,
3035 int *, int *);
3036 extern void x_produce_glyphs (struct it *);
3037
3038 extern void x_write_glyphs (struct glyph *, int);
3039 extern void x_insert_glyphs (struct glyph *, int len);
3040 extern void x_clear_end_of_line (int);
3041
3042 extern int x_stretch_cursor_p;
3043 extern struct cursor_pos output_cursor;
3044
3045 extern void x_fix_overlapping_area (struct window *, struct glyph_row *,
3046 enum glyph_row_area, int);
3047 extern void draw_phys_cursor_glyph (struct window *,
3048 struct glyph_row *,
3049 enum draw_glyphs_face);
3050 extern void get_phys_cursor_geometry (struct window *, struct glyph_row *,
3051 struct glyph *, int *, int *, int *);
3052 extern void erase_phys_cursor (struct window *);
3053 extern void display_and_set_cursor (struct window *,
3054 int, int, int, int, int);
3055
3056 extern void set_output_cursor (struct cursor_pos *);
3057 extern void x_cursor_to (int, int, int, int);
3058
3059 extern void x_update_cursor (struct frame *, int);
3060 extern void x_clear_cursor (struct window *);
3061 extern void x_draw_vertical_border (struct window *w);
3062
3063 extern void frame_to_window_pixel_xy (struct window *, int *, int *);
3064 extern int get_glyph_string_clip_rects (struct glyph_string *,
3065 NativeRectangle *, int);
3066 extern void get_glyph_string_clip_rect (struct glyph_string *,
3067 NativeRectangle *nr);
3068 extern Lisp_Object find_hot_spot (Lisp_Object, int, int);
3069 extern void note_mouse_highlight (struct frame *, int, int);
3070 extern void x_clear_window_mouse_face (struct window *);
3071 extern void cancel_mouse_face (struct frame *);
3072
3073 extern void handle_tool_bar_click (struct frame *,
3074 int, int, int, unsigned int);
3075
3076 /* msdos.c defines its own versions of these functions. */
3077 extern int clear_mouse_face (Display_Info *);
3078 extern void show_mouse_face (Display_Info *, enum draw_glyphs_face);
3079 extern int cursor_in_mouse_face_p (struct window *w);
3080
3081 extern void expose_frame (struct frame *, int, int, int, int);
3082 extern int x_intersect_rectangles (XRectangle *, XRectangle *,
3083 XRectangle *);
3084 #endif
3085
3086 /* Flags passed to try_window. */
3087 #define TRY_WINDOW_CHECK_MARGINS (1 << 0)
3088 #define TRY_WINDOW_IGNORE_FONTS_CHANGE (1 << 1)
3089
3090 /* Defined in fringe.c */
3091
3092 extern Lisp_Object Voverflow_newline_into_fringe;
3093 int lookup_fringe_bitmap (Lisp_Object);
3094 void draw_fringe_bitmap (struct window *, struct glyph_row *, int);
3095 void draw_row_fringe_bitmaps (struct window *, struct glyph_row *);
3096 int draw_window_fringes (struct window *, int);
3097 int update_window_fringes (struct window *, int);
3098 void compute_fringe_widths (struct frame *, int);
3099
3100 #ifdef WINDOWSNT
3101 void w32_init_fringe (struct redisplay_interface *);
3102 void w32_reset_fringes (void);
3103 #endif
3104 /* Defined in image.c */
3105
3106 #ifdef HAVE_WINDOW_SYSTEM
3107
3108 extern int x_bitmap_height (struct frame *, int);
3109 extern int x_bitmap_width (struct frame *, int);
3110 extern int x_bitmap_pixmap (struct frame *, int);
3111 extern void x_reference_bitmap (struct frame *, int);
3112 extern int x_create_bitmap_from_data (struct frame *, char *,
3113 unsigned int, unsigned int);
3114 extern int x_create_bitmap_from_file (struct frame *, Lisp_Object);
3115 #if defined (HAVE_XPM) && defined (HAVE_X_WINDOWS)
3116 extern int x_create_bitmap_from_xpm_data (struct frame *f, char **bits);
3117 #endif
3118 #ifndef x_destroy_bitmap
3119 extern void x_destroy_bitmap (struct frame *, int);
3120 #endif
3121 extern void x_destroy_all_bitmaps (Display_Info *);
3122 extern int x_create_bitmap_mask (struct frame * , int);
3123 extern Lisp_Object x_find_image_file (Lisp_Object);
3124
3125 void x_kill_gs_process (Pixmap, struct frame *);
3126 struct image_cache *make_image_cache (void);
3127 void free_image_cache (struct frame *);
3128 void clear_image_caches (Lisp_Object);
3129 void mark_image_cache (struct image_cache *);
3130 int valid_image_p (Lisp_Object);
3131 void prepare_image_for_display (struct frame *, struct image *);
3132 int lookup_image (struct frame *, Lisp_Object);
3133
3134 unsigned long image_background (struct image *, struct frame *,
3135 XImagePtr_or_DC ximg);
3136 int image_background_transparent (struct image *, struct frame *,
3137 XImagePtr_or_DC mask);
3138
3139 int image_ascent (struct image *, struct face *, struct glyph_slice *);
3140
3141 #endif
3142
3143 /* Defined in sysdep.c */
3144
3145 void get_tty_size (int, int *, int *);
3146 void request_sigio (void);
3147 void unrequest_sigio (void);
3148 int tabs_safe_p (int);
3149 void init_baud_rate (int);
3150 void init_sigio (int);
3151
3152 /* Defined in xfaces.c */
3153
3154 #ifdef HAVE_X_WINDOWS
3155 void x_free_colors (struct frame *, unsigned long *, int);
3156 #endif
3157
3158 void update_face_from_frame_parameter (struct frame *, Lisp_Object,
3159 Lisp_Object);
3160 Lisp_Object tty_color_name (struct frame *, int);
3161 void clear_face_cache (int);
3162 unsigned long load_color (struct frame *, struct face *, Lisp_Object,
3163 enum lface_attribute_index);
3164 void unload_color (struct frame *, unsigned long);
3165 char *choose_face_font (struct frame *, Lisp_Object *, Lisp_Object,
3166 int *);
3167 int ascii_face_of_lisp_face (struct frame *, int);
3168 void prepare_face_for_display (struct frame *, struct face *);
3169 int xstrcasecmp (const unsigned char *, const unsigned char *);
3170 int lookup_face (struct frame *, Lisp_Object *);
3171 int lookup_named_face (struct frame *, Lisp_Object, int);
3172 int lookup_basic_face (struct frame *, int);
3173 int smaller_face (struct frame *, int, int);
3174 int face_with_height (struct frame *, int, int);
3175 int lookup_derived_face (struct frame *, Lisp_Object, int, int);
3176 void init_frame_faces (struct frame *);
3177 void free_frame_faces (struct frame *);
3178 void recompute_basic_faces (struct frame *);
3179 int face_at_buffer_position (struct window *w, EMACS_INT pos,
3180 EMACS_INT region_beg, EMACS_INT region_end,
3181 EMACS_INT *endptr, EMACS_INT limit,
3182 int mouse, int base_face_id);
3183 int face_for_overlay_string (struct window *w, EMACS_INT pos,
3184 EMACS_INT region_beg, EMACS_INT region_end,
3185 EMACS_INT *endptr, EMACS_INT limit,
3186 int mouse, Lisp_Object overlay);
3187 int face_at_string_position (struct window *w, Lisp_Object string,
3188 EMACS_INT pos, EMACS_INT bufpos,
3189 EMACS_INT region_beg, EMACS_INT region_end,
3190 EMACS_INT *endptr, enum face_id, int mouse);
3191 int merge_faces (struct frame *, Lisp_Object, int, int);
3192 int compute_char_face (struct frame *, int, Lisp_Object);
3193 void free_all_realized_faces (Lisp_Object);
3194 void free_realized_face (struct frame *, struct face *);
3195 extern Lisp_Object Qforeground_color, Qbackground_color;
3196 extern Lisp_Object Qframe_set_background_mode;
3197 extern char unspecified_fg[], unspecified_bg[];
3198
3199 extern Lisp_Object Vface_remapping_alist;
3200
3201 /* Defined in xfns.c */
3202
3203 #ifdef HAVE_X_WINDOWS
3204 void gamma_correct (struct frame *, XColor *);
3205 #endif
3206 #ifdef WINDOWSNT
3207 void gamma_correct (struct frame *, COLORREF *);
3208 #endif
3209
3210 #ifdef HAVE_WINDOW_SYSTEM
3211
3212 int x_screen_planes (struct frame *);
3213 void x_implicitly_set_name (struct frame *, Lisp_Object, Lisp_Object);
3214
3215 extern Lisp_Object tip_frame;
3216 extern Window tip_window;
3217 EXFUN (Fx_show_tip, 6);
3218 EXFUN (Fx_hide_tip, 0);
3219 extern void start_hourglass (void);
3220 extern void cancel_hourglass (void);
3221 extern int hourglass_started (void);
3222 extern int display_hourglass_p;
3223 extern int hourglass_shown_p;
3224 struct atimer; /* Defined in atimer.h. */
3225 /* If non-null, an asynchronous timer that, when it expires, displays
3226 an hourglass cursor on all frames. */
3227 extern struct atimer *hourglass_atimer;
3228
3229 /* Each GUI implements these. FIXME: move into RIF. */
3230 extern void show_hourglass (struct atimer *);
3231 extern void hide_hourglass (void);
3232
3233 /* Returns the background color of IMG, calculating one heuristically if
3234 necessary. If non-zero, XIMG is an existing XImage object to use for
3235 the heuristic. */
3236
3237 #define IMAGE_BACKGROUND(img, f, ximg) \
3238 ((img)->background_valid \
3239 ? (img)->background \
3240 : image_background (img, f, ximg))
3241
3242 /* Returns true if IMG has a `transparent' background, using heuristics
3243 to decide if necessary. If non-zero, MASK is an existing XImage
3244 object to use for the heuristic. */
3245
3246 #define IMAGE_BACKGROUND_TRANSPARENT(img, f, mask) \
3247 ((img)->background_transparent_valid \
3248 ? (img)->background_transparent \
3249 : image_background_transparent (img, f, mask))
3250
3251 #endif /* HAVE_WINDOW_SYSTEM */
3252
3253
3254 /* Defined in xmenu.c */
3255
3256 int popup_activated (void);
3257
3258 /* Defined in dispnew.c */
3259
3260 extern int inverse_video;
3261 extern int required_matrix_width (struct window *);
3262 extern int required_matrix_height (struct window *);
3263 extern Lisp_Object buffer_posn_from_coords (struct window *,
3264 int *, int *,
3265 struct display_pos *,
3266 Lisp_Object *,
3267 int *, int *, int *, int *);
3268 extern Lisp_Object mode_line_string (struct window *, enum window_part,
3269 int *, int *, EMACS_INT *,
3270 Lisp_Object *,
3271 int *, int *, int *, int *);
3272 extern Lisp_Object marginal_area_string (struct window *, enum window_part,
3273 int *, int *, EMACS_INT *,
3274 Lisp_Object *,
3275 int *, int *, int *, int *);
3276 extern void redraw_frame (struct frame *);
3277 extern void redraw_garbaged_frames (void);
3278 extern void cancel_line (int, struct frame *);
3279 extern void init_desired_glyphs (struct frame *);
3280 extern int scroll_frame_lines (struct frame *, int, int, int, int);
3281 extern int update_frame (struct frame *, int, int);
3282 extern int scrolling (struct frame *);
3283 extern void bitch_at_user (void);
3284 void adjust_glyphs (struct frame *);
3285 void free_glyphs (struct frame *);
3286 void free_window_matrices (struct window *);
3287 void check_glyph_memory (void);
3288 void mirrored_line_dance (struct glyph_matrix *, int, int, int *, char *);
3289 void clear_glyph_matrix (struct glyph_matrix *);
3290 void clear_current_matrices (struct frame *f);
3291 void clear_desired_matrices (struct frame *);
3292 void shift_glyph_matrix (struct window *, struct glyph_matrix *,
3293 int, int, int);
3294 void rotate_matrix (struct glyph_matrix *, int, int, int);
3295 void increment_matrix_positions (struct glyph_matrix *,
3296 int, int, EMACS_INT, EMACS_INT);
3297 void blank_row (struct window *, struct glyph_row *, int);
3298 void increment_row_positions (struct glyph_row *, EMACS_INT, EMACS_INT);
3299 void enable_glyph_matrix_rows (struct glyph_matrix *, int, int, int);
3300 void clear_glyph_row (struct glyph_row *);
3301 void prepare_desired_row (struct glyph_row *);
3302 int line_hash_code (struct glyph_row *);
3303 void set_window_update_flags (struct window *, int);
3304 void update_single_window (struct window *, int);
3305 void do_pending_window_change (int);
3306 void change_frame_size (struct frame *, int, int, int, int, int);
3307 void init_display (void);
3308 void syms_of_display (void);
3309 extern Lisp_Object Qredisplay_dont_pause;
3310 void spec_glyph_lookup_face (struct window *, GLYPH *);
3311
3312 /* Defined in terminal.c */
3313
3314 extern void ring_bell (struct frame *);
3315 extern void update_begin (struct frame *);
3316 extern void update_end (struct frame *);
3317 extern void set_terminal_window (struct frame *, int);
3318 extern void cursor_to (struct frame *, int, int);
3319 extern void raw_cursor_to (struct frame *, int, int);
3320 extern void clear_to_end (struct frame *);
3321 extern void clear_frame (struct frame *);
3322 extern void clear_end_of_line (struct frame *, int);
3323 extern void write_glyphs (struct frame *, struct glyph *, int);
3324 extern void insert_glyphs (struct frame *, struct glyph *, int);
3325 extern void delete_glyphs (struct frame *, int);
3326 extern void ins_del_lines (struct frame *, int, int);
3327
3328 extern struct terminal *init_initial_terminal (void);
3329
3330
3331 /* Defined in term.c */
3332
3333 extern void tty_set_terminal_modes (struct terminal *);
3334 extern void tty_reset_terminal_modes (struct terminal *);
3335 extern void tty_turn_off_insert (struct tty_display_info *);
3336 extern void tty_turn_off_highlight (struct tty_display_info *);
3337 extern int string_cost (const char *);
3338 extern int per_line_cost (const char *);
3339 extern void calculate_costs (struct frame *);
3340 extern void produce_glyphs (struct it *);
3341 extern void produce_special_glyphs (struct it *, enum display_element_type);
3342 extern int tty_capable_p (struct tty_display_info *, unsigned, unsigned long, unsigned long);
3343 extern void set_tty_color_mode (struct tty_display_info *, struct frame *);
3344 extern struct terminal *get_tty_terminal (Lisp_Object, int);
3345 extern struct terminal *get_named_tty (const char *);
3346 EXFUN (Ftty_type, 1);
3347 extern void create_tty_output (struct frame *);
3348 extern struct terminal *init_tty (const char *, const char *, int);
3349
3350
3351 /* Defined in scroll.c */
3352
3353 extern int scrolling_max_lines_saved (int, int, int *, int *, int *);
3354 extern int scroll_cost (struct frame *, int, int, int);
3355 extern void do_line_insertion_deletion_costs (struct frame *, char *,
3356 char *, char *, char *,
3357 char *, char *, int);
3358 void scrolling_1 (struct frame *, int, int, int, int *, int *, int *,
3359 int *, int);
3360
3361 /* Defined in frame.c */
3362
3363 #ifdef HAVE_WINDOW_SYSTEM
3364
3365 /* Types we might convert a resource string into. */
3366 enum resource_types
3367 {
3368 RES_TYPE_NUMBER,
3369 RES_TYPE_FLOAT,
3370 RES_TYPE_BOOLEAN,
3371 RES_TYPE_STRING,
3372 RES_TYPE_SYMBOL,
3373 RES_TYPE_BOOLEAN_NUMBER
3374 };
3375
3376 extern Lisp_Object x_get_arg (Display_Info *, Lisp_Object,
3377 Lisp_Object, const char *, const char *class,
3378 enum resource_types);
3379 extern Lisp_Object x_frame_get_arg (struct frame *, Lisp_Object,
3380 Lisp_Object, const char *, const char *,
3381 enum resource_types);
3382 extern Lisp_Object x_frame_get_and_record_arg (struct frame *, Lisp_Object,
3383 Lisp_Object,
3384 const char *, const char *,
3385 enum resource_types);
3386 extern Lisp_Object x_default_parameter (struct frame *, Lisp_Object,
3387 Lisp_Object, Lisp_Object,
3388 const char *, const char *,
3389 enum resource_types);
3390
3391 #endif /* HAVE_WINDOW_SYSTEM */
3392
3393 #endif /* not DISPEXTERN_H_INCLUDED */
3394
3395 /* arch-tag: c65c475f-1c1e-4534-8795-990b8509fd65
3396 (do not change this comment) */