Fix wrong overhang display for gstring compositions (Bug#12364).

* xdisp.c (right_overwritten, right_overwriting): Also handle gstring
composition cases (Bug#12364).

* xterm.c (x_draw_glyph_string): Avoid overwriting inverted left
overhang of succeeding glyphs overlapping box cursor.

* w32term.c (x_draw_glyph_string): Likewise.
This commit is contained in:
YAMAMOTO Mitsuharu 2012-09-11 12:32:41 +09:00
parent c990426a98
commit 3057e615af
4 changed files with 16 additions and 2 deletions

View file

@ -1,3 +1,13 @@
2012-09-11 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
* xdisp.c (right_overwritten, right_overwriting): Also handle gstring
composition cases (Bug#12364).
* xterm.c (x_draw_glyph_string): Avoid overwriting inverted left
overhang of succeeding glyphs overlapping box cursor.
* w32term.c (x_draw_glyph_string): Likewise.
2012-09-11 Paul Eggert <eggert@cs.ucla.edu>
Simplify, document, and port floating-point (Bug#12381).

View file

@ -2591,6 +2591,7 @@ x_draw_glyph_string (struct glyph_string *s)
w32_set_clip_rectangle (next->hdc, NULL);
next->hl = save;
next->num_clips = 0;
next->clip_head = s->next;
}
}
}

View file

@ -23050,7 +23050,8 @@ right_overwritten (struct glyph_string *s)
{
int x = 0, i;
struct glyph *glyphs = s->row->glyphs[s->area];
int first = (s->first_glyph - glyphs) + (s->cmp ? 1 : s->nchars);
int first = (s->first_glyph - glyphs
+ (s->first_glyph->type == COMPOSITE_GLYPH ? 1 : s->nchars));
int end = s->row->used[s->area];
for (i = first; i < end && s->right_overhang > x; ++i)
@ -23073,7 +23074,8 @@ right_overwriting (struct glyph_string *s)
int i, k, x;
int end = s->row->used[s->area];
struct glyph *glyphs = s->row->glyphs[s->area];
int first = (s->first_glyph - glyphs) + (s->cmp ? 1 : s->nchars);
int first = (s->first_glyph - glyphs
+ (s->first_glyph->type == COMPOSITE_GLYPH ? 1 : s->nchars));
k = -1;
x = 0;

View file

@ -2975,6 +2975,7 @@ x_draw_glyph_string (struct glyph_string *s)
XSetClipMask (next->display, next->gc, None);
next->hl = save;
next->num_clips = 0;
next->clip_head = s->next;
}
}
}