--- rxvt-unicode/src/rxvtfont.C 2011/01/10 10:36:16 1.174 +++ rxvt-unicode/src/rxvtfont.C 2011/06/22 16:06:52 1.181 @@ -1,7 +1,7 @@ /*----------------------------------------------------------------------* * File: rxvtfont.C *----------------------------------------------------------------------* - * Copyright (c) 2003-2008 Marc Lehmann + * Copyright (c) 2003-2008 Marc Lehmann * - original version. * * This program is free software; you can redistribute it and/or modify @@ -134,7 +134,6 @@ # endif #endif - { CS_UNICODE, "-*-lucidatypewriter-*-*-*-*-*-*-*-*-m-*-iso10646-1" }, //{ CS_UNICODE, "-*-unifont-*-*-*-*-*-*-*-*-c-*-iso10646-1" }, // this gem of a font has actual dotted circles within the combining character glyphs. #if XFT { CS_UNICODE, "xft:Bitstream Vera Sans Mono:antialias=false:autohint=true" }, @@ -243,7 +242,7 @@ Picture dst; # ifdef HAVE_BG_PIXMAP - if (term->bgPixmap.pixmap + if (term->bg_pixmap && !term->pix_colors[color].is_opaque () && ((dst = XftDrawPicture (d)))) { @@ -526,12 +525,16 @@ const text_t *text, int len, int fg, int bg) { - while (len--) + while (len) { int fid = fs->find_font_idx (*text); - (*fs)[fid]->draw (d, x, y, text, 1, fg, bg); - ++text; - x += term->fwidth; + int w = 1; + while (w < len && text[w] == NOCHAR) + w++; + (*fs)[fid]->draw (d, x, y, text, w, fg, bg); + text += w; + len -= w; + x += term->fwidth * w; } } }; @@ -923,7 +926,7 @@ width = 1; - for (uint16_t *t = extent_test_chars + ARRAY_LENGTH(extent_test_chars); t-- > extent_test_chars; ) + for (uint16_t *t = extent_test_chars + ecb_array_length (extent_test_chars); t-- > extent_test_chars; ) { if (FROM_UNICODE (cs, *t) == NOCHAR) continue; @@ -969,6 +972,8 @@ bool rxvt_font_x11::has_char (unicode_t unicode, const rxvt_fontprop *prop, bool &careful) const { + careful = false; + uint32_t ch = FROM_UNICODE (cs, unicode); if (ch == NOCHAR) @@ -1243,7 +1248,7 @@ int glheight = height; - for (uint16_t *t = extent_test_chars + ARRAY_LENGTH(extent_test_chars); t-- > extent_test_chars; ) + for (uint16_t *t = extent_test_chars + ecb_array_length (extent_test_chars); t-- > extent_test_chars; ) { FcChar16 ch = *t; @@ -1408,22 +1413,22 @@ #ifdef HAVE_BG_PIXMAP Picture dst = 0; // the only assignment is done conditionally in the following if condition - if (term->bgPixmap.pixmap + if (term->bg_pixmap && (bg == Color_transparent || bg == Color_bg || (bg >= 0 && !term->pix_colors[bg].is_opaque () && ((dst = XftDrawPicture (d2)))))) { int src_x = x, src_y = y; - if (term->bgPixmap.flags & bgPixmap_t::isTransparent) + if (term->bg_flags & rxvt_term::BG_IS_TRANSPARENT) { src_x += term->window_vt_x; src_y += term->window_vt_y; } - if (term->bgPixmap.pmap_width >= src_x + w - && term->bgPixmap.pmap_height >= src_y + h) + if (term->bg_pmap_width >= src_x + w + && term->bg_pmap_height >= src_y + h) { - XCopyArea (disp, term->bgPixmap.pixmap, d2, gc, + XCopyArea (disp, term->bg_pixmap, d2, gc, src_x, src_y, w, h, 0, 0); } else @@ -1431,7 +1436,7 @@ XGCValues gcv; gcv.fill_style = FillTiled; - gcv.tile = term->bgPixmap.pixmap; + gcv.tile = term->bg_pixmap; gcv.ts_x_origin = -src_x; gcv.ts_y_origin = -src_y;