--- rxvt-unicode/src/scrollbar-xterm.C 2004/02/09 07:11:49 1.7 +++ rxvt-unicode/src/scrollbar-xterm.C 2007/12/29 14:43:44 1.28 @@ -1,9 +1,10 @@ -/*--------------------------------*-C-*---------------------------------* - * File: scrollbar-xterm.c +/*----------------------------------------------------------------------* + * File: scrollbar-xterm.C *----------------------------------------------------------------------* * * Copyright (c) 1997,1998 mj olesen * Copyright (c) 1999-2001 Geoff Wing + * Copyright (c) 2004-2006 Marc Lehmann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,7 +23,6 @@ #include "../config.h" /* NECESSARY */ #include "rxvt.h" /* NECESSARY */ -#include "scrollbar-xterm.intpro" /* PROTOS for internal routines */ /*----------------------------------------------------------------------*/ #if defined(XTERM_SCROLLBAR) @@ -32,54 +32,58 @@ const unsigned char x_stp_bits[] = { 0xaa, 0x55 }; int -rxvt_term::scrollbar_show_xterm (int update __attribute__((unused)), int last_top, int last_bot, int scrollbar_len) +rxvt_term::scrollbar_show_xterm (int update, int last_top, int last_bot, int scrollbar_len) { - int xsb = 0; - int sbwidth = scrollBar.width - 1; + int xsb = 0; + int sbwidth = scrollBar.width - 1; if ((scrollBar.init & R_SB_XTERM) == 0) { XGCValues gcvalue; scrollBar.init |= R_SB_XTERM; - gcvalue.stipple = XCreateBitmapFromData(display->display, scrollBar.win, + gcvalue.stipple = XCreateBitmapFromData (dpy, scrollBar.win, (char *)x_stp_bits, x_stp_width, x_stp_height); if (!gcvalue.stipple) - { - rxvt_print_error("can't create bitmap"); - exit(EXIT_FAILURE); - } + rxvt_fatal ("can't create bitmap\n"); + gcvalue.fill_style = FillOpaqueStippled; - gcvalue.foreground = PixColors[Color_fg]; - gcvalue.background = PixColors[Color_bg]; + gcvalue.foreground = pix_colors_focused[Color_scroll]; + gcvalue.background = pix_colors_focused[Color_bg]; + + xscrollbarGC = XCreateGC (dpy, scrollBar.win, + GCForeground | GCBackground + | GCFillStyle | GCStipple, &gcvalue); + gcvalue.foreground = pix_colors_focused[Color_border]; + ShadowGC = XCreateGC (dpy, scrollBar.win, GCForeground, &gcvalue); + } - xscrollbarGC = XCreateGC(display->display, scrollBar.win, - GCForeground | GCBackground - | GCFillStyle | GCStipple, &gcvalue); - gcvalue.foreground = PixColors[Color_border]; - ShadowGC = XCreateGC(display->display, scrollBar.win, GCForeground, &gcvalue); + xsb = option (Opt_scrollBar_right) ? 1 : 0; + + if (update) + { + if (last_top < scrollBar.top) + XClearArea (dpy, scrollBar.win, + scrollBar.shadow + xsb, last_top, + sbwidth, (scrollBar.top - last_top), False); + + if (scrollBar.bot < last_bot) + XClearArea (dpy, scrollBar.win, + scrollBar.shadow + xsb, scrollBar.bot, + sbwidth, (last_bot - scrollBar.bot), False); } - /* instead of XClearWindow (display->display, scrollBar.win); */ - xsb = (Options & Opt_scrollBar_right) ? 1 : 0; - if (last_top < scrollBar.top) - XClearArea(display->display, scrollBar.win, - sb_shadow + xsb, last_top, - sbwidth, (scrollBar.top - last_top), False); - - if (scrollBar.bot < last_bot) - XClearArea(display->display, scrollBar.win, - sb_shadow + xsb, scrollBar.bot, - sbwidth, (last_bot - scrollBar.bot), False); + else + XClearWindow (dpy, scrollBar.win); /* scrollbar slider */ - XFillRectangle(display->display, scrollBar.win, xscrollbarGC, + XFillRectangle (dpy, scrollBar.win, xscrollbarGC, xsb + 1, scrollBar.top, sbwidth - 2, scrollbar_len); - XDrawLine(display->display, scrollBar.win, ShadowGC, + XDrawLine (dpy, scrollBar.win, ShadowGC, xsb ? 0 : sbwidth, scrollBar.beg, xsb ? 0 : sbwidth, scrollBar.end); return 1; } -#endif /* XTERM_SCROLLBAR */ +#endif /* XTERM_SCROLLBAR */ /*----------------------- end-of-file (C source) -----------------------*/