--- rxvt-unicode/src/scrollbar.C 2003/11/24 17:31:28 1.2 +++ rxvt-unicode/src/scrollbar.C 2004/01/31 04:12:10 1.10 @@ -1,7 +1,6 @@ /*--------------------------------*-C-*---------------------------------* * File: scrollbar.c *----------------------------------------------------------------------* - * $Id: scrollbar.C,v 1.2 2003/11/24 17:31:28 pcg Exp $ * * Copyright (c) 1997,1998 mj olesen * Copyright (c) 1998 Alfredo K. Kojima @@ -32,155 +31,159 @@ /* * Map or unmap a scrollbar. Returns non-zero upon change of state */ -/* EXTPROTO */ int -rxvt_scrollbar_mapping(pR_ int map) +rxvt_term::scrollbar_mapping (int map) { int change = 0; -#ifdef HAVE_SCROLLBARS - if (map && !scrollbar_visible(R)) { - scrollbar_setIdle(); - if (!R->scrollBar.win) - rxvt_Resize_scrollBar(aR); - if (R->scrollBar.win) { - XMapWindow(R->Xdisplay, R->scrollBar.win); +#ifdef HAVE_SCROLLBARS + if (map && !scrollbar_visible()) { + scrollBar.setIdle (); + if (!scrollBar.win) + resize_scrollbar (); + if (scrollBar.win) { + XMapWindow(Xdisplay, scrollBar.win); change = 1; } - } else if (!map && scrollbar_visible(R)) { - R->scrollBar.state = 0; - XUnmapWindow(R->Xdisplay, R->scrollBar.win); + } else if (!map && scrollbar_visible()) { + scrollBar.state = 0; + XUnmapWindow(Xdisplay, scrollBar.win); change = 1; } #endif return change; } -/* EXTPROTO */ void -rxvt_Resize_scrollBar(pR) +rxvt_term::resize_scrollbar () { #ifdef HAVE_SCROLLBARS - int delayed_init = 0; + int delayed_init = 0; #define R_SCROLLBEG_XTERM 0 -#define R_SCROLLEND_XTERM R->szHint.height +#define R_SCROLLEND_XTERM szHint.height #define R_SCROLLBEG_NEXT 0 -#define R_SCROLLEND_NEXT R->szHint.height - (SB_BUTTON_TOTAL_HEIGHT + \ +#define R_SCROLLEND_NEXT szHint.height - (SB_BUTTON_TOTAL_HEIGHT + \ SB_PADDING) -#define R_SCROLLBEG_RXVT (R->scrollBar.width + 1) + R->sb_shadow -#define R_SCROLLEND_RXVT R->szHint.height - R_SCROLLBEG_RXVT - \ - (2 * R->sb_shadow) - +#define R_SCROLLBEG_RXVT (scrollBar.width + 1) + sb_shadow +#define R_SCROLLEND_RXVT szHint.height - R_SCROLLBEG_RXVT - \ + (2 * sb_shadow) + +#if defined(PLAIN_SCROLLBAR) + if (scrollBar.style == R_SB_PLAIN) { + scrollBar.beg = R_SCROLLBEG_XTERM; + scrollBar.end = R_SCROLLEND_XTERM; + scrollBar.update = &rxvt_term::scrollbar_show_plain; + } +#endif #if defined(XTERM_SCROLLBAR) - if (R->scrollBar.style == R_SB_XTERM) { - R->scrollBar.beg = R_SCROLLBEG_XTERM; - R->scrollBar.end = R_SCROLLEND_XTERM; - R->scrollBar.update = rxvt_scrollbar_show_xterm; + if (scrollBar.style == R_SB_XTERM) { + scrollBar.beg = R_SCROLLBEG_XTERM; + scrollBar.end = R_SCROLLEND_XTERM; + scrollBar.update = &rxvt_term::scrollbar_show_xterm; } #endif #if defined(NEXT_SCROLLBAR) - if (R->scrollBar.style == R_SB_NEXT) { - R->scrollBar.beg = R_SCROLLBEG_NEXT; - R->scrollBar.end = R_SCROLLEND_NEXT; - R->scrollBar.update = rxvt_scrollbar_show_next; + if (scrollBar.style == R_SB_NEXT) { + scrollBar.beg = R_SCROLLBEG_NEXT; + scrollBar.end = R_SCROLLEND_NEXT; + scrollBar.update = &rxvt_term::scrollbar_show_next; } #endif #if defined(RXVT_SCROLLBAR) - if (R->scrollBar.style == R_SB_RXVT) { - R->scrollBar.beg = R_SCROLLBEG_RXVT; - R->scrollBar.end = R_SCROLLEND_RXVT; - R->scrollBar.update = rxvt_scrollbar_show_rxvt; + if (scrollBar.style == R_SB_RXVT) { + scrollBar.beg = R_SCROLLBEG_RXVT; + scrollBar.end = R_SCROLLEND_RXVT; + scrollBar.update = &rxvt_term::scrollbar_show_rxvt; } #endif - if (!R->scrollBar.win) { + if (!scrollBar.win) { /* create the scrollbar window */ - R->scrollBar.win = XCreateSimpleWindow(R->Xdisplay, - R->TermWin.parent[0], - R->h->window_sb_x, 0, + scrollBar.win = XCreateSimpleWindow(Xdisplay, + TermWin.parent[0], + window_sb_x, 0, scrollbar_TotalWidth(), - R->szHint.height, + szHint.height, 0, - R->PixColors[Color_fg], - R->PixColors[Color_bg]); + PixColors[Color_fg], + PixColors[Color_bg]); #ifdef DEBUG_X - XStoreName(R->Xdisplay, R->scrollBar.win, "scrollbar"); + XStoreName(Xdisplay, scrollBar.win, "scrollbar"); #endif - XDefineCursor(R->Xdisplay, R->scrollBar.win, R->h->pointer_leftptr); - XSelectInput(R->Xdisplay, R->scrollBar.win, + XDefineCursor(Xdisplay, scrollBar.win, leftptr_cursor); + XSelectInput(Xdisplay, scrollBar.win, (ExposureMask | ButtonPressMask | ButtonReleaseMask | Button1MotionMask | Button2MotionMask | Button3MotionMask)); delayed_init = 1; } - rxvt_scrollbar_show(aR_ 1); + scrollbar_show (1); if (delayed_init) - XMapWindow(R->Xdisplay, R->scrollBar.win); + XMapWindow (Xdisplay, scrollBar.win); #endif } /* * Update current scrollbar view w.r.t. slider heights, etc. */ -/* EXTPROTO */ int -rxvt_scrollbar_show(pR_ int update) +rxvt_term::scrollbar_show (int update) { int ret = 0; #ifdef HAVE_SCROLLBARS int top, bot, len, adj; - if (!scrollbar_visible(R)) + if (!scrollbar_visible()) return 0; if (update) { - top = (R->TermWin.nscrolled - R->TermWin.view_start); - bot = top + (R->TermWin.nrow - 1); - len = max((R->TermWin.nscrolled + (R->TermWin.nrow - 1)), 1); + top = (TermWin.nscrolled - TermWin.view_start); + bot = top + (TermWin.nrow - 1); + len = max((TermWin.nscrolled + (TermWin.nrow - 1)), 1); adj = (((bot - top) * scrollbar_size()) % len) > 0 ? 1 : 0; - R->scrollBar.top = (R->scrollBar.beg + (top * scrollbar_size()) / len); - R->h->scrollbar_len = ((bot - top) * scrollbar_size()) / len + + scrollBar.top = (scrollBar.beg + (top * scrollbar_size()) / len); + scrollbar_len = ((bot - top) * scrollbar_size()) / len + scrollbar_minheight() + adj; - R->scrollBar.bot = (R->scrollBar.top + R->h->scrollbar_len); + scrollBar.bot = (scrollBar.top + scrollbar_len); /* no change */ - if (R->scrollBar.top == R->h->last_top - && R->scrollBar.bot == R->h->last_bot - && (R->scrollBar.state == R->h->last_state || !scrollbar_isUpDn())) + if (scrollBar.top == last_top + && scrollBar.bot == last_bot + && (scrollBar.state == last_state || !scrollbar_isUpDn())) return 0; } - ret = R->scrollBar.update(aR_ update, R->h->last_top, R->h->last_bot, - R->h->scrollbar_len); - - R->h->last_top = R->scrollBar.top; - R->h->last_bot = R->scrollBar.bot; - R->h->last_state = R->scrollBar.state; + ret = (this->*scrollBar.update) (update, last_top, last_bot, scrollbar_len); + last_top = scrollBar.top; + last_bot = scrollBar.bot; + last_state = scrollBar.state; #endif + return ret; } -/* EXTPROTO */ void -rxvt_setup_scrollbar(pR_ const char *scrollalign, const char *scrollstyle, const char *thickness) +rxvt_term::setup_scrollbar (const char *scrollalign, const char *scrollstyle, const char *thickness) { #ifdef HAVE_SCROLLBARS int i; short style, width; -# if defined(RXVT_SCROLLBAR) || !(defined(NEXT_SCROLLBAR) || defined(XTERM_SCROLLBAR)) +# if defined(RXVT_SCROLLBAR) style = R_SB_RXVT; -# else -# ifdef NEXT_SCROLLBAR - style = R_SB_NEXT; -# elif defined(XTERM_SCROLLBAR) +# elif defined(XTERM_SCROLLBAR) style = R_SB_XTERM; -# endif +# elif defined(NEXT_SCROLLBAR) + style = R_SB_NEXT; +# elif defined(PLAIN_SCROLLBAR) + style = R_SB_PLAIN; +#else + style = R_SB_RXVT; # endif -# if (defined(NEXT_SCROLLBAR) || defined(XTERM_SCROLLBAR)) +# if (defined(NEXT_SCROLLBAR) || defined(XTERM_SCROLLBAR) || defined(PLAIN_SCROLLBAR)) if (scrollstyle) { # ifdef NEXT_SCROLLBAR if (STRNCASECMP(scrollstyle, "next", 4) == 0) @@ -190,12 +193,18 @@ if (STRNCASECMP(scrollstyle, "xterm", 5) == 0) style = R_SB_XTERM; # endif +# ifdef PLAIN_SCROLLBAR + if (STRNCASECMP(scrollstyle, "plain", 5) == 0) + style = R_SB_XTERM; +# endif } # endif if (style == R_SB_NEXT) width = SB_WIDTH_NEXT; else if (style == R_SB_XTERM) width = SB_WIDTH_XTERM; + else if (style == R_SB_PLAIN) + width = SB_WIDTH_PLAIN; else /* if (style == R_SB_RXVT) */ width = SB_WIDTH_RXVT; @@ -204,21 +213,22 @@ width = min(i, SB_WIDTH_MAXIMUM); # if defined(RXVT_SCROLLBAR) - if (!(R->Options & Opt_scrollBar_floating) && style == R_SB_RXVT) - R->sb_shadow = SHADOW; + if (!(Options & Opt_scrollBar_floating) && style == R_SB_RXVT) + sb_shadow = SHADOW; # endif - R->scrollBar.style = style; - R->scrollBar.width = width; + scrollBar.style = style; + scrollBar.width = width; - /* R->h->scrollbar_align = R_SB_ALIGN_CENTRE; */ + /* scrollbar_align = R_SB_ALIGN_CENTRE; */ if (scrollalign) { if (STRNCASECMP(scrollalign, "top", 3) == 0) - R->h->scrollbar_align = R_SB_ALIGN_TOP; + scrollbar_align = R_SB_ALIGN_TOP; else if (STRNCASECMP(scrollalign, "bottom", 6) == 0) - R->h->scrollbar_align = R_SB_ALIGN_BOTTOM; + scrollbar_align = R_SB_ALIGN_BOTTOM; } #endif } /*----------------------- end-of-file (C source) -----------------------*/ +