Mercurial > hg > xemacs-beta
comparison src/redisplay.h @ 412:697ef44129c6 r21-2-14
Import from CVS: tag r21-2-14
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:20:41 +0200 |
parents | b8cc9ab3f761 |
children | 95016f13131a |
comparison
equal
deleted
inserted
replaced
411:12e008d41344 | 412:697ef44129c6 |
---|---|
20 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | 20 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
21 Boston, MA 02111-1307, USA. */ | 21 Boston, MA 02111-1307, USA. */ |
22 | 22 |
23 /* Synched up with: Not in FSF. */ | 23 /* Synched up with: Not in FSF. */ |
24 | 24 |
25 #ifndef INCLUDED_redisplay_h_ | 25 #ifndef _XEMACS_REDISPLAY_H_ |
26 #define INCLUDED_redisplay_h_ | 26 #define _XEMACS_REDISPLAY_H_ |
27 | 27 |
28 /* Redisplay DASSERT types */ | 28 /* Redisplay DASSERT types */ |
29 #define DB_DISP_POS 1 | 29 #define DB_DISP_POS 1 |
30 #define DB_DISP_TEXT_LAYOUT 2 | 30 #define DB_DISP_TEXT_LAYOUT 2 |
31 #define DB_DISP_REDISPLAY 4 | 31 #define DB_DISP_REDISPLAY 4 |
88 or pixmap. Any single character in a buffer has one or more runes | 88 or pixmap. Any single character in a buffer has one or more runes |
89 (or zero, if the character is invisible) corresponding to it. | 89 (or zero, if the character is invisible) corresponding to it. |
90 (Printable characters typically have one rune associated with them, | 90 (Printable characters typically have one rune associated with them, |
91 but control characters have two -- a ^ and a letter -- and other | 91 but control characters have two -- a ^ and a letter -- and other |
92 non-printing characters (those displayed in octal) have four. */ | 92 non-printing characters (those displayed in octal) have four. */ |
93 | |
94 /* WARNING! In compare_runes (one of the most heavily used functions) | |
95 two runes are compared. So please be careful with changes to this | |
96 structure. See comments in compare_runes. | |
97 | |
98 #### This should really be made smaller. | |
99 */ | |
100 | 93 |
101 typedef struct rune rune; | 94 typedef struct rune rune; |
102 struct rune | 95 struct rune |
103 { | 96 { |
104 face_index findex; /* face rune is displayed with. The | 97 face_index findex; /* face rune is displayed with. The |
110 faces that overlap the rune) and | 103 faces that overlap the rune) and |
111 contains the instance values for | 104 contains the instance values for |
112 each of the face properties in this | 105 each of the face properties in this |
113 particular window. */ | 106 particular window. */ |
114 | 107 |
108 short xpos; /* horizontal starting position in pixels */ | |
109 short width; /* pixel width of rune */ | |
110 | |
111 | |
115 Bufpos bufpos; /* buffer position this rune is displaying; | 112 Bufpos bufpos; /* buffer position this rune is displaying; |
116 for the modeline, the value here is a | 113 for the modeline, the value here is a |
117 Charcount, but who's looking? */ | 114 Charcount, but who's looking? */ |
118 Bufpos endpos; /* if set this rune covers a range of pos */ | 115 Bufpos endpos; /* if set this rune covers a range of pos */ |
119 /* #### Chuck, what does it mean for a rune | 116 /* #### Chuck, what does it mean for a rune |
120 to cover a range of pos? I don't get | 117 to cover a range of pos? I don't get |
121 this. */ | 118 this. */ |
122 /* #### This isn't used as an rvalue anywhere! | 119 unsigned int cursor_type :3; /* is this rune covered by the cursor? */ |
123 remove! */ | 120 unsigned int type :3; /* type of rune object */ |
124 | |
125 | |
126 short xpos; /* horizontal starting position in pixels */ | |
127 short width; /* pixel width of rune */ | |
128 | |
129 | |
130 unsigned char cursor_type; /* is this rune covered by the cursor? */ | |
131 unsigned char type; /* type of rune object */ | |
132 /* We used to do bitfields here, but if I | |
133 (JV) count correctly that doesn't matter | |
134 for the size of the structure. All the bit | |
135 fiddling _does_ slow down redisplay by | |
136 about 10%. So don't do that */ | |
137 | 121 |
138 union /* Information specific to the type of rune */ | 122 union /* Information specific to the type of rune */ |
139 { | 123 { |
140 /* #### GLyps are are. Is it really necessary to waste 8 bytes on every | |
141 rune for that?! */ | |
142 /* DGLYPH */ | 124 /* DGLYPH */ |
143 struct | 125 struct |
144 { | 126 { |
145 Lisp_Object glyph; | 127 Lisp_Object glyph; |
146 Lisp_Object extent; /* extent rune is attached to, if any. | 128 Lisp_Object extent; /* extent rune is attached to, if any. |
161 } chr; | 143 } chr; |
162 | 144 |
163 /* HLINE */ | 145 /* HLINE */ |
164 struct | 146 struct |
165 { | 147 { |
166 short thickness; /* how thick to make hline */ | 148 int thickness; /* how thick to make hline */ |
167 short yoffset; /* how far down from top of line to put top */ | 149 int yoffset; /* how far down from top of line to put top */ |
168 } hline; | 150 } hline; |
169 } object; /* actual rune object */ | 151 } object; /* actual rune object */ |
170 }; | 152 }; |
171 | 153 |
172 typedef struct | 154 typedef struct |
248 | 230 |
249 typedef struct | 231 typedef struct |
250 { | 232 { |
251 Dynarr_declare (glyph_block); | 233 Dynarr_declare (glyph_block); |
252 } glyph_block_dynarr; | 234 } glyph_block_dynarr; |
253 | |
254 /*************************************************************************/ | |
255 /* display lines */ | |
256 /*************************************************************************/ | |
257 | |
258 /* Modeline commentary: IMO the modeline is handled very badly, we | |
259 special case virtually *everything* in the redisplay routines for | |
260 the modeline. The fact that dl->bufpos can be either a buffer | |
261 position or a char count highlights this. There is no abstraction at | |
262 all that I can find and it means that the code is made very ugly as | |
263 a result. Either we should treat the modeline *entirely* separately, | |
264 or we should abstract to something that applies equally well to the | |
265 modeline and to buffer text, the things are not enormously different | |
266 after all and handling them identically at some level would | |
267 eliminate some bugs that still exist (mainly to do with modeline | |
268 handling). This problem doesn't help trying to implement gutters | |
269 which are somewhere in between buffer text and modeline text. | |
270 | |
271 Redisplay commentary: Everything in redisplay is tied very tightly | |
272 to the things that are being displayed, and the context, | |
273 e.g. buffers and windows. According to Chuck this is so that we can | |
274 get speed, which seems fine to me, however this usage is extended | |
275 too far down the redispay routines IMO. At some level there should | |
276 be functions that know how to display strings with extents and | |
277 faces, regardless of buffer etc. After all the window system does | |
278 not care. <andy@xemacs.org> */ | |
279 | 235 |
280 typedef struct display_line display_line; | 236 typedef struct display_line display_line; |
281 struct display_line | 237 struct display_line |
282 { | 238 { |
283 short ypos; /* vertical position in pixels | 239 short ypos; /* vertical position in pixels |
289 pixels below the baseline. | 245 pixels below the baseline. |
290 The descent includes the baseline | 246 The descent includes the baseline |
291 pixel-row itself, I think. */ | 247 pixel-row itself, I think. */ |
292 unsigned short clip; /* amount of bottom of line to clip | 248 unsigned short clip; /* amount of bottom of line to clip |
293 in pixels.*/ | 249 in pixels.*/ |
294 unsigned short top_clip; /* amount of top of line to clip | |
295 in pixels.*/ | |
296 Bufpos bufpos; /* first buffer position on line */ | 250 Bufpos bufpos; /* first buffer position on line */ |
297 Bufpos end_bufpos; /* last buffer position on line */ | 251 Bufpos end_bufpos; /* last buffer position on line */ |
298 Charcount offset; /* adjustment to bufpos vals */ | 252 Charcount offset; /* adjustment to bufpos vals */ |
299 Charcount num_chars; /* # of chars on line | 253 Charcount num_chars; /* # of chars on line |
300 including expansion of tabs | 254 including expansion of tabs |
306 | 260 |
307 layout_bounds bounds; /* line boundary positions */ | 261 layout_bounds bounds; /* line boundary positions */ |
308 | 262 |
309 char modeline; /* t if this line is a modeline */ | 263 char modeline; /* t if this line is a modeline */ |
310 | 264 |
311 char line_continuation; /* t if this line continues to | |
312 next display line. */ | |
313 | |
314 /* Dynamic array of display blocks */ | 265 /* Dynamic array of display blocks */ |
315 display_block_dynarr *display_blocks; | 266 display_block_dynarr *display_blocks; |
316 | 267 |
317 /* Dynamic arrays of left and right glyph blocks */ | 268 /* Dynamic arrays of left and right glyph blocks */ |
318 glyph_block_dynarr *left_glyphs; | 269 glyph_block_dynarr *left_glyphs; |
319 glyph_block_dynarr *right_glyphs; | 270 glyph_block_dynarr *right_glyphs; |
320 | |
321 face_index left_margin_findex; | |
322 face_index right_margin_findex; | |
323 face_index default_findex; | |
324 }; | 271 }; |
325 | 272 |
326 #define DISPLAY_LINE_HEIGHT(dl) \ | 273 #define DISPLAY_LINE_HEIGHT(dl) \ |
327 (dl->ascent + dl->descent - (dl->clip + dl->top_clip)) | 274 (dl->ascent + dl->descent - dl->clip) |
328 #define DISPLAY_LINE_YPOS(dl) \ | 275 #define DISPLAY_LINE_YPOS(dl) \ |
329 (dl->ypos - (dl->ascent - dl->top_clip)) | 276 (dl->ypos - dl->ascent) |
330 #define DISPLAY_LINE_YEND(dl) \ | |
331 ((dl->ypos + dl->descent) - dl->clip) | |
332 | 277 |
333 typedef struct | 278 typedef struct |
334 { | 279 { |
335 Dynarr_declare (display_line); | 280 Dynarr_declare (display_line); |
336 } display_line_dynarr; | 281 } display_line_dynarr; |
337 | |
338 /* The following two structures are used to represent an area to | |
339 displayed and where to display it. Using these two structures all | |
340 combinations of clipping and position can be accommodated. */ | |
341 | |
342 /* This represents an area to be displayed into. */ | |
343 typedef struct display_box display_box; | |
344 struct display_box | |
345 { | |
346 int xpos; /* absolute horizontal position of area */ | |
347 int ypos; /* absolute vertical position of area */ | |
348 int width, height; | |
349 }; | |
350 | |
351 /* This represents the area from a glyph to be displayed. */ | |
352 typedef struct display_glyph_area display_glyph_area; | |
353 struct display_glyph_area | |
354 { | |
355 int xoffset; /* horizontal offset of the glyph, +ve means | |
356 display the glyph with x offset by xoffset, | |
357 -ve means display starting xoffset into the | |
358 glyph. */ | |
359 int yoffset; /* vertical offset of the glyph, +ve means | |
360 display the glyph with y offset by yoffset, | |
361 -ve means display starting xoffset into the | |
362 glyph. */ | |
363 int width, height; /* width and height of glyph to display. */ | |
364 }; | |
365 | 282 |
366 /* It could be argued that the following two structs belong in | 283 /* It could be argued that the following two structs belong in |
367 extents.h, but they're only used by redisplay and it simplifies | 284 extents.h, but they're only used by redisplay and it simplifies |
368 the header files to put them here. */ | 285 the header files to put them here. */ |
369 | 286 |
396 unsigned int invisible_ellipses:1; | 313 unsigned int invisible_ellipses:1; |
397 unsigned int previously_invisible:1; | 314 unsigned int previously_invisible:1; |
398 unsigned int invisible_ellipses_already_displayed:1; | 315 unsigned int invisible_ellipses_already_displayed:1; |
399 }; | 316 }; |
400 | 317 |
401 #define EDGE_TOP 1 | |
402 #define EDGE_LEFT 2 | |
403 #define EDGE_BOTTOM 4 | |
404 #define EDGE_RIGHT 8 | |
405 #define EDGE_ALL (EDGE_TOP | EDGE_LEFT | EDGE_BOTTOM | EDGE_RIGHT) | |
406 | |
407 | 318 |
408 /*************************************************************************/ | 319 /*************************************************************************/ |
409 /* change flags */ | 320 /* change flags */ |
410 /*************************************************************************/ | 321 /*************************************************************************/ |
411 | 322 |
416 appropriate flag. | 327 appropriate flag. |
417 | 328 |
418 If any of these flags are set, redisplay will look more carefully | 329 If any of these flags are set, redisplay will look more carefully |
419 to see if anything has really changed. */ | 330 to see if anything has really changed. */ |
420 | 331 |
421 /* Nonzero if the contents of a buffer have changed since the last time | 332 /* non-nil if the contents of a buffer have changed since the last time |
422 redisplay completed. */ | 333 redisplay completed */ |
423 extern int buffers_changed; | 334 extern int buffers_changed; |
424 extern int buffers_changed_set; | 335 extern int buffers_changed_set; |
425 | 336 |
426 /* Nonzero if head_clip or tail_clip of a buffer has changed | 337 /* Nonzero if head_clip or tail_clip of a buffer has changed |
427 since last redisplay that finished. */ | 338 since last redisplay that finished */ |
428 extern int clip_changed; | 339 extern int clip_changed; |
429 extern int clip_changed_set; | 340 extern int clip_changed_set; |
430 | 341 |
431 /* Nonzero if any extent has changed since the last time redisplay completed. */ | 342 /* non-nil if any extent has changed since the last time redisplay completed */ |
432 extern int extents_changed; | 343 extern int extents_changed; |
433 extern int extents_changed_set; | 344 extern int extents_changed_set; |
434 | 345 |
435 /* Nonzero if any face has changed since the last time redisplay completed. */ | 346 /* non-nil if any face has changed since the last time redisplay completed */ |
436 extern int faces_changed; | 347 extern int faces_changed; |
437 | 348 |
438 /* Nonzero means one or more frames have been marked as garbaged. */ | 349 /* Nonzero means one or more frames have been marked as garbaged */ |
439 extern int frame_changed; | 350 extern int frame_changed; |
440 | 351 |
441 /* True if any of the builtin display glyphs (continuation, | 352 /* True if any of the builtin display glyphs (continuation, |
442 hscroll, control-arrow, etc) is in need of updating | 353 hscroll, control-arrow, etc) is in need of updating |
443 somewhere. */ | 354 somewhere. */ |
447 /* True if any displayed subwindow is in need of updating | 358 /* True if any displayed subwindow is in need of updating |
448 somewhere. */ | 359 somewhere. */ |
449 extern int subwindows_changed; | 360 extern int subwindows_changed; |
450 extern int subwindows_changed_set; | 361 extern int subwindows_changed_set; |
451 | 362 |
452 /* True if any displayed subwindow is in need of updating | |
453 somewhere. */ | |
454 extern int subwindows_state_changed; | |
455 extern int subwindows_state_changed_set; | |
456 | |
457 /* True if an icon is in need of updating somewhere. */ | 363 /* True if an icon is in need of updating somewhere. */ |
458 extern int icon_changed; | 364 extern int icon_changed; |
459 extern int icon_changed_set; | 365 extern int icon_changed_set; |
460 | 366 |
461 /* True if a menubar is in need of updating somewhere. */ | 367 /* True if a menubar is in need of updating somewhere. */ |
462 extern int menubar_changed; | 368 extern int menubar_changed; |
463 extern int menubar_changed_set; | 369 extern int menubar_changed_set; |
464 | 370 |
465 /* True iff we should redraw the modelines on the next redisplay. */ | 371 /* true iff we should redraw the modelines on the next redisplay */ |
466 extern int modeline_changed; | 372 extern int modeline_changed; |
467 extern int modeline_changed_set; | 373 extern int modeline_changed_set; |
468 | 374 |
469 /* Nonzero if point has changed in some buffer since the last time | 375 /* non-nil if point has changed in some buffer since the last time |
470 redisplay completed. */ | 376 redisplay completed */ |
471 extern int point_changed; | 377 extern int point_changed; |
472 extern int point_changed_set; | 378 extern int point_changed_set; |
473 | 379 |
474 /* Nonzero if some frame has changed its size. */ | 380 /* non-nil if some frame has changed its size */ |
475 extern int size_changed; | 381 extern int size_changed; |
476 | 382 |
477 /* Nonzero if some device has signaled that it wants to change size. */ | 383 /* non-nil if some device has signaled that it wants to change size */ |
478 extern int asynch_device_change_pending; | 384 extern int asynch_device_change_pending; |
479 | 385 |
480 /* Nonzero if any toolbar has changed. */ | 386 /* non-nil if any toolbar has changed */ |
481 extern int toolbar_changed; | 387 extern int toolbar_changed; |
482 extern int toolbar_changed_set; | 388 extern int toolbar_changed_set; |
483 | 389 |
484 /* Nonzero if any gutter has changed. */ | 390 /* non-nil if any window has changed since the last time redisplay completed */ |
485 extern int gutter_changed; | |
486 extern int gutter_changed_set; | |
487 | |
488 /* Nonzero if any window has changed since the last time redisplay completed */ | |
489 extern int windows_changed; | 391 extern int windows_changed; |
490 | 392 |
491 /* Nonzero if any frame's window structure has changed since the last | 393 /* non-nil if any frame's window structure has changed since the last |
492 time redisplay completed. */ | 394 time redisplay completed */ |
493 extern int windows_structure_changed; | 395 extern int windows_structure_changed; |
494 | 396 |
495 /* These macros can be relatively expensive. Since they are often | 397 /* These macros can be relatively expensive. Since they are often |
496 called numerous times between each call to redisplay, we keep track | 398 called numerous times between each call to redisplay, we keep track |
497 if each has already been called and don't bother doing most of the | 399 if each has already been called and don't bother doing most of the |
522 #define MARK_ICON_CHANGED MARK_TYPE_CHANGED (icon) | 424 #define MARK_ICON_CHANGED MARK_TYPE_CHANGED (icon) |
523 #define MARK_MENUBAR_CHANGED MARK_TYPE_CHANGED (menubar) | 425 #define MARK_MENUBAR_CHANGED MARK_TYPE_CHANGED (menubar) |
524 #define MARK_MODELINE_CHANGED MARK_TYPE_CHANGED (modeline) | 426 #define MARK_MODELINE_CHANGED MARK_TYPE_CHANGED (modeline) |
525 #define MARK_POINT_CHANGED MARK_TYPE_CHANGED (point) | 427 #define MARK_POINT_CHANGED MARK_TYPE_CHANGED (point) |
526 #define MARK_TOOLBAR_CHANGED MARK_TYPE_CHANGED (toolbar) | 428 #define MARK_TOOLBAR_CHANGED MARK_TYPE_CHANGED (toolbar) |
527 #define MARK_GUTTER_CHANGED MARK_TYPE_CHANGED (gutter) | |
528 #define MARK_GLYPHS_CHANGED MARK_TYPE_CHANGED (glyphs) | 429 #define MARK_GLYPHS_CHANGED MARK_TYPE_CHANGED (glyphs) |
529 #define MARK_SUBWINDOWS_CHANGED MARK_TYPE_CHANGED (subwindows) | 430 #define MARK_SUBWINDOWS_CHANGED MARK_TYPE_CHANGED (subwindows) |
530 #define MARK_SUBWINDOWS_STATE_CHANGED MARK_TYPE_CHANGED (subwindows_state) | |
531 | |
532 | |
533 #define CLASS_RESET_CHANGED_FLAGS(p) do { \ | |
534 (p)->buffers_changed = 0; \ | |
535 (p)->clip_changed = 0; \ | |
536 (p)->extents_changed = 0; \ | |
537 (p)->faces_changed = 0; \ | |
538 (p)->frame_changed = 0; \ | |
539 (p)->icon_changed = 0; \ | |
540 (p)->menubar_changed = 0; \ | |
541 (p)->modeline_changed = 0; \ | |
542 (p)->point_changed = 0; \ | |
543 (p)->toolbar_changed = 0; \ | |
544 (p)->gutter_changed = 0; \ | |
545 (p)->glyphs_changed = 0; \ | |
546 (p)->subwindows_changed = 0; \ | |
547 (p)->subwindows_state_changed = 0; \ | |
548 (p)->windows_changed = 0; \ | |
549 (p)->windows_structure_changed = 0; \ | |
550 } while (0) | |
551 | |
552 #define GLOBAL_RESET_CHANGED_FLAGS do { \ | |
553 buffers_changed = 0; \ | |
554 clip_changed = 0; \ | |
555 extents_changed = 0; \ | |
556 frame_changed = 0; \ | |
557 icon_changed = 0; \ | |
558 menubar_changed = 0; \ | |
559 modeline_changed = 0; \ | |
560 point_changed = 0; \ | |
561 toolbar_changed = 0; \ | |
562 gutter_changed = 0; \ | |
563 glyphs_changed = 0; \ | |
564 subwindows_changed = 0; \ | |
565 subwindows_state_changed = 0; \ | |
566 windows_changed = 0; \ | |
567 windows_structure_changed = 0; \ | |
568 } while (0) | |
569 | |
570 #define CLASS_REDISPLAY_FLAGS_CHANGEDP(p) \ | |
571 ( (p)->buffers_changed || \ | |
572 (p)->clip_changed || \ | |
573 (p)->extents_changed || \ | |
574 (p)->faces_changed || \ | |
575 (p)->frame_changed || \ | |
576 (p)->icon_changed || \ | |
577 (p)->menubar_changed || \ | |
578 (p)->modeline_changed || \ | |
579 (p)->point_changed || \ | |
580 (p)->toolbar_changed || \ | |
581 (p)->gutter_changed || \ | |
582 (p)->glyphs_changed || \ | |
583 (p)->size_changed || \ | |
584 (p)->subwindows_changed || \ | |
585 (p)->subwindows_state_changed || \ | |
586 (p)->windows_changed || \ | |
587 (p)->windows_structure_changed ) | |
588 | |
589 #define GLOBAL_REDISPLAY_FLAGS_CHANGEDP \ | |
590 ( buffers_changed || \ | |
591 clip_changed || \ | |
592 extents_changed || \ | |
593 faces_changed || \ | |
594 frame_changed || \ | |
595 icon_changed || \ | |
596 menubar_changed || \ | |
597 modeline_changed || \ | |
598 point_changed || \ | |
599 toolbar_changed || \ | |
600 gutter_changed || \ | |
601 glyphs_changed || \ | |
602 size_changed || \ | |
603 subwindows_changed || \ | |
604 subwindows_state_changed || \ | |
605 windows_changed || \ | |
606 windows_structure_changed ) | |
607 | |
608 | 431 |
609 /* Anytime a console, device or frame is added or deleted we need to reset | 432 /* Anytime a console, device or frame is added or deleted we need to reset |
610 these flags. */ | 433 these flags. */ |
611 #define RESET_CHANGED_SET_FLAGS do { \ | 434 #define RESET_CHANGED_SET_FLAGS \ |
612 buffers_changed_set = 0; \ | 435 do { \ |
613 clip_changed_set = 0; \ | 436 buffers_changed_set = 0; \ |
614 extents_changed_set = 0; \ | 437 clip_changed_set = 0; \ |
615 icon_changed_set = 0; \ | 438 extents_changed_set = 0; \ |
616 menubar_changed_set = 0; \ | 439 icon_changed_set = 0; \ |
617 modeline_changed_set = 0; \ | 440 menubar_changed_set = 0; \ |
618 point_changed_set = 0; \ | 441 modeline_changed_set = 0; \ |
619 toolbar_changed_set = 0; \ | 442 point_changed_set = 0; \ |
620 gutter_changed_set = 0; \ | 443 toolbar_changed_set = 0; \ |
621 glyphs_changed_set = 0; \ | 444 glyphs_changed_set = 0; \ |
622 subwindows_changed_set = 0; \ | 445 subwindows_changed_set = 0; \ |
623 subwindows_state_changed_set = 0; \ | 446 } while (0) |
624 } while (0) | |
625 | 447 |
626 | 448 |
627 /*************************************************************************/ | 449 /*************************************************************************/ |
628 /* redisplay global variables */ | 450 /* redisplay global variables */ |
629 /*************************************************************************/ | 451 /*************************************************************************/ |
640 /* Nonzero means no need to redraw the entire frame on resuming | 462 /* Nonzero means no need to redraw the entire frame on resuming |
641 a suspended Emacs. This is useful on terminals with multiple pages, | 463 a suspended Emacs. This is useful on terminals with multiple pages, |
642 where one page is used for Emacs and another for all else. */ | 464 where one page is used for Emacs and another for all else. */ |
643 extern int no_redraw_on_reenter; | 465 extern int no_redraw_on_reenter; |
644 | 466 |
645 /* Non-nil means flash the frame instead of ringing the bell. */ | 467 /* Nonzero means flash the frame instead of ringing the bell. */ |
646 extern Lisp_Object Vvisible_bell; | 468 extern int visible_bell; |
647 | 469 |
648 /* Thickness of shadow border around 3D modelines. */ | 470 /* Thickness of shadow border around 3D modelines. */ |
649 extern Lisp_Object Vmodeline_shadow_thickness; | 471 extern Lisp_Object Vmodeline_shadow_thickness; |
650 | 472 |
651 /* Scroll if point lands on the bottom line and that line is partially | 473 /* Scroll if point lands on the bottom line and that line is partially |
661 /* If non-zero, a window-system was specified on the command line. | 483 /* If non-zero, a window-system was specified on the command line. |
662 Defined in emacs.c. */ | 484 Defined in emacs.c. */ |
663 extern int display_arg; | 485 extern int display_arg; |
664 | 486 |
665 /* Type of display specified. Defined in emacs.c. */ | 487 /* Type of display specified. Defined in emacs.c. */ |
666 extern const char *display_use; | 488 extern CONST char *display_use; |
667 | 489 |
668 /* Nonzero means reading single-character input with prompt | 490 /* Nonzero means reading single-character input with prompt |
669 so put cursor on minibuffer after the prompt. */ | 491 so put cursor on minibuffer after the prompt. */ |
670 | 492 |
671 extern int cursor_in_echo_area; | 493 extern int cursor_in_echo_area; |
672 | 494 |
673 extern Lisp_Object Qbar_cursor, Qcursor_in_echo_area, Vwindow_system; | 495 extern Lisp_Object Qbar_cursor, Qcursor_in_echo_area, Vwindow_system; |
674 | |
675 extern Lisp_Object Qtop_bottom; | |
676 | 496 |
677 | 497 |
678 /*************************************************************************/ | 498 /*************************************************************************/ |
679 /* redisplay exported functions */ | 499 /* redisplay exported functions */ |
680 /*************************************************************************/ | 500 /*************************************************************************/ |
686 int redisplay_frame_text_width_string (struct frame *f, | 506 int redisplay_frame_text_width_string (struct frame *f, |
687 Lisp_Object face, | 507 Lisp_Object face, |
688 Bufbyte *nonreloc, | 508 Bufbyte *nonreloc, |
689 Lisp_Object reloc, | 509 Lisp_Object reloc, |
690 Bytecount offset, Bytecount len); | 510 Bytecount offset, Bytecount len); |
691 int redisplay_frame (struct frame *f, int preemption_check); | |
692 void redisplay (void); | 511 void redisplay (void); |
693 struct display_block *get_display_block_from_line (struct display_line *dl, | 512 struct display_block *get_display_block_from_line (struct display_line *dl, |
694 enum display_type type); | 513 enum display_type type); |
695 layout_bounds calculate_display_line_boundaries (struct window *w, | 514 layout_bounds calculate_display_line_boundaries (struct window *w, |
696 int modeline); | 515 int modeline); |
698 Bufpos point); | 517 Bufpos point); |
699 int line_at_center (struct window *w, int type, Bufpos start, Bufpos point); | 518 int line_at_center (struct window *w, int type, Bufpos start, Bufpos point); |
700 int window_half_pixpos (struct window *w); | 519 int window_half_pixpos (struct window *w); |
701 void redisplay_echo_area (void); | 520 void redisplay_echo_area (void); |
702 void free_display_structs (struct window_mirror *mir); | 521 void free_display_structs (struct window_mirror *mir); |
703 void free_display_lines (display_line_dynarr *dla); | 522 Bufbyte *generate_formatted_string (struct window *w, Lisp_Object format_str, |
704 void mark_redisplay_structs (display_line_dynarr *dla); | 523 Lisp_Object result_str, face_index findex, |
705 void generate_displayable_area (struct window *w, Lisp_Object disp_string, | 524 int type); |
706 int xpos, int ypos, int width, int height, | |
707 display_line_dynarr* dl, | |
708 Bufpos start_pos, face_index default_face); | |
709 /* `generate_title_string' in frame.c needs this */ | |
710 void generate_formatted_string_db (Lisp_Object format_str, | |
711 Lisp_Object result_str, | |
712 struct window *w, | |
713 struct display_line *dl, | |
714 struct display_block *db, | |
715 face_index findex, | |
716 int min_pixpos, int max_pixpos, int type); | |
717 int real_current_modeline_height (struct window *w); | 525 int real_current_modeline_height (struct window *w); |
718 int pixel_to_glyph_translation (struct frame *f, int x_coord, | 526 int pixel_to_glyph_translation (struct frame *f, int x_coord, |
719 int y_coord, int *col, int *row, | 527 int y_coord, int *col, int *row, |
720 int *obj_x, int *obj_y, | 528 int *obj_x, int *obj_y, |
721 struct window **w, Bufpos *bufpos, | 529 struct window **w, Bufpos *bufpos, |
722 Bufpos *closest, Charcount *modeline_closest, | 530 Bufpos *closest, Charcount *modeline_closest, |
723 Lisp_Object *obj1, Lisp_Object *obj2); | 531 Lisp_Object *obj1, Lisp_Object *obj2); |
724 void glyph_to_pixel_translation (struct window *w, int char_x, | 532 void glyph_to_pixel_translation (struct window *w, int char_x, |
725 int char_y, int *pix_x, int *pix_y); | 533 int char_y, int *pix_x, int *pix_y); |
726 void mark_redisplay (void); | 534 void mark_redisplay (void (*) (Lisp_Object)); |
727 int point_in_line_start_cache (struct window *w, Bufpos point, | 535 int point_in_line_start_cache (struct window *w, Bufpos point, |
728 int min_past); | 536 int min_past); |
729 int point_would_be_visible (struct window *w, Bufpos startp, | 537 int point_would_be_visible (struct window *w, Bufpos startp, |
730 Bufpos point); | 538 Bufpos point); |
731 Bufpos start_of_last_line (struct window *w, Bufpos startp); | 539 Bufpos start_of_last_line (struct window *w, Bufpos startp); |
749 | 557 |
750 /* defined in redisplay-output.c */ | 558 /* defined in redisplay-output.c */ |
751 int get_next_display_block (layout_bounds bounds, | 559 int get_next_display_block (layout_bounds bounds, |
752 display_block_dynarr *dba, int start_pos, | 560 display_block_dynarr *dba, int start_pos, |
753 int *next_start); | 561 int *next_start); |
754 void redisplay_output_layout (struct window *w, | 562 void redisplay_output_subwindow (struct window *w, struct display_line *dl, |
755 Lisp_Object image_instance, | 563 Lisp_Object image_instance, int xpos, |
756 struct display_box* db, struct display_glyph_area* dga, | 564 int xoffset, int start_pixpos, int width, |
757 face_index findex, int cursor_start, int cursor_width, | 565 face_index findex, int cursor_start, |
758 int cursor_height); | 566 int cursor_width, int cursor_height); |
759 void redisplay_output_subwindow (struct window *w, | |
760 Lisp_Object image_instance, | |
761 struct display_box* db, struct display_glyph_area* dga, | |
762 face_index findex, int cursor_start, int cursor_width, | |
763 int cursor_height); | |
764 void redisplay_unmap_subwindows_maybe (struct frame* f, int x, int y, int width, int height); | 567 void redisplay_unmap_subwindows_maybe (struct frame* f, int x, int y, int width, int height); |
765 void redisplay_output_pixmap (struct window *w, | |
766 Lisp_Object image_instance, | |
767 struct display_box* db, struct display_glyph_area* dga, | |
768 face_index findex, int cursor_start, int cursor_width, | |
769 int cursor_height, int offset_bitmap); | |
770 int redisplay_calculate_display_boxes (struct display_line *dl, int xpos, | |
771 int xoffset, int start_pixpos, int width, | |
772 struct display_box* dest, | |
773 struct display_glyph_area* src); | |
774 int redisplay_normalize_glyph_area (struct display_box* dest, | |
775 struct display_glyph_area* glyphsrc); | |
776 void redisplay_clear_to_window_end (struct window *w, int ypos1, int ypos2); | |
777 void redisplay_clear_region (Lisp_Object window, face_index findex, int x, | 568 void redisplay_clear_region (Lisp_Object window, face_index findex, int x, |
778 int y, int width, int height); | 569 int y, int width, int height); |
779 void redisplay_clear_bottom_of_window (struct window *w, | 570 void redisplay_clear_bottom_of_window (struct window *w, |
780 display_line_dynarr *ddla, | 571 display_line_dynarr *ddla, |
781 int min_start, int max_end); | 572 int min_start, int max_end); |
782 void redisplay_update_line (struct window *w, int first_line, | 573 void redisplay_update_line (struct window *w, int first_line, |
783 int last_line, int update_values); | 574 int last_line, int update_values); |
784 void redisplay_output_window (struct window *w); | 575 void redisplay_output_window (struct window *w); |
785 void bevel_modeline (struct window *w, struct display_line *dl); | |
786 int redisplay_move_cursor (struct window *w, Bufpos new_point, | 576 int redisplay_move_cursor (struct window *w, Bufpos new_point, |
787 int no_output_end); | 577 int no_output_end); |
788 void redisplay_redraw_cursor (struct frame *f, int run_begin_end_meths); | 578 void redisplay_redraw_cursor (struct frame *f, int run_begin_end_meths); |
789 void output_display_line (struct window *w, display_line_dynarr *cdla, | 579 void output_display_line (struct window *w, display_line_dynarr *cdla, |
790 display_line_dynarr *ddla, int line, | 580 display_line_dynarr *ddla, int line, |
791 int force_start, int force_end); | 581 int force_start, int force_end); |
792 void sync_display_line_structs (struct window *w, int line, int do_blocks, | 582 |
793 display_line_dynarr *cdla, | 583 #endif /* _XEMACS_REDISPLAY_H_ */ |
794 display_line_dynarr *ddla); | |
795 | |
796 #endif /* INCLUDED_redisplay_h_ */ |