+static RrFont *openfont(const RrInstance *inst, char *fontstring)
+{
+ RrFont *out;
+ FcPattern *pat, *match;
+ XftFont *font;
+ FcResult res;
+ gint tint;
+
+ if (!(pat = XftNameParse(fontstring)))
+ return NULL;
+
+ match = XftFontMatch(RrDisplay(inst), RrScreen(inst), pat, &res);
+ if (!match)
+ return NULL;
+
+ out = g_new(RrFont, 1);
+ out->inst = inst;
+
+ if (FcPatternGetBool(match, OB_SHADOW, 0, &out->shadow) != FcResultMatch)
+ out->shadow = FALSE;
+
+ if (FcPatternGetInteger(match, OB_SHADOW_OFFSET, 0, &out->offset) !=
+ FcResultMatch)
+ out->offset = 1;
+
+ if (FcPatternGetInteger(match, OB_SHADOW_ALPHA, 0, &tint) != FcResultMatch)
+ tint = 25;
+ if (tint > 100) tint = 100;
+ else if (tint < -100) tint = -100;
+ out->tint = tint;
+
+ font = XftFontOpenPattern(RrDisplay(inst), match);
+ if (!font) {
+ FcPatternDestroy(match);
+ g_free(out);
+ return NULL;
+ } else
+ out->xftfont = font;
+
+ measure_font(out);
+
+ return out;
+}
+