Commit 2b107652 authored by Kenichi Handa's avatar Kenichi Handa
Browse files

(x_draw_composite_glyph_string_foreground): Adjusted

for the change of struct glyph_string.
(x_draw_glyph_string): Likewise.
parent 75a10786
......@@ -1341,6 +1341,7 @@ x_draw_composite_glyph_string_foreground (s)
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 @@ x_draw_composite_glyph_string_foreground (s)
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 @@ x_draw_composite_glyph_string_foreground (s)
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 if (! s->first_glyph->u.cmp.automatic)
{
int y = s->ybase;
int width = 0;
HFONT old_font;
old_font = SelectObject (s->hdc, FONT_HANDLE (font));
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
{
struct font *font = s->font;
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));
if (s->cmp->method == COMPOSITION_WITH_GLYPH_STRING)
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];
if (j < i)
font->driver->draw (s, j, i, x, y, 0);
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);
}
}
......@@ -2283,7 +2283,8 @@ x_draw_glyph_string (s)
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);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment