Revert "xtext: Always use Pango to get correct glyph width on Unix"

This reverts commit d3f1ab7813.

The performance even on Linux is just too poor in many cases.
This commit is contained in:
Patrick Griffis 2018-03-13 21:17:45 -04:00
parent 27acca0f5b
commit eb942fc274

View File

@ -157,10 +157,7 @@ static char * gtk_xtext_get_word (GtkXText * xtext, int x, int y, textentry ** r
#define EMPH_BOLD 2 #define EMPH_BOLD 2
#define EMPH_HIDDEN 4 #define EMPH_HIDDEN 4
static PangoAttrList *attr_lists[4]; static PangoAttrList *attr_lists[4];
#ifdef G_OS_WIN32
/* the fontwidths variable is used on Windows only. */
static int fontwidths[4][128]; static int fontwidths[4][128];
#endif
static PangoAttribute * static PangoAttribute *
xtext_pango_attr (PangoAttribute *attr) xtext_pango_attr (PangoAttribute *attr)
@ -173,10 +170,7 @@ xtext_pango_attr (PangoAttribute *attr)
static void static void
xtext_pango_init (GtkXText *xtext) xtext_pango_init (GtkXText *xtext)
{ {
int i; int i, j;
#ifdef G_OS_WIN32
int j;
#endif
char buf[2] = "\000"; char buf[2] = "\000";
if (attr_lists[0]) if (attr_lists[0])
@ -208,7 +202,6 @@ xtext_pango_init (GtkXText *xtext)
break; break;
} }
#ifdef G_OS_WIN32
/* Now initialize fontwidths[i] */ /* Now initialize fontwidths[i] */
pango_layout_set_attributes (xtext->layout, attr_lists[i]); pango_layout_set_attributes (xtext->layout, attr_lists[i]);
for (j = 0; j < 128; j++) for (j = 0; j < 128; j++)
@ -217,14 +210,8 @@ xtext_pango_init (GtkXText *xtext)
pango_layout_set_text (xtext->layout, buf, 1); pango_layout_set_text (xtext->layout, buf, 1);
pango_layout_get_pixel_size (xtext->layout, &fontwidths[i][j], NULL); pango_layout_get_pixel_size (xtext->layout, &fontwidths[i][j], NULL);
} }
#endif
} }
xtext->space_width = fontwidths[0][' '];
/* re-compute space_width without using fontwidths */
pango_layout_set_attributes (xtext->layout, attr_lists[0]);
buf[0] = ' ';
pango_layout_set_text (xtext->layout, buf, 1);
pango_layout_get_pixel_size (xtext->layout, &(xtext->space_width), NULL);
} }
static void static void
@ -302,10 +289,8 @@ static int
backend_get_text_width_emph (GtkXText *xtext, guchar *str, int len, int emphasis) backend_get_text_width_emph (GtkXText *xtext, guchar *str, int len, int emphasis)
{ {
int width; int width;
#ifdef G_OS_WIN32
int deltaw; int deltaw;
int mbl; int mbl;
#endif
if (*str == 0) if (*str == 0)
return 0; return 0;
@ -316,8 +301,6 @@ backend_get_text_width_emph (GtkXText *xtext, guchar *str, int len, int emphasis
width = 0; width = 0;
pango_layout_set_attributes (xtext->layout, attr_lists[emphasis]); pango_layout_set_attributes (xtext->layout, attr_lists[emphasis]);
#ifdef G_OS_WIN32
while (len > 0) while (len > 0)
{ {
mbl = charlen(str); mbl = charlen(str);
@ -332,12 +315,6 @@ backend_get_text_width_emph (GtkXText *xtext, guchar *str, int len, int emphasis
str += mbl; str += mbl;
len -= mbl; len -= mbl;
} }
#else
/* This code is slow on Windows,
but it will get the correct width from pango on Linux. */
pango_layout_set_text (xtext->layout, str, len);
pango_layout_get_pixel_size (xtext->layout, &width, NULL);
#endif
return width; return width;
} }