From 88d757306e2266c7e26fe851e424466ea9d0a4ee Mon Sep 17 00:00:00 2001 From: Gerd Moellmann Date: Wed, 5 Jul 2000 11:41:01 +0000 Subject: [PATCH] (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. --- src/ChangeLog | 23 +++++++++++++++++ src/xterm.c | 69 +++++++++++++++++++++++++-------------------------- 2 files changed, 57 insertions(+), 35 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 2cbbe1c5f77..dff4025fad2 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,26 @@ +2000-07-05 Gerd Moellmann + + * 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 * alloca.c [emacs]: Include lisp.h (needed by atimer.h included diff --git a/src/xterm.c b/src/xterm.c index 96e3e97a3fd..743c7f8934d 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -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->left_box_line_p = it->start_of_box_run_p; - glyph->right_box_line_p = it->end_of_box_run_p; + 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->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->left_box_line_p = it->start_of_box_run_p; - glyph->right_box_line_p = it->end_of_box_run_p; + 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->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->left_box_line_p = it->start_of_box_run_p; - glyph->right_box_line_p = it->end_of_box_run_p; + 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->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->left_box_line_p = it->start_of_box_run_p; - glyph->right_box_line_p = it->end_of_box_run_p; + 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->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]; } } -- 2.39.2