diff options
author | Eli Zaretskii <eliz@gnu.org> | 2021-01-27 17:52:51 +0200 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2021-01-27 17:52:51 +0200 |
commit | ff0341126918e36777d1b85a3661577442b574cb (patch) | |
tree | 4374511042f0efc9a1305ef252830011ec22a625 /src/w32term.c | |
parent | 12095de8b918b3c44c603bf88bc98f1842910f86 (diff) | |
download | emacs-ff0341126918e36777d1b85a3661577442b574cb.tar.gz emacs-ff0341126918e36777d1b85a3661577442b574cb.tar.bz2 emacs-ff0341126918e36777d1b85a3661577442b574cb.zip |
Fix display of stretches of whitespace in the display margins
* src/xdisp.c (produce_stretch_glyph): Truncate the stretch glyph
due to line wrap only when drawing in the text area.
* src/xterm.c (x_draw_stretch_glyph_string):
* src/w32term.c (w32_draw_stretch_glyph_string): Fix the
adjustment of the stretch X and width so that stretch glyphs could
be drawn in the left margin. Reported by Paul W. Rankin
<pwr@bydasein.com>.
Diffstat (limited to 'src/w32term.c')
-rw-r--r-- | src/w32term.c | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/src/w32term.c b/src/w32term.c index 109aa58d732..0ee805a8526 100644 --- a/src/w32term.c +++ b/src/w32term.c @@ -2404,14 +2404,29 @@ w32_draw_stretch_glyph_string (struct glyph_string *s) else if (!s->background_filled_p) { int background_width = s->background_width; - int x = s->x, left_x = window_box_left_offset (s->w, TEXT_AREA); + int x = s->x, text_left_x = window_box_left_offset (s->w, TEXT_AREA); - /* Don't draw into left margin, fringe or scrollbar area - except for header line and mode line. */ - if (x < left_x && !s->row->mode_line_p) + /* Don't draw into left fringe or scrollbar area except for + header line and mode line. */ + if (x < text_left_x && !s->row->mode_line_p) { - background_width -= left_x - x; - x = left_x; + int left_x = WINDOW_LEFT_SCROLL_BAR_AREA_WIDTH (s->w); + int right_x = text_left_x; + + if (WINDOW_HAS_FRINGES_OUTSIDE_MARGINS (s->w)) + left_x += WINDOW_LEFT_FRINGE_WIDTH (s->w); + else + right_x -= WINDOW_LEFT_FRINGE_WIDTH (s->w); + + /* Adjust X and BACKGROUND_WIDTH to fit inside the space + between LEFT_X and RIGHT_X. */ + if (x < left_x) + { + background_width -= left_x - x; + x = left_x; + } + if (x + background_width > right_x) + background_width = right_x - x; } if (background_width > 0) w32_draw_glyph_string_bg_rect (s, x, s->y, background_width, s->height); |