Ok, after chatting with Kyle Jones about the odd problem I
reported earlier
this week (or was it last week) about the incorrect display of
wide graphics
in XEmacs after updating VM, we decided that a redisplay bug or
two was being
triggered. I have some simple elisp to demonstrate this attached below
(attached below), which displays a short wide pixmap in a couple different
ways (requires XPM support compiled in, obviously). Tested it in
a "clean"
21.4.6 environment like so:
The attached patch fixes this. Please let me know if it doesn't do quite
what you expect - I have tried to cope with the various clipping and
wrapping scenarios in a sane way.
This also contains Nix's redisplay patch modulo some indent, I will apply
both to the windows branch barring any further problems.
andy
2002-04-22 Andy Piper <andy(a)xemacs.org>
* extents.c (extent_fragment_update): check for glyphs we have
previously displayed.
* extents.c (print_extent_1): warning removal.
* extents.h: change prototype.
* redisplay-output.c (redisplay_normalize_glyph_area): calculate
widths correctly for wide glyphs.
* redisplay.c (position_redisplay_data_type): add end_glyph_width.
* redisplay.c (prop_type): add PROP_GLYPH.
* redisplay.c (struct prop_block): add glyph type
* redisplay.c (add_glyph_rune): when adding part of a glyph add it
to the propagation data.
* redisplay.c (create_text_block): if there is a glyph in the
propagation data use it to salt extent_fragment_update.
* redisplay.c (create_string_text_block): ditto.
2002-04-13 Nix <nix(a)esperi.demon.co.uk>
* redisplay.h (struct rune): Add ascent, descent, and yoffset fields.
* redisplay-output.c (compare_runes): Compare them.
* redisplay.c: Update copyright date.
* redisplay.c (pos_data): Add need_baseline_computation field.
* redisplay.c (add_glyph_rune): Update ascent, descent, and
need_baseline_computation; zero yoffset. Set max_pixmap_height
for all pixmaps, not just automatically positioned ones.
* redisplay.c (calculate_yoffset): New, compute yoffset values.
* redisplay.c (calculate_baseline): New, compute textual baseline.
* redisplay.c (add_glyph_rune): Call them.
* redisplay.c (create_text_block): Likewise.
* redisplay.c (create_overlay_glyph_block): Likewise.
* redisplay.c (add_margin_runes): Likewise.
* redisplay.c (create_string_text_block): Likewise. Fix tabdamage.
* redisplay.h: (redisplay_calculate_display_boxes): Change prototype.
* redisplay-output.c (redisplay_calculate_display_boxes): Use yoffset.
* redisplay-msw.c (mswindows_output_blank): Pass 0 as yoffset.
* redisplay-msw.c (mswindows_output_string): Likewise.
* redisplay-msw.c (mswindows_output_display_block): Pass yoffset.
* redisplay-gtk.c (gtk_output_display_block): Likewise.
* redisplay-x.c (x_output_display_block): Likewise.