| 1 |
ayin |
1.1 |
#ifndef SCROLLBAR_H |
| 2 |
|
|
#define SCROLLBAR_H |
| 3 |
|
|
|
| 4 |
|
|
#include <X11/Xlib.h> |
| 5 |
sf-exg |
1.26 |
#include "rxvtutil.h" |
| 6 |
ayin |
1.1 |
|
| 7 |
|
|
struct rxvt_term; |
| 8 |
|
|
|
| 9 |
ayin |
1.16 |
#define SB_WIDTH_NEXT 19 |
| 10 |
|
|
#define SB_WIDTH_XTERM 15 |
| 11 |
|
|
#define SB_WIDTH_PLAIN 7 |
| 12 |
|
|
#ifndef SB_WIDTH_RXVT |
| 13 |
|
|
# define SB_WIDTH_RXVT 10 |
| 14 |
|
|
#endif |
| 15 |
|
|
|
| 16 |
|
|
/* |
| 17 |
|
|
* NeXT scrollbar defines |
| 18 |
|
|
*/ |
| 19 |
|
|
#define SB_PADDING 1 |
| 20 |
|
|
#define SB_BORDER_WIDTH 1 |
| 21 |
|
|
#define SB_BEVEL_WIDTH_UPPER_LEFT 1 |
| 22 |
|
|
#define SB_BEVEL_WIDTH_LOWER_RIGHT 2 |
| 23 |
|
|
#define SB_LEFT_PADDING (SB_PADDING + SB_BORDER_WIDTH) |
| 24 |
|
|
#define SB_MARGIN_SPACE (SB_PADDING * 2) |
| 25 |
|
|
#define SB_BUTTON_WIDTH (SB_WIDTH_NEXT - SB_MARGIN_SPACE - SB_BORDER_WIDTH) |
| 26 |
|
|
#define SB_BUTTON_HEIGHT (SB_BUTTON_WIDTH) |
| 27 |
|
|
#define SB_BUTTON_SINGLE_HEIGHT (SB_BUTTON_HEIGHT + SB_PADDING) |
| 28 |
|
|
#define SB_BUTTON_BOTH_HEIGHT (SB_BUTTON_SINGLE_HEIGHT * 2) |
| 29 |
|
|
#define SB_BUTTON_TOTAL_HEIGHT (SB_BUTTON_BOTH_HEIGHT + SB_PADDING) |
| 30 |
|
|
#define SB_BUTTON_BEVEL_X (SB_LEFT_PADDING) |
| 31 |
|
|
#define SB_BUTTON_FACE_X (SB_BUTTON_BEVEL_X + SB_BEVEL_WIDTH_UPPER_LEFT) |
| 32 |
|
|
#define SB_THUMB_MIN_HEIGHT (SB_BUTTON_WIDTH - (SB_PADDING * 2)) |
| 33 |
|
|
|
| 34 |
ayin |
1.13 |
enum sb_state { |
| 35 |
sf-exg |
1.28 |
SB_STATE_OFF, |
| 36 |
|
|
SB_STATE_IDLE, |
| 37 |
|
|
SB_STATE_MOTION, |
| 38 |
|
|
SB_STATE_UP, |
| 39 |
|
|
SB_STATE_DOWN, |
| 40 |
ayin |
1.13 |
}; |
| 41 |
|
|
|
| 42 |
sf-exg |
1.24 |
enum sb_style { |
| 43 |
sf-exg |
1.28 |
SB_STYLE_NEXT = 1, |
| 44 |
|
|
SB_STYLE_XTERM = 2, |
| 45 |
|
|
SB_STYLE_PLAIN = 4, |
| 46 |
|
|
SB_STYLE_RXVT = 8, |
| 47 |
sf-exg |
1.24 |
}; |
| 48 |
|
|
|
| 49 |
|
|
enum sb_align { |
| 50 |
sf-exg |
1.28 |
SB_ALIGN_CENTRE, |
| 51 |
|
|
SB_ALIGN_TOP, |
| 52 |
|
|
SB_ALIGN_BOTTOM, |
| 53 |
sf-exg |
1.24 |
}; |
| 54 |
|
|
|
| 55 |
root |
1.23 |
struct scrollBar_t |
| 56 |
|
|
{ |
| 57 |
ayin |
1.14 |
rxvt_term *term; |
| 58 |
sf-exg |
1.24 |
sb_state state; /* scrollbar state */ |
| 59 |
ayin |
1.1 |
char init; /* scrollbar has been initialised */ |
| 60 |
sf-exg |
1.26 |
int beg; /* slider sub-window begin height */ |
| 61 |
|
|
int end; /* slider sub-window end height */ |
| 62 |
|
|
int top; /* slider top position */ |
| 63 |
|
|
int bot; /* slider bottom position */ |
| 64 |
sf-exg |
1.24 |
sb_style style; /* style: rxvt, xterm, next */ |
| 65 |
sf-exg |
1.26 |
int width; /* scrollbar width */ |
| 66 |
ayin |
1.3 |
int shadow; /* scrollbar shadow width */ |
| 67 |
ayin |
1.7 |
int last_bot; /* scrollbar last bottom position */ |
| 68 |
|
|
int last_top; /* scrollbar last top position */ |
| 69 |
|
|
int last_state; /* scrollbar last state */ |
| 70 |
sf-exg |
1.24 |
sb_align align; |
| 71 |
ayin |
1.1 |
Window win; |
| 72 |
ayin |
1.10 |
Cursor leftptr_cursor; |
| 73 |
ayin |
1.20 |
int (scrollBar_t::*update)(int); |
| 74 |
ayin |
1.14 |
void setup (rxvt_term *); |
| 75 |
ayin |
1.19 |
void resize (); |
| 76 |
sf-exg |
1.27 |
void map (int); |
| 77 |
ayin |
1.19 |
int show (int); |
| 78 |
ayin |
1.20 |
void destroy (); |
| 79 |
ayin |
1.1 |
|
| 80 |
ayin |
1.12 |
bool upButton (int y) |
| 81 |
|
|
{ |
| 82 |
sf-exg |
1.28 |
if (style == SB_STYLE_NEXT) |
| 83 |
ayin |
1.12 |
return y > end && y <= end + width + 1; |
| 84 |
sf-exg |
1.28 |
if (style == SB_STYLE_RXVT) |
| 85 |
ayin |
1.12 |
return y < beg; |
| 86 |
|
|
return false; |
| 87 |
|
|
} |
| 88 |
|
|
bool dnButton (int y) |
| 89 |
|
|
{ |
| 90 |
sf-exg |
1.28 |
if (style == SB_STYLE_NEXT) |
| 91 |
ayin |
1.12 |
return y > end + width + 1; |
| 92 |
sf-exg |
1.28 |
if (style == SB_STYLE_RXVT) |
| 93 |
ayin |
1.12 |
return y > end; |
| 94 |
|
|
return false; |
| 95 |
|
|
} |
| 96 |
sf-exg |
1.26 |
int min_height () |
| 97 |
ayin |
1.17 |
{ |
| 98 |
sf-exg |
1.28 |
return style == SB_STYLE_NEXT ? SB_THUMB_MIN_HEIGHT : 10; |
| 99 |
ayin |
1.17 |
} |
| 100 |
sf-exg |
1.26 |
int size () |
| 101 |
ayin |
1.17 |
{ |
| 102 |
sf-exg |
1.26 |
return max (end - beg - min_height (), 0); |
| 103 |
ayin |
1.17 |
} |
| 104 |
sf-exg |
1.26 |
int total_width () |
| 105 |
ayin |
1.15 |
{ |
| 106 |
|
|
return width + shadow * 2; |
| 107 |
|
|
} |
| 108 |
sf-exg |
1.25 |
bool above_slider (int y) |
| 109 |
|
|
{ |
| 110 |
|
|
return y < top; |
| 111 |
|
|
} |
| 112 |
|
|
bool below_slider (int y) |
| 113 |
|
|
{ |
| 114 |
|
|
return y > bot; |
| 115 |
|
|
} |
| 116 |
|
|
int position (int y) |
| 117 |
|
|
{ |
| 118 |
|
|
return y - beg; |
| 119 |
|
|
} |
| 120 |
|
|
|
| 121 |
ayin |
1.20 |
|
| 122 |
|
|
#if defined(NEXT_SCROLLBAR) |
| 123 |
|
|
GC blackGC, |
| 124 |
|
|
whiteGC, |
| 125 |
|
|
grayGC, |
| 126 |
|
|
darkGC, |
| 127 |
|
|
stippleGC; |
| 128 |
|
|
Pixmap dimple, |
| 129 |
|
|
upArrow, |
| 130 |
|
|
downArrow, |
| 131 |
|
|
upArrowHi, |
| 132 |
|
|
downArrowHi; |
| 133 |
|
|
#endif |
| 134 |
|
|
|
| 135 |
|
|
#if defined(RXVT_SCROLLBAR) |
| 136 |
|
|
GC scrollbarGC, |
| 137 |
|
|
topShadowGC, |
| 138 |
|
|
botShadowGC; |
| 139 |
|
|
#endif |
| 140 |
|
|
|
| 141 |
|
|
#if defined(XTERM_SCROLLBAR) |
| 142 |
|
|
GC xscrollbarGC, |
| 143 |
|
|
ShadowGC; |
| 144 |
|
|
#endif |
| 145 |
|
|
|
| 146 |
|
|
#if defined(PLAIN_SCROLLBAR) |
| 147 |
|
|
GC pscrollbarGC; |
| 148 |
|
|
#endif |
| 149 |
|
|
|
| 150 |
ayin |
1.22 |
private: |
| 151 |
|
|
// update style dependent data |
| 152 |
|
|
void update_data (); |
| 153 |
|
|
|
| 154 |
ayin |
1.20 |
// scrollbar-next.C |
| 155 |
|
|
int show_next (int); |
| 156 |
|
|
// scrollbar-rxvt.C |
| 157 |
|
|
int show_rxvt (int); |
| 158 |
|
|
// scrollbar-xterm.C |
| 159 |
|
|
int show_xterm (int); |
| 160 |
|
|
// scrollbar-plain.C |
| 161 |
|
|
int show_plain (int); |
| 162 |
|
|
|
| 163 |
|
|
void init_next (); |
| 164 |
ayin |
1.11 |
}; |
| 165 |
ayin |
1.1 |
|
| 166 |
|
|
/* |
| 167 |
|
|
* +-------------+ |
| 168 |
|
|
* | | <---< SB_PADDING |
| 169 |
|
|
* | ::::::::::: | |
| 170 |
|
|
* | ::::::::::: | |
| 171 |
|
|
* ''''''''''''''''' |
| 172 |
|
|
* ,,,,,,,,,,,,,,,,, |
| 173 |
|
|
* | ::::::::::: | |
| 174 |
|
|
* | ::::::::::: | |
| 175 |
|
|
* | +---------------< SB_BEVEL_WIDTH_UPPER_LEFT |
| 176 |
|
|
* | | :::::::: | |
| 177 |
|
|
* | V :::: vv-------< SB_BEVEL_WIDTH_LOWER_RIGHT |
| 178 |
|
|
* | +---------+ | |
| 179 |
|
|
* | | ......%%| | |
| 180 |
|
|
* | | ......%%| | |
| 181 |
|
|
* | | .. ()..%%| | |
| 182 |
|
|
* | | ......%%| | |
| 183 |
|
|
* | | %%%%%%%%| | |
| 184 |
|
|
* | +---------+ | <......................... |
| 185 |
|
|
* | | <---< SB_PADDING : |
| 186 |
|
|
* | +---------+ | <-+.......... :---< SB_BUTTON_TOTAL_HEIGHT |
| 187 |
|
|
* | | ......%%| | | : : |
| 188 |
|
|
* | | ../\..%%| | |---< SB_BUTTON_HEIGHT : |
| 189 |
|
|
* | | %%%%%%%%| | | : : |
| 190 |
|
|
* | +---------+ | <-+ : : |
| 191 |
|
|
* | | : : |
| 192 |
|
|
* | +---------+ | <-+ :---< SB_BUTTON_BOTH_HEIGHT |
| 193 |
|
|
* | | ......%%| | | : : |
| 194 |
|
|
* | | ..\/..%%| | | : : |
| 195 |
|
|
* | | %%%%%%%%| | |---< SB_BUTTON_SINGLE_HEIGHT |
| 196 |
|
|
* | +---------+ | | : : |
| 197 |
|
|
* | | | : : |
| 198 |
|
|
* +-------------+ <-+.........:............: |
| 199 |
|
|
* ^^|_________| : |
| 200 |
|
|
* || | : |
| 201 |
|
|
* || +---< SB_BUTTON_WIDTH |
| 202 |
|
|
* || : |
| 203 |
|
|
* |+------< SB_PADDING |
| 204 |
|
|
* |: : |
| 205 |
|
|
* +----< SB_BORDER_WIDTH |
| 206 |
|
|
* : : |
| 207 |
|
|
* :............: |
| 208 |
|
|
* | |
| 209 |
|
|
* +---< SB_WIDTH_NEXT |
| 210 |
|
|
*/ |
| 211 |
|
|
|
| 212 |
|
|
#endif |