diff options
author | Bram Moolenaar <Bram@vim.org> | 2010-08-07 15:46:45 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2010-08-07 15:46:45 +0200 |
commit | 706e84b3ea8712835117a23cec407377730c9785 (patch) | |
tree | 7335a9450fb29cfb4bb03b8a1f1d200227709807 | |
parent | 311dc17d960689b72fd0d2bcda12b728531557f6 (diff) |
Fix: with newer GTK versions accented characters were drawn too much to the
left.
-rw-r--r-- | runtime/doc/todo.txt | 3 | ||||
-rw-r--r-- | src/gui_gtk_x11.c | 27 |
2 files changed, 12 insertions, 18 deletions
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt index 120b88d16a..9c00439451 100644 --- a/runtime/doc/todo.txt +++ b/runtime/doc/todo.txt @@ -45,9 +45,6 @@ Patch to make more characters work in dialogs. (Yankwei Jia, 2010 Aug 4) 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) diff --git a/src/gui_gtk_x11.c b/src/gui_gtk_x11.c index 2cde1ee490..04b0ecb9d0 100644 --- a/src/gui_gtk_x11.c +++ b/src/gui_gtk_x11.c @@ -4809,6 +4809,10 @@ setup_zero_width_cluster(PangoItem *item, PangoGlyphInfo *glyph, 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" */ { |