From 3057e615af94af8d08f475208c7e459f5d7115ac Mon Sep 17 00:00:00 2001 From: YAMAMOTO Mitsuharu Date: Tue, 11 Sep 2012 12:32:41 +0900 Subject: [PATCH] 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. --- src/ChangeLog | 10 ++++++++++ src/w32term.c | 1 + src/xdisp.c | 6 ++++-- src/xterm.c | 1 + 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 0e5bbfd252..362d0b775b 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,13 @@ +2012-09-11 YAMAMOTO Mitsuharu + + * 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 Simplify, document, and port floating-point (Bug#12381). diff --git a/src/w32term.c b/src/w32term.c index 571db3cbe8..28c1c593cf 100644 --- a/src/w32term.c +++ b/src/w32term.c @@ -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; } } } diff --git a/src/xdisp.c b/src/xdisp.c index a7913768d8..1deda68219 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -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; diff --git a/src/xterm.c b/src/xterm.c index f0f6702cd6..e5a5932bea 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -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; } } } -- 2.20.1