+ RrFont *out;
+ PangoWeight pweight;
+ PangoStyle pstyle;
+ PangoAttrList *attrlist;
+
+ out = g_new(RrFont, 1);
+ out->inst = inst;
+ out->ref = 1;
+ out->font_desc = pango_font_description_new();
+ out->layout = pango_layout_new(inst->pango);
+ out->shortcut_underline = pango_attr_underline_new(PANGO_UNDERLINE_LOW);
+
+ attrlist = pango_attr_list_new();
+ /* shortcut_underline is owned by the attrlist */
+ pango_attr_list_insert(attrlist, out->shortcut_underline);
+ /* the attributes are owned by the layout */
+ pango_layout_set_attributes(out->layout, attrlist);
+ pango_attr_list_unref(attrlist);
+
+ switch (weight) {
+ case RR_FONTWEIGHT_LIGHT: pweight = PANGO_WEIGHT_LIGHT; break;
+ case RR_FONTWEIGHT_NORMAL: pweight = PANGO_WEIGHT_NORMAL; break;
+ case RR_FONTWEIGHT_SEMIBOLD: pweight = PANGO_WEIGHT_SEMIBOLD; break;
+ case RR_FONTWEIGHT_BOLD: pweight = PANGO_WEIGHT_BOLD; break;
+ case RR_FONTWEIGHT_ULTRABOLD: pweight = PANGO_WEIGHT_ULTRABOLD; break;
+ default: g_assert_not_reached();
+ }
+
+ switch (slant) {
+ case RR_FONTSLANT_NORMAL: pstyle = PANGO_STYLE_NORMAL; break;
+ case RR_FONTSLANT_ITALIC: pstyle = PANGO_STYLE_ITALIC; break;
+ case RR_FONTSLANT_OBLIQUE: pstyle = PANGO_STYLE_OBLIQUE; break;
+ default: g_assert_not_reached();