ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/scrollbar.C
(Generate patch)

Comparing rxvt-unicode/src/scrollbar.C (file contents):
Revision 1.70 by sf-exg, Fri Aug 26 08:20:43 2011 UTC vs.
Revision 1.75 by sf-exg, Thu Sep 1 08:16:07 2011 UTC

29/*----------------------------------------------------------------------*/ 29/*----------------------------------------------------------------------*/
30 30
31/* 31/*
32 * Map or unmap a scrollbar. Returns non-zero upon change of state 32 * Map or unmap a scrollbar. Returns non-zero upon change of state
33 */ 33 */
34int 34void
35scrollBar_t::map (int map) 35scrollBar_t::map (int map)
36{ 36{
37 int change = 0;
38
39 if (map) 37 if (map)
40 { 38 {
41 state = STATE_IDLE; 39 state = SB_STATE_IDLE;
42 40
43 if (!win) 41 if (!win)
44 resize (); 42 resize ();
43 else
44 XMapWindow (term->dpy, win);
45 }
46 else
47 {
48 state = SB_STATE_OFF;
45 49
46 if (win) 50 if (win)
47 {
48 XMapWindow (term->dpy, win);
49 change = 1;
50 }
51 }
52 else
53 {
54 state = STATE_OFF;
55 XUnmapWindow (term->dpy, win); 51 XUnmapWindow (term->dpy, win);
56 change = 1;
57 } 52 }
58
59 return change;
60} 53}
61 54
62void 55void
63scrollBar_t::resize () 56scrollBar_t::resize ()
64{ 57{
116 if (refresh) 109 if (refresh)
117 { 110 {
118 int sb_top = term->view_start - term->top_row; 111 int sb_top = term->view_start - term->top_row;
119 int sb_bot = sb_top + (term->nrow - 1); 112 int sb_bot = sb_top + (term->nrow - 1);
120 int sb_len = max (term->nrow - 1 - term->top_row, 1); 113 int sb_len = max (term->nrow - 1 - term->top_row, 1);
114 int n = min (min_height (), size ());
121 115
122 top = beg + (sb_top * size ()) / sb_len; 116 top = beg + (sb_top * (size () - n)) / sb_len;
123 bot = top + ecb_div_ru ((sb_bot - sb_top) * size (), sb_len) + min_height (); 117 bot = top + ecb_div_ru ((sb_bot - sb_top) * (size () - n), sb_len) + n;
124 /* no change */ 118 /* no change */
125 if (top == last_top 119 if (top == last_top
126 && bot == last_bot 120 && bot == last_bot
127 && (state == last_state 121 && (state == last_state
128 || !(state == STATE_UP || state == STATE_DOWN))) 122 || !(state == SB_STATE_UP || state == SB_STATE_DOWN)))
129 return 0; 123 return 0;
130 } 124 }
131 125
132 ret = (this->*update) (refresh); 126 ret = (this->*update) (refresh);
133 127
139} 133}
140 134
141void 135void
142scrollBar_t::setup (rxvt_term *term) 136scrollBar_t::setup (rxvt_term *term)
143{ 137{
144 int i; 138 int i;
145 const char *scrollalign, *scrollstyle, *thickness; 139 const char *scrollalign, *scrollstyle, *thickness;
146 140
147 this->term = term; 141 this->term = term;
148 scrollalign = term->rs[Rs_scrollBar_align]; 142 scrollalign = term->rs[Rs_scrollBar_align];
149 scrollstyle = term->rs[Rs_scrollstyle]; 143 scrollstyle = term->rs[Rs_scrollstyle];
150 thickness = term->rs[Rs_scrollBar_thickness]; 144 thickness = term->rs[Rs_scrollBar_thickness];
151 145
152# if defined(RXVT_SCROLLBAR) 146# if defined(RXVT_SCROLLBAR)
153 style = R_SB_RXVT; 147 style = SB_STYLE_RXVT;
154# elif defined(XTERM_SCROLLBAR) 148# elif defined(XTERM_SCROLLBAR)
155 style = R_SB_XTERM; 149 style = SB_STYLE_XTERM;
156# elif defined(NEXT_SCROLLBAR) 150# elif defined(NEXT_SCROLLBAR)
157 style = R_SB_NEXT; 151 style = SB_STYLE_NEXT;
158# elif defined(PLAIN_SCROLLBAR) 152# elif defined(PLAIN_SCROLLBAR)
159 style = R_SB_PLAIN; 153 style = SB_STYLE_PLAIN;
160#else 154#else
161 style = R_SB_RXVT; 155 style = SB_STYLE_RXVT;
162# endif 156# endif
163 157
164# if (defined(NEXT_SCROLLBAR) || defined(XTERM_SCROLLBAR) || defined(PLAIN_SCROLLBAR)) 158# if (defined(NEXT_SCROLLBAR) || defined(XTERM_SCROLLBAR) || defined(PLAIN_SCROLLBAR))
165 if (scrollstyle) 159 if (scrollstyle)
166 { 160 {
167# ifdef NEXT_SCROLLBAR 161# ifdef NEXT_SCROLLBAR
168 if (strncasecmp (scrollstyle, "next", 4) == 0) 162 if (strncasecmp (scrollstyle, "next", 4) == 0)
169 style = R_SB_NEXT; 163 style = SB_STYLE_NEXT;
170# endif 164# endif
171# ifdef XTERM_SCROLLBAR 165# ifdef XTERM_SCROLLBAR
172 if (strncasecmp (scrollstyle, "xterm", 5) == 0) 166 if (strncasecmp (scrollstyle, "xterm", 5) == 0)
173 style = R_SB_XTERM; 167 style = SB_STYLE_XTERM;
174# endif 168# endif
175# ifdef PLAIN_SCROLLBAR 169# ifdef PLAIN_SCROLLBAR
176 if (strncasecmp (scrollstyle, "plain", 5) == 0) 170 if (strncasecmp (scrollstyle, "plain", 5) == 0)
177 style = R_SB_PLAIN; 171 style = SB_STYLE_PLAIN;
178# endif 172# endif
179 173
180 } 174 }
181# endif 175# endif
182 if (style == R_SB_NEXT) 176 if (style == SB_STYLE_NEXT)
183 width = SB_WIDTH_NEXT; 177 width = SB_WIDTH_NEXT;
184 else if (style == R_SB_XTERM) 178 else if (style == SB_STYLE_XTERM)
185 width = SB_WIDTH_XTERM; 179 width = SB_WIDTH_XTERM;
186 else if (style == R_SB_PLAIN) 180 else if (style == SB_STYLE_PLAIN)
187 width = SB_WIDTH_PLAIN; 181 width = SB_WIDTH_PLAIN;
188 else /* if (style == R_SB_RXVT) */ 182 else /* if (style == SB_STYLE_RXVT) */
189 width = SB_WIDTH_RXVT; 183 width = SB_WIDTH_RXVT;
190 184
191 if (style != R_SB_NEXT) /* dishonour request - for now */ 185 if (style != SB_STYLE_NEXT) /* dishonour request - for now */
192 if (thickness && (i = atoi (thickness)) >= SB_WIDTH_MINIMUM) 186 if (thickness && (i = atoi (thickness)) >= SB_WIDTH_MINIMUM)
193 width = min (i, SB_WIDTH_MAXIMUM); 187 width = min (i, SB_WIDTH_MAXIMUM);
194 188
195# ifdef RXVT_SCROLLBAR 189# ifdef RXVT_SCROLLBAR
196 if (! term->option (Opt_scrollBar_floating) && style == R_SB_RXVT) 190 if (! term->option (Opt_scrollBar_floating) && style == SB_STYLE_RXVT)
197 shadow = SHADOW_WIDTH; 191 shadow = SHADOW_WIDTH;
198# endif 192# endif
199 193
200 /* align = R_SB_ALIGN_CENTRE; */ 194 /* align = SB_ALIGN_CENTRE; */
201 if (scrollalign) 195 if (scrollalign)
202 { 196 {
203 if (strncasecmp (scrollalign, "top", 3) == 0) 197 if (strncasecmp (scrollalign, "top", 3) == 0)
204 align = R_SB_ALIGN_TOP; 198 align = SB_ALIGN_TOP;
205 else if (strncasecmp (scrollalign, "bottom", 6) == 0) 199 else if (strncasecmp (scrollalign, "bottom", 6) == 0)
206 align = R_SB_ALIGN_BOTTOM; 200 align = SB_ALIGN_BOTTOM;
207 } 201 }
208 last_state = STATE_OFF; 202 last_state = SB_STATE_OFF;
209 /* cursor scrollBar: Black-on-White */ 203 /* cursor scrollBar: Black-on-White */
210 leftptr_cursor = XCreateFontCursor (term->dpy, XC_left_ptr); 204 leftptr_cursor = XCreateFontCursor (term->dpy, XC_left_ptr);
211} 205}
212 206
213void 207void
241 235
242void 236void
243scrollBar_t::update_data () 237scrollBar_t::update_data ()
244{ 238{
245#if defined(PLAIN_SCROLLBAR) 239#if defined(PLAIN_SCROLLBAR)
246 if (style == R_SB_PLAIN) 240 if (style == SB_STYLE_PLAIN)
247 { 241 {
248 beg = 0; 242 beg = 0;
249 end = term->szHint.height; 243 end = term->szHint.height;
250 update = &scrollBar_t::show_plain; 244 update = &scrollBar_t::show_plain;
251 } 245 }
252#endif 246#endif
253#if defined(XTERM_SCROLLBAR) 247#if defined(XTERM_SCROLLBAR)
254 if (style == R_SB_XTERM) 248 if (style == SB_STYLE_XTERM)
255 { 249 {
256 beg = 0; 250 beg = 0;
257 end = term->szHint.height; 251 end = term->szHint.height;
258 update = &scrollBar_t::show_xterm; 252 update = &scrollBar_t::show_xterm;
259 } 253 }
260#endif 254#endif
261#if defined(NEXT_SCROLLBAR) 255#if defined(NEXT_SCROLLBAR)
262 if (style == R_SB_NEXT) 256 if (style == SB_STYLE_NEXT)
263 { 257 {
264 beg = 0; 258 beg = 0;
265 end = term->szHint.height - (SB_BUTTON_TOTAL_HEIGHT + SB_PADDING); 259 end = term->szHint.height - (SB_BUTTON_TOTAL_HEIGHT + SB_PADDING);
266 update = &scrollBar_t::show_next; 260 update = &scrollBar_t::show_next;
267 } 261 }
268#endif 262#endif
269#if defined(RXVT_SCROLLBAR) 263#if defined(RXVT_SCROLLBAR)
270 if (style == R_SB_RXVT) 264 if (style == SB_STYLE_RXVT)
271 { 265 {
272 beg = (width + 1) + shadow; 266 beg = (width + 1) + shadow;
273 end = term->szHint.height - beg - (2 * shadow); 267 end = term->szHint.height - beg - (2 * shadow);
274 update = &scrollBar_t::show_rxvt; 268 update = &scrollBar_t::show_rxvt;
275 } 269 }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines