Mercurial > vim
changeset 2507:2070b63605a7 vim73
Fix: with newer GTK versions accented characters were drawn too much to the
left.
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Sat, 07 Aug 2010 15:46:45 +0200 |
parents | 11730666460d |
children | 7e008c174cc3 |
files | runtime/doc/todo.txt src/gui_gtk_x11.c |
diffstat | 2 files changed, 12 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/runtime/doc/todo.txt +++ b/runtime/doc/todo.txt @@ -45,9 +45,6 @@ Patch to make more characters work in di Should readfile() ignore BOM when not in binary mode? -GTK: accented characters are drawn one character too much to the left. (Boyko -Bantchev, 2010 Aug 5) - Bug: searching for tags file uses 'suffixesadd', should not happen. (Dominique Pelle, 2010 June 28)
--- a/src/gui_gtk_x11.c +++ b/src/gui_gtk_x11.c @@ -4809,6 +4809,10 @@ setup_zero_width_cluster(PangoItem *item glyph->geometry.y_offset = logical_rect.height - (gui.char_height - p_linespace) * PANGO_SCALE; } + else + /* If the accent width is smaller than the cluster width, position it + * in the middle. */ + glyph->geometry.x_offset = -width + MAX(0, width - ink_rect.width) / 2; } static void @@ -4989,9 +4993,6 @@ not_ascii: int cluster_width; int last_glyph_rbearing; int cells = 0; /* cells occupied by current cluster */ -#if 0 - int monospace13 = STRICMP(p_guifont, "monospace 13") == 0; -#endif /* Safety check: pango crashes when invoked with invalid utf-8 * characters. */ @@ -5107,21 +5108,17 @@ not_ascii: int width; /* There is a previous glyph, so we deal with combining - * characters the canonical way. That is, setting the - * width of the previous glyph to 0. */ - glyphs->glyphs[i - 1].geometry.width = 0; + * characters the canonical way. + * Older versions of Pango used a positive x_offset, + * then set the width of the previous glyph to zero. + * Newer versions of Pango use a negative x_offset. + * For both adjust the x_offset to position the glyph in + * the middle. */ + if (glyph->geometry.x_offset >= 0) + glyphs->glyphs[i - 1].geometry.width = 0; width = cells * gui.char_width * PANGO_SCALE; glyph->geometry.x_offset += MAX(0, width - cluster_width) / 2; -#if 0 - /* Dirty hack: for "monospace 13" font there is a bug that - * draws composing chars in the wrong position. Add - * "width" to the offset to work around that. */ - if (monospace13) - glyph->geometry.x_offset = width; -#endif - - glyph->geometry.width = width; } else /* i == 0 "cannot happen" */ {