--- rxvt-unicode/src/scrollbar.h 2008/01/05 12:19:34 1.11 +++ rxvt-unicode/src/scrollbar.h 2008/02/17 12:11:36 1.16 @@ -5,7 +5,49 @@ struct rxvt_term; +#define R_SB_NEXT 1 +#define R_SB_XTERM 2 +#define R_SB_PLAIN 4 +#define R_SB_RXVT 8 + +#define R_SB_ALIGN_CENTRE 0 +#define R_SB_ALIGN_TOP 1 +#define R_SB_ALIGN_BOTTOM 2 + +#define SB_WIDTH_NEXT 19 +#define SB_WIDTH_XTERM 15 +#define SB_WIDTH_PLAIN 7 +#ifndef SB_WIDTH_RXVT +# define SB_WIDTH_RXVT 10 +#endif + +/* + * NeXT scrollbar defines + */ +#define SB_PADDING 1 +#define SB_BORDER_WIDTH 1 +#define SB_BEVEL_WIDTH_UPPER_LEFT 1 +#define SB_BEVEL_WIDTH_LOWER_RIGHT 2 +#define SB_LEFT_PADDING (SB_PADDING + SB_BORDER_WIDTH) +#define SB_MARGIN_SPACE (SB_PADDING * 2) +#define SB_BUTTON_WIDTH (SB_WIDTH_NEXT - SB_MARGIN_SPACE - SB_BORDER_WIDTH) +#define SB_BUTTON_HEIGHT (SB_BUTTON_WIDTH) +#define SB_BUTTON_SINGLE_HEIGHT (SB_BUTTON_HEIGHT + SB_PADDING) +#define SB_BUTTON_BOTH_HEIGHT (SB_BUTTON_SINGLE_HEIGHT * 2) +#define SB_BUTTON_TOTAL_HEIGHT (SB_BUTTON_BOTH_HEIGHT + SB_PADDING) +#define SB_BUTTON_BEVEL_X (SB_LEFT_PADDING) +#define SB_BUTTON_FACE_X (SB_BUTTON_BEVEL_X + SB_BEVEL_WIDTH_UPPER_LEFT) +#define SB_THUMB_MIN_HEIGHT (SB_BUTTON_WIDTH - (SB_PADDING * 2)) + +enum sb_state { + STATE_IDLE = 1, + STATE_MOTION, + STATE_UP, + STATE_DOWN, +}; + struct scrollBar_t { + rxvt_term *term; char state; /* scrollbar state */ char init; /* scrollbar has been initialised */ unsigned int beg; /* slider sub-window begin height */ @@ -23,26 +65,31 @@ Window win; Cursor leftptr_cursor; int (rxvt_term::*update)(int, int, int, int); + void setup (rxvt_term *); - void setIdle() { state = 1 ; } - void setMotion() { state = 'm'; } - void setUp() { state = 'U'; } - void setDn() { state = 'D'; } + bool upButton (int y) + { + if (style == R_SB_NEXT) + return y > end && y <= end + width + 1; + if (style == R_SB_RXVT) + return y < beg; + return false; + } + bool dnButton (int y) + { + if (style == R_SB_NEXT) + return y > end + width + 1; + if (style == R_SB_RXVT) + return y > end; + return false; + } + unsigned total_width () + { + return width + shadow * 2; + } }; -#define scrollbar_TotalWidth() (scrollBar.width + scrollBar.shadow * 2) -#define scrollbar_isMotion() (scrollBar.state == 'm') -#define scrollbar_isUp() (scrollBar.state == 'U') -#define scrollbar_isDn() (scrollBar.state == 'D') -#define scrollbar_isUpDn() (scrollbar_isUp () || scrollbar_isDn ()) - -#define scrollbarnext_dnval() (scrollBar.end + (scrollBar.width + 1)) -#define scrollbarnext_upButton(y) ((y) > scrollBar.end \ - && (y) <= scrollbarnext_dnval ()) -#define scrollbarnext_dnButton(y) ((y) > scrollbarnext_dnval()) #define SCROLLNEXT_MINHEIGHT SB_THUMB_MIN_HEIGHT -#define scrollbarrxvt_upButton(y) ((y) < scrollBar.beg) -#define scrollbarrxvt_dnButton(y) ((y) > scrollBar.end) #define SCROLLRXVT_MINHEIGHT 10 #define scrollbar_minheight() (scrollBar.style == R_SB_NEXT \ @@ -54,39 +101,6 @@ #define scrollbar_size() (scrollBar.end - scrollBar.beg \ - scrollbar_minheight ()) -#define R_SB_ALIGN_CENTRE 0 -#define R_SB_ALIGN_TOP 1 -#define R_SB_ALIGN_BOTTOM 2 - -#define R_SB_NEXT 1 -#define R_SB_XTERM 2 -#define R_SB_PLAIN 4 -#define R_SB_RXVT 8 - -#define SB_WIDTH_NEXT 19 -#define SB_WIDTH_XTERM 15 -#define SB_WIDTH_PLAIN 7 -#ifndef SB_WIDTH_RXVT -# define SB_WIDTH_RXVT 10 -#endif - -/* - * NeXT scrollbar defines - */ -#define SB_PADDING 1 -#define SB_BORDER_WIDTH 1 -#define SB_BEVEL_WIDTH_UPPER_LEFT 1 -#define SB_BEVEL_WIDTH_LOWER_RIGHT 2 -#define SB_LEFT_PADDING (SB_PADDING + SB_BORDER_WIDTH) -#define SB_MARGIN_SPACE (SB_PADDING * 2) -#define SB_BUTTON_WIDTH (SB_WIDTH_NEXT - SB_MARGIN_SPACE - SB_BORDER_WIDTH) -#define SB_BUTTON_HEIGHT (SB_BUTTON_WIDTH) -#define SB_BUTTON_SINGLE_HEIGHT (SB_BUTTON_HEIGHT + SB_PADDING) -#define SB_BUTTON_BOTH_HEIGHT (SB_BUTTON_SINGLE_HEIGHT * 2) -#define SB_BUTTON_TOTAL_HEIGHT (SB_BUTTON_BOTH_HEIGHT + SB_PADDING) -#define SB_BUTTON_BEVEL_X (SB_LEFT_PADDING) -#define SB_BUTTON_FACE_X (SB_BUTTON_BEVEL_X + SB_BEVEL_WIDTH_UPPER_LEFT) -#define SB_THUMB_MIN_HEIGHT (SB_BUTTON_WIDTH - (SB_PADDING * 2)) /* * +-------------+ * | | <---< SB_PADDING