- if(nextfont != curfont)
- {
- l = up - ubp;
- xft_draw_string(&xft_color, curfont, x, y,
- (const FcChar32*)ubp, l, pixmap);
-
- XGlyphInfo extents;
- XftTextExtents32(top_level->display, curfont,
- (const FcChar32*)ubp, l, &extents);
- x += extents.xOff;
-
- ubp = up;
- curfont = nextfont;
+ if( !xft_font ) {
+ FcPattern *pattern = BC_Resources::find_similar_font(*up, basefont->pattern);
+ if( pattern != 0 ) {
+ double psize = 0;
+ FcPatternGetDouble(basefont->pattern, FC_PIXEL_SIZE, 0, &psize);
+ FcPatternAddDouble(pattern, FC_PIXEL_SIZE, psize);
+ FcPatternDel(pattern, FC_SCALABLE);
+ xft_font = altfont = XftFontOpenPattern(top_level->display, pattern);
+ }
+ }
+ if( !xft_font )
+ xft_font = basefont;
+ if( xft_font != curfont ) {
+ if( curfont && up > ubp ) {
+ if( draw ) {
+ xft_draw_string(&xft_color, curfont, x, y,
+ (const FcChar32*)ubp, up-ubp, pixmap);
+ }
+ XGlyphInfo extents;
+ XftTextExtents32(top_level->display, curfont,
+ (const FcChar32*)ubp, up-ubp, &extents);
+ x += extents.xOff;
+ }
+ ubp = up; curfont = xft_font;