Mercurial > emacs
changeset 25185:d3614d7b7583
(struct glyph_row): Add overlapping_p.
(MATRIX_ROW_OVERLAPS_PRED_P): New.
(MATRIX_ROW_OVERLAPS_SUCC_P): New.
(struct glyph_row): Add flag overlapped_p.
(MATRIX_ROW_OVERLAPPING_P): New.
(struct redisplay_interface): Add
fix_overlapping_area.
(struct glyph): Add overlaps_vertically_p.
(struct glyph_row): Add phys_ascent and
phys_height.
(struct it): Add phys_ascent, phys_descent, max_phys_ascent,
max_phys_descent.
author | Gerd Moellmann <gerd@gnu.org> |
---|---|
date | Fri, 06 Aug 1999 13:59:29 +0000 |
parents | 290fceb2b1c0 |
children | d6c941334567 |
files | src/dispextern.h |
diffstat | 1 files changed, 38 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/dispextern.h Fri Aug 06 11:45:48 1999 +0000 +++ b/src/dispextern.h Fri Aug 06 13:59:29 1999 +0000 @@ -262,6 +262,11 @@ unsigned left_box_line_p : 1; unsigned right_box_line_p : 1; + /* Non-zero means this glyph's physical ascent or descent is greater + than its logical ascent/descent, i.e. it may potentially overlap + glyphs above or below it. */ + unsigned overlaps_vertically_p : 1; + /* A union of sub-structures for different glyph types. */ union { @@ -563,10 +568,15 @@ end of the row into account. */ int pixel_width; - /* Height information. The value of ascent is zero and height is 1 - on terminal frames. */ + /* Logical ascent/height of this line. The value of ascent is zero + and height is 1 on terminal frames. */ int ascent, height; + /* Physical ascent/height of this line. If max_ascent > ascent, + this line overlaps the line above it on the display. Otherwise, + if max_height > height, this line overlaps the line beneath it. */ + int phys_ascent, phys_height; + /* Portion of row that is visible. Partially visible rows may be found at the top and bottom of a window. This is 1 for tty frames. It may be < 0 in case of completely invisible rows. */ @@ -639,6 +649,12 @@ /* Non-zero means row is a mode or top-line. */ unsigned mode_line_p : 1; + /* 1 in a current row means this row is overlapped by another row. */ + unsigned overlapped_p : 1; + + /* 1 in a current row means this row overlaps others. */ + unsigned overlapping_p : 1; + /* Continuation lines width at the start of the row. */ int continuation_lines_width; }; @@ -778,7 +794,17 @@ || ((ROW)->start.overlay_string_index >= 0 \ && (ROW)->start.string_pos.charpos > 0)) - +/* Non-zero means ROW overlaps its predecessor. */ + +#define MATRIX_ROW_OVERLAPS_PRED_P(ROW) \ + ((ROW)->phys_ascent > (ROW)->ascent) + +/* Non-zero means ROW overlaps its successor. */ + +#define MATRIX_ROW_OVERLAPS_SUCC_P(ROW) \ + ((ROW)->phys_height - (ROW)->phys_ascent \ + > (ROW)->height - (ROW)->ascent) + /* Non-zero means that fonts have been loaded since the last glyph matrix adjustments. The function redisplay_internal adjusts glyph matrices when this flag is non-zero. */ @@ -1638,9 +1664,10 @@ produce_glyphs. */ int pixel_width; - /* Current and maximum line height information. Result of - produce_glyphs. */ + /* Current, maximum logical, and maximum physical line height + information. Result of produce_glyphs. */ int ascent, descent, max_ascent, max_descent; + int phys_ascent, phys_descent, max_phys_ascent, max_phys_descent; /* Current x pixel position within the display line. This value does not include the width of continuation lines in front of the @@ -1781,6 +1808,12 @@ frame F. */ void (*get_glyph_overhangs) P_ ((struct glyph *glyph, struct frame *f, int *left, int *right)); + + /* Fix the display of AREA of ROW in window W for overlapping rows. + This function is called from redraw_overlapping_rows after + desired rows have been made current. */ + void (*fix_overlapping_area) P_ ((struct window *w, struct glyph_row *row, + enum glyph_row_area area)); }; /* The current interface for window-based redisplay. */