Mercurial > emacs
changeset 103376:62899a250517
(x_compute_glyph_string_overhangs): Handle the automatic
composition case.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Thu, 11 Jun 2009 01:24:20 +0000 |
parents | e8426f67383f |
children | acd98470dccd |
files | src/xterm.c |
diffstat | 1 files changed, 20 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/src/xterm.c Wed Jun 10 15:16:55 2009 +0000 +++ b/src/xterm.c Thu Jun 11 01:24:20 2009 +0000 @@ -1194,16 +1194,27 @@ struct glyph_string *s; { if (s->cmp == NULL - && s->first_glyph->type == CHAR_GLYPH) - { - unsigned *code = alloca (sizeof (unsigned) * s->nchars); - struct font *font = s->font; + && (s->first_glyph->type == CHAR_GLYPH + || s->first_glyph->type == COMPOSITE_GLYPH)) + { struct font_metrics metrics; - int i; - - for (i = 0; i < s->nchars; i++) - code[i] = (s->char2b[i].byte1 << 8) | s->char2b[i].byte2; - font->driver->text_extents (font, code, s->nchars, &metrics); + + if (s->first_glyph->type == CHAR_GLYPH) + { + unsigned *code = alloca (sizeof (unsigned) * s->nchars); + struct font *font = s->font; + int i; + + for (i = 0; i < s->nchars; i++) + code[i] = (s->char2b[i].byte1 << 8) | s->char2b[i].byte2; + font->driver->text_extents (font, code, s->nchars, &metrics); + } + else + { + Lisp_Object gstring = composition_gstring_from_id (s->cmp_id); + + composition_gstring_width (gstring, s->cmp_from, s->cmp_to, &metrics); + } s->right_overhang = (metrics.rbearing > metrics.width ? metrics.rbearing - metrics.width : 0); s->left_overhang = metrics.lbearing < 0 ? - metrics.lbearing : 0;