changeset 9879:5cd29e15f2f7 v7.4.2214

commit https://github.com/vim/vim/commit/16350cb97914bc86320185a9910b23c2b297d273 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Aug 14 20:27:34 2016 +0200 patch 7.4.2214 Problem: A font that uses ligatures messes up the screen display. Solution: Put spaces between characters when building the glyph table. (based on a patch from Manuel Schiller)
author Christian Brabandt <cb@256bit.org>
date Sun, 14 Aug 2016 20:30:06 +0200
parents 1f21964a22f7
children d81d2a3adf1f
files src/gui_gtk_x11.c src/version.c
diffstat 2 files changed, 14 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/gui_gtk_x11.c
+++ b/src/gui_gtk_x11.c
@@ -5239,7 +5239,7 @@ static PangoEngineShape *default_shape_e
     static void
 ascii_glyph_table_init(void)
 {
-    char_u	    ascii_chars[128];
+    char_u	    ascii_chars[2 * 128];
     PangoAttrList   *attr_list;
     GList	    *item_list;
     int		    i;
@@ -5252,12 +5252,16 @@ ascii_glyph_table_init(void)
     gui.ascii_glyphs = NULL;
     gui.ascii_font   = NULL;
 
-    /* For safety, fill in question marks for the control characters. */
-    for (i = 0; i < 32; ++i)
-	ascii_chars[i] = '?';
-    for (; i < 127; ++i)
-	ascii_chars[i] = i;
-    ascii_chars[i] = '?';
+    /* For safety, fill in question marks for the control characters.
+     * Put a space between characters to avoid shaping. */
+    for (i = 0; i < 128; ++i)
+    {
+	if (i >= 32 && i < 127)
+	    ascii_chars[2 * i] = i;
+	else
+	    ascii_chars[2 * i] = '?';
+	ascii_chars[2 * i + 1] = ' ';
+    }
 
     attr_list = pango_attr_list_new();
     item_list = pango_itemize(gui.text_context, (const char *)ascii_chars,
@@ -5946,7 +5950,7 @@ gui_gtk2_draw_string(int row, int col, c
 
 	for (i = 0; i < len; ++i)
 	{
-	    glyphs->glyphs[i] = gui.ascii_glyphs->glyphs[s[i]];
+	    glyphs->glyphs[i] = gui.ascii_glyphs->glyphs[2 * s[i]];
 	    glyphs->log_clusters[i] = i;
 	}
 
--- a/src/version.c
+++ b/src/version.c
@@ -764,6 +764,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2214,
+/**/
     2213,
 /**/
     2212,