1 |
#ifndef SCROLLBAR_H |
2 |
#define SCROLLBAR_H |
3 |
|
4 |
#include <X11/Xlib.h> |
5 |
|
6 |
struct rxvt_term; |
7 |
|
8 |
typedef struct { |
9 |
char state; /* scrollbar state */ |
10 |
char init; /* scrollbar has been initialised */ |
11 |
unsigned int beg; /* slider sub-window begin height */ |
12 |
unsigned int end; /* slider sub-window end height */ |
13 |
unsigned int top; /* slider top position */ |
14 |
unsigned int bot; /* slider bottom position */ |
15 |
unsigned int style; /* style: rxvt, xterm, next */ |
16 |
unsigned int width; /* scrollbar width */ |
17 |
int shadow; /* scrollbar shadow width */ |
18 |
int last_bot; /* scrollbar last bottom position */ |
19 |
int last_top; /* scrollbar last top position */ |
20 |
int last_state; /* scrollbar last state */ |
21 |
unsigned char align; |
22 |
Window win; |
23 |
int (rxvt_term::*update)(int, int, int, int); |
24 |
|
25 |
void setIdle() { state = 1 ; } |
26 |
void setMotion() { state = 'm'; } |
27 |
void setUp() { state = 'U'; } |
28 |
void setDn() { state = 'D'; } |
29 |
} scrollBar_t; |
30 |
|
31 |
#define scrollbar_TotalWidth() (scrollBar.width + scrollBar.shadow * 2) |
32 |
#define scrollbar_isMotion() (scrollBar.state == 'm') |
33 |
#define scrollbar_isUp() (scrollBar.state == 'U') |
34 |
#define scrollbar_isDn() (scrollBar.state == 'D') |
35 |
#define scrollbar_isUpDn() (scrollbar_isUp () || scrollbar_isDn ()) |
36 |
|
37 |
#define scrollbarnext_dnval() (scrollBar.end + (scrollBar.width + 1)) |
38 |
#define scrollbarnext_upButton(y) ((y) > scrollBar.end \ |
39 |
&& (y) <= scrollbarnext_dnval ()) |
40 |
#define scrollbarnext_dnButton(y) ((y) > scrollbarnext_dnval()) |
41 |
#define SCROLLNEXT_MINHEIGHT SB_THUMB_MIN_HEIGHT |
42 |
#define scrollbarrxvt_upButton(y) ((y) < scrollBar.beg) |
43 |
#define scrollbarrxvt_dnButton(y) ((y) > scrollBar.end) |
44 |
#define SCROLLRXVT_MINHEIGHT 10 |
45 |
|
46 |
#define scrollbar_minheight() (scrollBar.style == R_SB_NEXT \ |
47 |
? SCROLLNEXT_MINHEIGHT \ |
48 |
: SCROLLRXVT_MINHEIGHT) |
49 |
#define scrollbar_above_slider(y) ((y) < scrollBar.top) |
50 |
#define scrollbar_below_slider(y) ((y) > scrollBar.bot) |
51 |
#define scrollbar_position(y) ((y) - scrollBar.beg) |
52 |
#define scrollbar_size() (scrollBar.end - scrollBar.beg \ |
53 |
- scrollbar_minheight ()) |
54 |
|
55 |
#define R_SB_ALIGN_CENTRE 0 |
56 |
#define R_SB_ALIGN_TOP 1 |
57 |
#define R_SB_ALIGN_BOTTOM 2 |
58 |
|
59 |
#define R_SB_NEXT 1 |
60 |
#define R_SB_XTERM 2 |
61 |
#define R_SB_PLAIN 4 |
62 |
#define R_SB_RXVT 8 |
63 |
|
64 |
#define SB_WIDTH_NEXT 19 |
65 |
#define SB_WIDTH_XTERM 15 |
66 |
#define SB_WIDTH_PLAIN 7 |
67 |
#ifndef SB_WIDTH_RXVT |
68 |
# define SB_WIDTH_RXVT 10 |
69 |
#endif |
70 |
|
71 |
/* |
72 |
* NeXT scrollbar defines |
73 |
*/ |
74 |
#define SB_PADDING 1 |
75 |
#define SB_BORDER_WIDTH 1 |
76 |
#define SB_BEVEL_WIDTH_UPPER_LEFT 1 |
77 |
#define SB_BEVEL_WIDTH_LOWER_RIGHT 2 |
78 |
#define SB_LEFT_PADDING (SB_PADDING + SB_BORDER_WIDTH) |
79 |
#define SB_MARGIN_SPACE (SB_PADDING * 2) |
80 |
#define SB_BUTTON_WIDTH (SB_WIDTH_NEXT - SB_MARGIN_SPACE - SB_BORDER_WIDTH) |
81 |
#define SB_BUTTON_HEIGHT (SB_BUTTON_WIDTH) |
82 |
#define SB_BUTTON_SINGLE_HEIGHT (SB_BUTTON_HEIGHT + SB_PADDING) |
83 |
#define SB_BUTTON_BOTH_HEIGHT (SB_BUTTON_SINGLE_HEIGHT * 2) |
84 |
#define SB_BUTTON_TOTAL_HEIGHT (SB_BUTTON_BOTH_HEIGHT + SB_PADDING) |
85 |
#define SB_BUTTON_BEVEL_X (SB_LEFT_PADDING) |
86 |
#define SB_BUTTON_FACE_X (SB_BUTTON_BEVEL_X + SB_BEVEL_WIDTH_UPPER_LEFT) |
87 |
#define SB_THUMB_MIN_HEIGHT (SB_BUTTON_WIDTH - (SB_PADDING * 2)) |
88 |
/* |
89 |
* +-------------+ |
90 |
* | | <---< SB_PADDING |
91 |
* | ::::::::::: | |
92 |
* | ::::::::::: | |
93 |
* ''''''''''''''''' |
94 |
* ,,,,,,,,,,,,,,,,, |
95 |
* | ::::::::::: | |
96 |
* | ::::::::::: | |
97 |
* | +---------------< SB_BEVEL_WIDTH_UPPER_LEFT |
98 |
* | | :::::::: | |
99 |
* | V :::: vv-------< SB_BEVEL_WIDTH_LOWER_RIGHT |
100 |
* | +---------+ | |
101 |
* | | ......%%| | |
102 |
* | | ......%%| | |
103 |
* | | .. ()..%%| | |
104 |
* | | ......%%| | |
105 |
* | | %%%%%%%%| | |
106 |
* | +---------+ | <......................... |
107 |
* | | <---< SB_PADDING : |
108 |
* | +---------+ | <-+.......... :---< SB_BUTTON_TOTAL_HEIGHT |
109 |
* | | ......%%| | | : : |
110 |
* | | ../\..%%| | |---< SB_BUTTON_HEIGHT : |
111 |
* | | %%%%%%%%| | | : : |
112 |
* | +---------+ | <-+ : : |
113 |
* | | : : |
114 |
* | +---------+ | <-+ :---< SB_BUTTON_BOTH_HEIGHT |
115 |
* | | ......%%| | | : : |
116 |
* | | ..\/..%%| | | : : |
117 |
* | | %%%%%%%%| | |---< SB_BUTTON_SINGLE_HEIGHT |
118 |
* | +---------+ | | : : |
119 |
* | | | : : |
120 |
* +-------------+ <-+.........:............: |
121 |
* ^^|_________| : |
122 |
* || | : |
123 |
* || +---< SB_BUTTON_WIDTH |
124 |
* || : |
125 |
* |+------< SB_PADDING |
126 |
* |: : |
127 |
* +----< SB_BORDER_WIDTH |
128 |
* : : |
129 |
* :............: |
130 |
* | |
131 |
* +---< SB_WIDTH_NEXT |
132 |
*/ |
133 |
|
134 |
#endif |