--- rxvt-unicode/src/rxvtfont.C 2010/03/31 23:01:51 1.163 +++ rxvt-unicode/src/rxvtfont.C 2010/12/30 01:13:24 1.170 @@ -28,6 +28,10 @@ #include +#if XFT +# include +#endif + #define MAX_OVERLAP_ROMAN (8 + 2) // max. character width in 8ths of the base width #define MAX_OVERLAP_ITALIC (8 + 3) // max. overlap for italic fonts @@ -37,7 +41,7 @@ : ((prop)->width * (wcw) * MAX_OVERLAP_ROMAN + 7) >> 3 \ )) -const struct rxvt_fallback_font { +static const struct rxvt_fallback_font { codeset cs; const char *name; } fallback_fonts[] = { @@ -157,8 +161,6 @@ 0x304c, 0x672c, // が本 }; -#define NUM_EXTENT_TEST_CHARS (sizeof (extent_test_chars) / sizeof (extent_test_chars[0])) - #define dTermDisplay Display *disp = term->dpy #define dTermGC GC gc = term->gc @@ -450,7 +452,7 @@ chrs [1] = NOCHAR; *chrs = cc->c1; - rxvt_font *f1 = (*fs)[fs->find_font (cc->c1)]; + rxvt_font *f1 = (*fs)[fs->find_font_idx (cc->c1)]; f1->draw (d, x, y, chrs, width, fg, bg); if (cc->c2 != NOCHAR) @@ -461,7 +463,7 @@ *chrs = cc->c2; rxvt_font *f2 = (f1->has_char (cc->c2, 0, careful) && !careful) ? f1 - : (*fs)[fs->find_font (cc->c2)]; + : (*fs)[fs->find_font_idx (cc->c2)]; f2->draw (d, x, y, chrs, width, fg, Color_none); } @@ -790,12 +792,14 @@ diff += 300; // more heavily penalize what looks like scaled bitmap fonts } - if (!set_properties (p, fname)) - continue; - - if (prop.height != rxvt_fontprop::unset - && p.height > prop.height) // weed out too large fonts - continue; + if (!set_properties (p, fname) + // also weed out too large fonts + || (prop.height != rxvt_fontprop::unset + && p.height > prop.height)) + { + free (fname); + continue; + } if (prop.height != rxvt_fontprop::unset) diff += (prop.height - p.height) * 128; if (prop.weight != rxvt_fontprop::unset) diff += abs (prop.weight - p.weight); @@ -916,7 +920,7 @@ width = 1; - for (uint16_t *t = extent_test_chars + NUM_EXTENT_TEST_CHARS; t-- > extent_test_chars; ) + for (uint16_t *t = extent_test_chars + ARRAY_LENGTH(extent_test_chars); t-- > extent_test_chars; ) { if (FROM_UNICODE (cs, *t) == NOCHAR) continue; @@ -1234,7 +1238,7 @@ int glheight = height; - for (uint16_t *t = extent_test_chars + NUM_EXTENT_TEST_CHARS; t-- > extent_test_chars; ) + for (uint16_t *t = extent_test_chars + ARRAY_LENGTH(extent_test_chars); t-- > extent_test_chars; ) { FcChar16 ch = *t; @@ -1405,7 +1409,7 @@ { int src_x = x, src_y = y; - if (term->bgPixmap.is_parentOrigin ()) + if (term->bgPixmap.flags & bgPixmap_t::isTransparent) { src_x += term->window_vt_x; src_y += term->window_vt_y; @@ -1484,7 +1488,7 @@ force_prop = false; for (rxvt_font **i = fonts.begin (); i != fonts.end (); i++) - FONT_UNREF (*i); + (*i)->unref (); for (pagemap **p = fmap.begin (); p != fmap.end (); p++) delete *p;