[SEL_RECTANGULAR] = Mod1Mask,
};
+/*
+ * Printable characters in ASCII, used to estimate the advance width
+ * of single wide characters.
+ */
+static char ascii_printable[] =
+ " !\"#$%&'()*+,-./0123456789:;<=>?"
+ "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"
+ "`abcdefghijklmnopqrstuvwxyz{|}~";
#define LEN(a) (sizeof(a) / sizeof(a)[0])
#define DEFAULT(a, b) (a) = (a) ? (a) : (b)
#define BETWEEN(x, a, b) ((a) <= (x) && (x) <= (b))
+#define DIVCEIL(n, d) (((n) + ((d) - 1)) / (d))
#define ISCONTROLC0(c) (BETWEEN(c, 0, 0x1f) || (c) == '\177')
#define ISCONTROLC1(c) (BETWEEN(c, 0x80, 0x9f))
#define ISCONTROL(c) (ISCONTROLC0(c) || ISCONTROLC1(c))
{
FcPattern *match;
FcResult result;
+ XGlyphInfo extents;
match = FcFontMatch(NULL, pattern, &result);
if (!match)
return 1;
}
+ XftTextExtentsUtf8(xw.dpy, f->match,
+ (const FcChar8 *) ascii_printable,
+ LEN(ascii_printable), &extents);
+
f->set = NULL;
f->pattern = FcPatternDuplicate(pattern);
f->rbearing = f->match->max_advance_width;
f->height = f->ascent + f->descent;
- f->width = f->lbearing + f->rbearing;
+ f->width = DIVCEIL(extents.xOff, LEN(ascii_printable));
return 0;
}