Mercurial > emacs
changeset 97831:cdeb60ce9393
(x_draw_composite_glyph_string_foreground): Adjusted
for the change of struct glyph_string.
(x_draw_glyph_string): Likewise.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Fri, 29 Aug 2008 07:57:31 +0000 |
parents | 62a07e57ef40 |
children | e33a2e6c1dab |
files | src/w32term.c |
diffstat | 1 files changed, 44 insertions(+), 43 deletions(-) [+] |
line wrap: on
line diff
--- a/src/w32term.c Fri Aug 29 07:57:13 2008 +0000 +++ b/src/w32term.c Fri Aug 29 07:57:31 2008 +0000 @@ -1341,6 +1341,7 @@ struct glyph_string *s; { int i, j, x; + struct font *font = s->font; /* If first glyph of S has a left box line, start drawing the text of S to the right of that box line. */ @@ -1350,9 +1351,9 @@ else x = s->x; - /* S is a glyph string for a composition. S->gidx is the index of - the first character drawn for glyphs of this composition. - S->gidx == 0 means we are drawing the very first character of + /* S is a glyph string for a composition. S->cmp_from is the index + of the first character drawn for glyphs of this composition. + S->cmp_from == 0 means we are drawing the very first character of this composition. */ SetTextColor (s->hdc, s->gc->foreground); @@ -1363,67 +1364,66 @@ first character of the composition could not be loaded. */ if (s->font_not_found_p) { - if (s->gidx == 0) + if (s->cmp_from == 0) w32_draw_rectangle (s->hdc, s->gc, x, s->y, s->width - 1, s->height - 1); } - else + else if (! s->first_glyph->u.cmp.automatic) { - struct font *font = s->font; int y = s->ybase; int width = 0; HFONT old_font; old_font = SelectObject (s->hdc, FONT_HANDLE (font)); - if (s->cmp->method == COMPOSITION_WITH_GLYPH_STRING) + for (i = 0, j = s->cmp_from; i < s->nchars; i++, j++) + if (COMPOSITION_GLYPH (s->cmp, j) != '\t') + { + int xx = x + s->cmp->offsets[j * 2]; + int yy = y - s->cmp->offsets[j * 2 + 1]; + + font->driver->draw (s, j, j + 1, xx, yy, 0); + if (s->face->overstrike) + font->driver->draw (s, j, j + 1, xx + 1, yy, 0); + } + SelectObject (s->hdc, old_font); + } + else + { + Lisp_Object gstring = composition_gstring_from_id (s->cmp_id); + Lisp_Object glyph; + int y = s->ybase; + int width = 0; + HFONT old_font; + + old_font = SelectObject (s->hdc, FONT_HANDLE (font)); + + for (i = j = s->cmp_from; i < s->cmp_to; i++) { - Lisp_Object gstring = AREF (XHASH_TABLE (composition_hash_table) - ->key_and_value, - s->cmp->hash_index * 2); - int from; - - for (i = from = 0; i < s->nchars; i++) + glyph = LGSTRING_GLYPH (gstring, i); + if (NILP (LGLYPH_ADJUSTMENT (glyph))) + width += LGLYPH_WIDTH (glyph); + else { - Lisp_Object g = LGSTRING_GLYPH (gstring, i); - Lisp_Object adjustment = LGLYPH_ADJUSTMENT (g); int xoff, yoff, wadjust; - if (! VECTORP (adjustment)) + if (j < i) { - width += LGLYPH_WIDTH (g); - continue; - } - if (from < i) - { - font->driver->draw (s, from, i, x, y, 0); + font->driver->draw (s, j, i, x, y, 0); x += width; } - xoff = XINT (AREF (adjustment, 0)); - yoff = XINT (AREF (adjustment, 1)); - wadjust = XINT (AREF (adjustment, 2)); - + xoff = LGLYPH_XOFF (glyph); + yoff = LGLYPH_YOFF (glyph); + wadjust = LGLYPH_WADJUST (glyph); font->driver->draw (s, i, i + 1, x + xoff, y + yoff, 0); x += wadjust; - from = i + 1; + j = i + 1; width = 0; } - if (from < i) - font->driver->draw (s, from, i, x, y, 0); } - else - { - for (i = 0, j = s->gidx; i < s->nchars; i++, j++) - if (COMPOSITION_GLYPH (s->cmp, j) != '\t') - { - int xx = x + s->cmp->offsets[j * 2]; - int yy = y - s->cmp->offsets[j * 2 + 1]; - - font->driver->draw (s, j, j + 1, xx, yy, 0); - if (s->face->overstrike) - font->driver->draw (s, j, j + 1, xx + 1, yy, 0); - } - } + if (j < i) + font->driver->draw (s, j, i, x, y, 0); + SelectObject (s->hdc, old_font); } } @@ -2283,7 +2283,8 @@ break; case COMPOSITE_GLYPH: - if (s->for_overlaps || s->gidx > 0) + if (s->for_overlaps || (s->cmp_from > 0 + && ! s->first_glyph->u.cmp.automatic)) s->background_filled_p = 1; else x_draw_glyph_string_background (s, 1);