mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-17 01:34:21 +00:00
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>.
This commit is contained in:
parent
12095de8b9
commit
ff03411269
3 changed files with 44 additions and 13 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -29813,7 +29813,8 @@ produce_stretch_glyph (struct it *it)
|
|||
#endif /* HAVE_WINDOW_SYSTEM */
|
||||
height = 1;
|
||||
|
||||
if (width > 0 && it->line_wrap != TRUNCATE
|
||||
if (width > 0
|
||||
&& it->area == TEXT_AREA && it->line_wrap != TRUNCATE
|
||||
&& it->current_x + width > it->last_visible_x)
|
||||
{
|
||||
width = it->last_visible_x - it->current_x;
|
||||
|
|
|
|||
27
src/xterm.c
27
src/xterm.c
|
|
@ -3585,14 +3585,29 @@ x_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)
|
||||
x_draw_glyph_string_bg_rect (s, x, s->y, background_width, s->height);
|
||||
|
|
|
|||
Loading…
Reference in a new issue