1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-19 10:22:27 +00:00

(x_append_glyph, x_append_composite_glyph)

(x_produce_image_glyph, x_append_stretch_glyph): Accomodate to
changes in struct glyph starting 1999-12-27.  Some bit-fields of
struct glyph were not set, which made glyphs unequal when compared
with GLYPH_EQUAL_P.  Redisplay outputs such glyphs, and flickering
effects were the result.  This also depended on the contents of
memory returned by xmalloc.  If flickering happens again, activate
the code in clear_glyph_row that's in #if 0.  If the flickering is
gone with that, chances are that it is caused by something
similar.
This commit is contained in:
Gerd Moellmann 2000-07-05 11:41:01 +00:00
parent 45560b1ad4
commit 88d757306e
2 changed files with 57 additions and 35 deletions

View File

@ -1,3 +1,26 @@
2000-07-05 Gerd Moellmann <gerd@gnu.org>
* xterm.c (x_append_glyph, x_append_composite_glyph)
(x_produce_image_glyph, x_append_stretch_glyph): Accomodate to
changes in struct glyph starting 1999-12-27. Some bit-fields of
struct glyph were not set, which made glyphs unequal when compared
with GLYPH_EQUAL_P. Redisplay outputs such glyphs, and flickering
effects were the result. This also depended on the contents of
memory returned by xmalloc. If flickering happens again, activate
the code in clear_glyph_row that's in #if 0. If the flickering is
gone with that, chances are that it is caused by something
similar.
* dispnew.c (clear_glyph_row): Add debug code in #if 0.
* dispextern.h: Add some comments.
* window.c (add_window_to_list): Add parameter LIST.
(window_list): Order list so that, for each frame, windows are
in canonical order, and so that frames appear in the list in
the order given by Vframe_list.
(next_window): Reverse the handling of NEXT_P.
2000-07-04 Andrew Innes <andrewi@gnu.org>
* alloca.c [emacs]: Include lisp.h (needed by atimer.h included

View File

@ -1387,24 +1387,20 @@ x_append_glyph (it)
glyph = it->glyph_row->glyphs[area] + it->glyph_row->used[area];
if (glyph < it->glyph_row->glyphs[area + 1])
{
/* Play it safe. If sub-structures of the glyph are not all the
same size, it otherwise be that some bits stay set. This
would prevent a comparison with GLYPH_EQUAL_P. */
glyph->u.val = 0;
glyph->type = CHAR_GLYPH;
glyph->pixel_width = it->pixel_width;
glyph->u.ch = it->char_to_display;
glyph->face_id = it->face_id;
glyph->charpos = CHARPOS (it->position);
glyph->object = it->object;
glyph->pixel_width = it->pixel_width;
glyph->voffset = it->voffset;
glyph->type = CHAR_GLYPH;
glyph->multibyte_p = it->multibyte_p;
glyph->left_box_line_p = it->start_of_box_run_p;
glyph->right_box_line_p = it->end_of_box_run_p;
glyph->voffset = it->voffset;
glyph->multibyte_p = it->multibyte_p;
glyph->overlaps_vertically_p = (it->phys_ascent > it->ascent
|| it->phys_descent > it->descent);
glyph->padding_p = 0;
glyph->glyph_not_available_p = it->glyph_not_available_p;
glyph->face_id = it->face_id;
glyph->u.ch = it->char_to_display;
++it->glyph_row->used[area];
}
}
@ -1424,23 +1420,20 @@ x_append_composite_glyph (it)
glyph = it->glyph_row->glyphs[area] + it->glyph_row->used[area];
if (glyph < it->glyph_row->glyphs[area + 1])
{
/* Play it safe. If sub-structures of the glyph are not all the
same size, it otherwise be that some bits stay set. This
would prevent a comparison with GLYPH_EQUAL_P. */
glyph->u.val = 0;
glyph->type = COMPOSITE_GLYPH;
glyph->pixel_width = it->pixel_width;
glyph->u.cmp_id = it->cmp_id;
glyph->face_id = it->face_id;
glyph->charpos = CHARPOS (it->position);
glyph->object = it->object;
glyph->pixel_width = it->pixel_width;
glyph->voffset = it->voffset;
glyph->type = COMPOSITE_GLYPH;
glyph->multibyte_p = it->multibyte_p;
glyph->left_box_line_p = it->start_of_box_run_p;
glyph->right_box_line_p = it->end_of_box_run_p;
glyph->voffset = it->voffset;
glyph->multibyte_p = it->multibyte_p;
glyph->overlaps_vertically_p = (it->phys_ascent > it->ascent
|| it->phys_descent > it->descent);
glyph->padding_p = 0;
glyph->glyph_not_available_p = 0;
glyph->face_id = it->face_id;
glyph->u.cmp_id = it->cmp_id;
++it->glyph_row->used[area];
}
}
@ -1515,16 +1508,19 @@ x_produce_image_glyph (it)
glyph = it->glyph_row->glyphs[area] + it->glyph_row->used[area];
if (glyph < it->glyph_row->glyphs[area + 1])
{
glyph->type = IMAGE_GLYPH;
glyph->u.img_id = img->id;
glyph->face_id = it->face_id;
glyph->pixel_width = it->pixel_width;
glyph->charpos = CHARPOS (it->position);
glyph->object = it->object;
glyph->pixel_width = it->pixel_width;
glyph->voffset = it->voffset;
glyph->type = IMAGE_GLYPH;
glyph->multibyte_p = it->multibyte_p;
glyph->left_box_line_p = it->start_of_box_run_p;
glyph->right_box_line_p = it->end_of_box_run_p;
glyph->voffset = it->voffset;
glyph->multibyte_p = it->multibyte_p;
glyph->overlaps_vertically_p = 0;
glyph->padding_p = 0;
glyph->glyph_not_available_p = 0;
glyph->face_id = it->face_id;
glyph->u.img_id = img->id;
++it->glyph_row->used[area];
}
}
@ -1551,17 +1547,20 @@ x_append_stretch_glyph (it, object, width, height, ascent)
glyph = it->glyph_row->glyphs[area] + it->glyph_row->used[area];
if (glyph < it->glyph_row->glyphs[area + 1])
{
glyph->type = STRETCH_GLYPH;
glyph->u.stretch.ascent = height * ascent;
glyph->u.stretch.height = height;
glyph->face_id = it->face_id;
glyph->pixel_width = width;
glyph->charpos = CHARPOS (it->position);
glyph->object = object;
glyph->pixel_width = width;
glyph->voffset = it->voffset;
glyph->type = STRETCH_GLYPH;
glyph->multibyte_p = it->multibyte_p;
glyph->left_box_line_p = it->start_of_box_run_p;
glyph->right_box_line_p = it->end_of_box_run_p;
glyph->voffset = it->voffset;
glyph->multibyte_p = it->multibyte_p;
glyph->overlaps_vertically_p = 0;
glyph->padding_p = 0;
glyph->glyph_not_available_p = 0;
glyph->face_id = it->face_id;
glyph->u.stretch.ascent = height * ascent;
glyph->u.stretch.height = height;
++it->glyph_row->used[area];
}
}