--- rxvt-unicode/src/rxvttoolkit.C 2005/08/05 16:42:44 1.17 +++ rxvt-unicode/src/rxvttoolkit.C 2006/01/09 05:08:02 1.22 @@ -229,13 +229,17 @@ rxvt_display::~rxvt_display () { + if (!display) + return; + +#ifdef POINTER_BLANK + XFreeCursor (display, blank_cursor); +#endif x_ev.stop (); #ifdef USE_XIM xims.clear (); #endif - - if (display) - XCloseDisplay (display); + XCloseDisplay (display); } #ifdef USE_XIM @@ -281,7 +285,6 @@ #ifdef USE_XIM if (!XFilterEvent (&xev, None)) { - if (xev.type == PropertyNotify && xev.xany.window == root && xev.xproperty.atom == xa_xim_servers) @@ -476,14 +479,43 @@ rxvt_color rxvt_color::fade (rxvt_display *display, int percent) { + percent = 100 - percent; + unsigned short cr, cg, cb; rxvt_color faded; get (display, cr, cg, cb); - faded.set (display, - cr * percent / 100, - cg * percent / 100, - cb * percent / 100); + + faded.set ( + display, + cr * percent / 100, + cg * percent / 100, + cb * percent / 100 + ); + + return faded; +} + +#define LERP(a,b,p) (a * p + b * (100 - p)) / 100 + +rxvt_color +rxvt_color::fade (rxvt_display *display, int percent, rxvt_color &fadeto) +{ + percent = 100 - percent; + + unsigned short cr, cg, cb; + unsigned short fcr, fcg, fcb; + rxvt_color faded; + + get (display, cr, cg, cb); + fadeto.get(display, fcr, fcg, fcb); + + faded.set ( + display, + LERP (cr, fcr, percent), + LERP (cg, fcg, percent), + LERP (cb, fcb, percent) + ); return faded; }