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_ */