]> git.eshelyaron.com Git - emacs.git/commitdiff
(x_compute_glyph_string_overhangs): Handle the automatic
authorKenichi Handa <handa@m17n.org>
Thu, 11 Jun 2009 01:25:40 +0000 (01:25 +0000)
committerKenichi Handa <handa@m17n.org>
Thu, 11 Jun 2009 01:25:40 +0000 (01:25 +0000)
composition case.

src/ChangeLog
src/xterm.c

index 67bb245e71ff15356e074e24a05545d2ba76f171..37f160a040b1097105597ba746248a9db387db38 100644 (file)
@@ -1,3 +1,8 @@
+2009-06-11  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+
+       * xterm.c (x_compute_glyph_string_overhangs): Handle the automatic
+       composition case.
+
 2009-06-10  Chong Yidong  <cyd@stupidchicken.com>
 
        * xdisp.c (get_next_display_element): When handling wrap-prefix
index ec6c4d4011f9ad785461efee0b421d983ebce53d..4c516264902efb61fb676c5310e45817fbb38ceb 100644 (file)
@@ -1194,16 +1194,27 @@ x_compute_glyph_string_overhangs (s)
      struct glyph_string *s;
 {
   if (s->cmp == NULL
-      && s->first_glyph->type == CHAR_GLYPH)
+      && (s->first_glyph->type == CHAR_GLYPH
+         || s->first_glyph->type == COMPOSITE_GLYPH))
     {
-      unsigned *code = alloca (sizeof (unsigned) * s->nchars);
-      struct font *font = s->font;
       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;