+ rfont = (mfont__ft_driver.open) (frame, font, spec, rfont);
+ if (! rfont)
+ return NULL;
+ ascent = rfont->ascent;
+ descent = rfont->descent;
+ max_advance = rfont->max_advance;
+ average_width = rfont->average_width;
+ baseline_offset = rfont->baseline_offset;
+ spec = &rfont->spec;
+ ft_face = rfont->fontp;
+ xft_font = xft_open_font (display, font->file, size / 10, anti_alias);
+ if (! xft_font)
+ return NULL;
+ M17N_OBJECT (rfont_xft, close_xft, MERROR_WIN);
+ rfont_xft->display = display;
+ if (anti_alias == FcTrue)
+ rfont_xft->font_aa = xft_font;
+ else
+ rfont_xft->font_no_aa = xft_font;
+ rfont_xft->ft_face = ft_face;
+ rfont_xft->info = rfont->info;
+ M17N_OBJECT_REF (rfont->info);
+ MSTRUCT_CALLOC (rfont, MERROR_FONT_X);
+ rfont->spec = *spec;
+ rfont->spec.size = size;
+ rfont->frame = frame;
+ rfont->font = font;
+ rfont->driver = &xft_driver;
+ rfont->info = rfont_xft;
+ rfont->ascent = ascent;
+ rfont->descent = descent;
+ rfont->max_advance = max_advance;
+ rfont->average_width = average_width;
+ rfont->baseline_offset = baseline_offset;
+ rfont->fontp = xft_font;
+ rfont->next = MPLIST_VAL (frame->realized_font_list);
+ MPLIST_VAL (frame->realized_font_list) = rfont;
+ return rfont;