summaryrefslogtreecommitdiffstats
path: root/src/gui_gtk_x11.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2010-08-07 15:46:45 +0200
committerBram Moolenaar <Bram@vim.org>2010-08-07 15:46:45 +0200
commit706e84b3ea8712835117a23cec407377730c9785 (patch)
tree7335a9450fb29cfb4bb03b8a1f1d200227709807 /src/gui_gtk_x11.c
parent311dc17d960689b72fd0d2bcda12b728531557f6 (diff)
Fix: with newer GTK versions accented characters were drawn too much to the
left.
Diffstat (limited to 'src/gui_gtk_x11.c')
-rw-r--r--src/gui_gtk_x11.c27
1 files changed, 12 insertions, 15 deletions
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" */
{