From 706e84b3ea8712835117a23cec407377730c9785 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Sat, 7 Aug 2010 15:46:45 +0200 Subject: Fix: with newer GTK versions accented characters were drawn too much to the left. --- src/gui_gtk_x11.c | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) (limited to 'src/gui_gtk_x11.c') 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" */ { -- cgit v1.2.3