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

Comparing rxvt-unicode/src/scrollbar-next.C (file contents):
Revision 1.5 by pcg, Sat Jan 31 00:20:21 2004 UTC vs.
Revision 1.16 by root, Fri Feb 4 11:41:23 2005 UTC

1/*--------------------------------*-C-*---------------------------------* 1/*--------------------------------*-C-*---------------------------------*
2 * File: scrollbar-next.c 2 * File: scrollbar-next.C
3 *----------------------------------------------------------------------* 3 *----------------------------------------------------------------------*
4 * $Id: scrollbar-next.C,v 1.5 2004/01/31 00:20:21 pcg Exp $
5 * 4 *
6 * Copyright (c) 1997,1998 mj olesen <olesen@me.QueensU.CA> 5 * Copyright (c) 1997,1998 mj olesen <olesen@me.QueensU.CA>
7 * Copyright (c) 1998 Alfredo K. Kojima <kojima@windowmaker.org> 6 * Copyright (c) 1998 Alfredo K. Kojima <kojima@windowmaker.org>
8 * - N*XTstep like scrollbars 7 * - N*XTstep like scrollbars
9 * Copyright (c) 1999-2001 Geoff Wing <gcw@pobox.com> 8 * Copyright (c) 1999-2001 Geoff Wing <gcw@pobox.com>
9 * Copyright (c) 2004 Marc Lehmann <pcg@goof.com>
10 * 10 *
11 * This program is free software; you can redistribute it and/or modify 11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by 12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or 13 * the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version. 14 * (at your option) any later version.
23 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 23 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24 *----------------------------------------------------------------------*/ 24 *----------------------------------------------------------------------*/
25 25
26#include "../config.h" /* NECESSARY */ 26#include "../config.h" /* NECESSARY */
27#include "rxvt.h" /* NECESSARY */ 27#include "rxvt.h" /* NECESSARY */
28#include "scrollbar-next.intpro" /* PROTOS for internal routines */
29 28
30/*----------------------------------------------------------------------*/ 29/*----------------------------------------------------------------------*/
31#if defined(NEXT_SCROLLBAR) 30#if defined(NEXT_SCROLLBAR)
32 31
33#define n_stp_width 8 32#define n_stp_width 8
40#define SCROLLER_DIMPLE_WIDTH 6 39#define SCROLLER_DIMPLE_WIDTH 6
41#define SCROLLER_DIMPLE_HEIGHT 6 40#define SCROLLER_DIMPLE_HEIGHT 6
42#define ARROW_WIDTH 13 41#define ARROW_WIDTH 13
43#define ARROW_HEIGHT 13 42#define ARROW_HEIGHT 13
44 43
45const char *const SCROLLER_DIMPLE[] = { 44const char *const SCROLLER_DIMPLE[] =
45 {
46 ".%###.", 46 ".%###.",
47 "%#%%%%", 47 "%#%%%%",
48 "#%%...", 48 "#%%...",
49 "#%.. ", 49 "#%.. ",
50 "#%. ", 50 "#%. ",
51 ".%. ." 51 ".%. ."
52}; 52 };
53const char *const SCROLLER_ARROW_UP[] = { 53const char *const SCROLLER_ARROW_UP[] =
54 {
54 ".............", 55 ".............",
55 ".............", 56 ".............",
56 "......%......", 57 "......%......",
57 "......#......", 58 "......#......",
58 ".....%#%.....", 59 ".....%#%.....",
62 "...%#####%...", 63 "...%#####%...",
63 "...#######...", 64 "...#######...",
64 "..%#######%..", 65 "..%#######%..",
65 ".............", 66 ".............",
66 "............." 67 "............."
67}; 68 };
68const char *const SCROLLER_ARROW_DOWN[] = { 69const char *const SCROLLER_ARROW_DOWN[] =
70 {
69 ".............", 71 ".............",
70 ".............", 72 ".............",
71 "..%#######%..", 73 "..%#######%..",
72 "...#######...", 74 "...#######...",
73 "...%#####%...", 75 "...%#####%...",
77 ".....%#%.....", 79 ".....%#%.....",
78 "......#......", 80 "......#......",
79 "......%......", 81 "......%......",
80 ".............", 82 ".............",
81 "............." 83 "............."
82}; 84 };
83const char *const HI_SCROLLER_ARROW_UP[] = { 85const char *const HI_SCROLLER_ARROW_UP[] =
86 {
84 " ", 87 " ",
85 " ", 88 " ",
86 " % ", 89 " % ",
87 " % ", 90 " % ",
88 " %%% ", 91 " %%% ",
92 " %%%%%%% ", 95 " %%%%%%% ",
93 " %%%%%%% ", 96 " %%%%%%% ",
94 " %%%%%%%%% ", 97 " %%%%%%%%% ",
95 " ", 98 " ",
96 " " 99 " "
97}; 100 };
98const char *const HI_SCROLLER_ARROW_DOWN[] = { 101const char *const HI_SCROLLER_ARROW_DOWN[] =
102 {
99 " ", 103 " ",
100 " ", 104 " ",
101 " %%%%%%%%% ", 105 " %%%%%%%%% ",
102 " %%%%%%% ", 106 " %%%%%%% ",
103 " %%%%%%% ", 107 " %%%%%%% ",
107 " %%% ", 111 " %%% ",
108 " % ", 112 " % ",
109 " % ", 113 " % ",
110 " ", 114 " ",
111 " " 115 " "
112}; 116 };
113 117
114Pixmap 118Pixmap
115rxvt_term::renderPixmap (const char *const *data, int width, int height) 119rxvt_term::renderPixmap (const char *const *data, int width, int height)
116{ 120{
117 char a; 121 char a;
118 int x, y; 122 int x, y;
119 Pixmap d; 123 Pixmap d;
120 GC pointcolour; 124 GC pointcolour;
121 125
122 d = XCreatePixmap(Xdisplay, scrollBar.win, width, height, XDEPTH); 126 d = XCreatePixmap (display->display, scrollBar.win, width, height, display->depth);
123 127
124 for (y = 0; y < height; y++) { 128 for (y = 0; y < height; y++)
129 {
125 for (x = 0; x < width; x++) { 130 for (x = 0; x < width; x++)
131 {
126 if ((a = data[y][x]) == ' ' || a == 'w') 132 if ((a = data[y][x]) == ' ' || a == 'w')
127 pointcolour = whiteGC; 133 pointcolour = whiteGC;
128 else if (a == '.' || a == 'l') 134 else if (a == '.' || a == 'l')
129 pointcolour = grayGC; 135 pointcolour = grayGC;
130 else if (a == '%' || a == 'd') 136 else if (a == '%' || a == 'd')
131 pointcolour = darkGC; 137 pointcolour = darkGC;
132 else /* if (a == '#' || a == 'b' || a) */ 138 else /* if (a == '#' || a == 'b' || a) */
133 pointcolour = blackGC; 139 pointcolour = blackGC;
140
134 XDrawPoint(Xdisplay, d, pointcolour, x, y); 141 XDrawPoint (display->display, d, pointcolour, x, y);
135 } 142 }
136 } 143 }
137 return d; 144 return d;
138} 145}
139 146
140void 147void
141rxvt_term::init_scrollbar_stuff () 148rxvt_term::init_scrollbar_stuff ()
142{ 149{
143 XGCValues gcvalue; 150 XGCValues gcvalue;
144 XColor xcol; 151 XColor xcol;
145 Pixmap stipple; 152 Pixmap stipple;
146 unsigned long light, dark; 153 unsigned long light, dark;
154 dDisp;
147 155
148 gcvalue.graphics_exposures = False; 156 gcvalue.graphics_exposures = False;
149 157
150 gcvalue.foreground = PixColors[Color_Black]; 158 gcvalue.foreground = pix_colors_focused[Color_Black];
151 blackGC = XCreateGC(Xdisplay, scrollBar.win, 159 blackGC = XCreateGC (disp, scrollBar.win,
152 GCForeground | GCGraphicsExposures, &gcvalue); 160 GCForeground | GCGraphicsExposures, &gcvalue);
153 161
154 gcvalue.foreground = PixColors[Color_White]; 162 gcvalue.foreground = pix_colors_focused[Color_White];
155 whiteGC = XCreateGC(Xdisplay, scrollBar.win, 163 whiteGC = XCreateGC (disp, scrollBar.win,
156 GCForeground | GCGraphicsExposures, &gcvalue); 164 GCForeground | GCGraphicsExposures, &gcvalue);
157 165
158 xcol.red = 0xaeba; 166 xcol.red = 0xaeba;
159 xcol.green = 0xaaaa; 167 xcol.green = 0xaaaa;
160 xcol.blue = 0xaeba; 168 xcol.blue = 0xaeba;
161 //if (!rXAllocColor (&xcol, "light gray"))//TODO//D// 169 //if (!rXAllocColor (&xcol, "light gray"))//TODO//D//
162 xcol.pixel = PixColors[Color_AntiqueWhite]; 170 xcol.pixel = pix_colors_focused[Color_AntiqueWhite];
163 light = gcvalue.foreground = xcol.pixel; 171 light = gcvalue.foreground = xcol.pixel;
164 grayGC = XCreateGC(Xdisplay, scrollBar.win, 172 grayGC = XCreateGC (disp, scrollBar.win,
165 GCForeground | GCGraphicsExposures, &gcvalue); 173 GCForeground | GCGraphicsExposures, &gcvalue);
166 174
167 xcol.red = 0x51aa; 175 xcol.red = 0x51aa;
168 xcol.green = 0x5555; 176 xcol.green = 0x5555;
169 xcol.blue = 0x5144; 177 xcol.blue = 0x5144;
170 //if (!rXAllocColor (&xcol, "dark gray"))//TODO//D// 178 //if (!rXAllocColor (&xcol, "dark gray"))//TODO//D//
171 xcol.pixel = PixColors[Color_Grey25]; 179 xcol.pixel = pix_colors_focused[Color_Grey25];
172 dark = gcvalue.foreground = xcol.pixel; 180 dark = gcvalue.foreground = xcol.pixel;
173 darkGC = XCreateGC(Xdisplay, scrollBar.win, 181 darkGC = XCreateGC (disp, scrollBar.win,
174 GCForeground | GCGraphicsExposures, &gcvalue); 182 GCForeground | GCGraphicsExposures, &gcvalue);
175 183
176 stipple = XCreateBitmapFromData(Xdisplay, scrollBar.win, 184 stipple = XCreateBitmapFromData (disp, scrollBar.win,
177 (char *)n_stp_bits, n_stp_width, 185 (char *)n_stp_bits, n_stp_width,
178 n_stp_height); 186 n_stp_height);
179 187
180 gcvalue.foreground = dark; 188 gcvalue.foreground = dark;
181 gcvalue.background = light; 189 gcvalue.background = light;
182 gcvalue.fill_style = FillOpaqueStippled; 190 gcvalue.fill_style = FillOpaqueStippled;
183 gcvalue.stipple = stipple; 191 gcvalue.stipple = stipple;
184 192
185/* XSetWindowBackground(Xdisplay, scrollBar.win, PixColors[Color_Red]); */ 193 /* XSetWindowBackground (disp, scrollBar.win, pix_colors_focused[Color_Red]); */
186 194
187 stippleGC = XCreateGC(Xdisplay, scrollBar.win, 195 stippleGC = XCreateGC (disp, scrollBar.win,
188 GCForeground | GCBackground | GCStipple 196 GCForeground | GCBackground | GCStipple
189 | GCFillStyle | GCGraphicsExposures, &gcvalue); 197 | GCFillStyle | GCGraphicsExposures, &gcvalue);
190 198
191 dimple = renderPixmap (SCROLLER_DIMPLE, SCROLLER_DIMPLE_WIDTH, 199 dimple = renderPixmap (SCROLLER_DIMPLE, SCROLLER_DIMPLE_WIDTH,
192 SCROLLER_DIMPLE_HEIGHT); 200 SCROLLER_DIMPLE_HEIGHT);
193 201
194 upArrow = renderPixmap (SCROLLER_ARROW_UP, ARROW_WIDTH, 202 upArrow = renderPixmap (SCROLLER_ARROW_UP, ARROW_WIDTH,
195 ARROW_HEIGHT); 203 ARROW_HEIGHT);
196 downArrow = renderPixmap (SCROLLER_ARROW_DOWN, ARROW_WIDTH, 204 downArrow = renderPixmap (SCROLLER_ARROW_DOWN, ARROW_WIDTH,
197 ARROW_HEIGHT); 205 ARROW_HEIGHT);
198 upArrowHi = renderPixmap (HI_SCROLLER_ARROW_UP, ARROW_WIDTH, 206 upArrowHi = renderPixmap (HI_SCROLLER_ARROW_UP, ARROW_WIDTH,
199 ARROW_HEIGHT); 207 ARROW_HEIGHT);
200 downArrowHi = renderPixmap (HI_SCROLLER_ARROW_DOWN, 208 downArrowHi = renderPixmap (HI_SCROLLER_ARROW_DOWN,
201 ARROW_WIDTH, ARROW_HEIGHT); 209 ARROW_WIDTH, ARROW_HEIGHT);
202} 210}
203 211
204/* Draw bevel & arrows */ 212/* Draw bevel & arrows */
205void 213void
206rxvt_term::drawBevel (Drawable d, int x1, int y1, int w, int h) 214rxvt_term::drawBevel (Drawable d, int x1, int y1, int w, int h)
207{ 215{
208 int x2, y2; 216 int x2, y2;
217 dDisp;
209 218
210 x2 = x1 + w - 1; /* right point */ 219 x2 = x1 + w - 1; /* right point */
211 y2 = y1 + h - 1; /* bottom point */ 220 y2 = y1 + h - 1; /* bottom point */
212/* white top and left */ 221 /* white top and left */
213 XDrawLine(Xdisplay, d, whiteGC, x1, y1, x2, y1); 222 XDrawLine (disp, d, whiteGC, x1, y1, x2, y1);
214 XDrawLine(Xdisplay, d, whiteGC, x1, y1, x1, y2); 223 XDrawLine (disp, d, whiteGC, x1, y1, x1, y2);
215/* black bottom and right */ 224 /* black bottom and right */
216 XDrawLine(Xdisplay, d, blackGC, x1, y2, x2, y2); 225 XDrawLine (disp, d, blackGC, x1, y2, x2, y2);
217 XDrawLine(Xdisplay, d, blackGC, x2, y1, x2, y2); 226 XDrawLine (disp, d, blackGC, x2, y1, x2, y2);
218/* dark inside bottom and right */ 227 /* dark inside bottom and right */
219 x1++, y1++, x2--, y2--; /* move in one point */ 228 x1++, y1++, x2--, y2--; /* move in one point */
220 XDrawLine(Xdisplay, d, darkGC, x1, y2, x2, y2); 229 XDrawLine (disp, d, darkGC, x1, y2, x2, y2);
221 XDrawLine(Xdisplay, d, darkGC, x2, y1, x2, y2); 230 XDrawLine (disp, d, darkGC, x2, y1, x2, y2);
222} 231}
223 232
224int 233int
225rxvt_term::scrollbar_show_next (int update, int last_top, int last_bot, int scrollbar_len) 234rxvt_term::scrollbar_show_next (int update, int last_top, int last_bot, int scrollbar_len)
226{ 235{
227 int height = scrollBar.end + SB_BUTTON_TOTAL_HEIGHT + SB_PADDING; 236 int height = scrollBar.end + SB_BUTTON_TOTAL_HEIGHT + SB_PADDING;
228 Drawable s; 237 Drawable s;
238 dDisp;
229 239
230 if ((scrollBar.init & R_SB_NEXT) == 0) { 240 if ((scrollBar.init & R_SB_NEXT) == 0)
241 {
231 scrollBar.init |= R_SB_NEXT; 242 scrollBar.init |= R_SB_NEXT;
232 init_scrollbar_stuff (); 243 init_scrollbar_stuff ();
233 } 244 }
234 245
235 if (TermWin.nscrolled == 0 || !update) { 246 if (TermWin.nscrolled == 0 || !update)
247 {
236 XFillRectangle(Xdisplay, scrollBar.win, grayGC, 0, 0, 248 XFillRectangle (disp, scrollBar.win, grayGC, 0, 0,
237 SB_WIDTH_NEXT + 1, height); 249 SB_WIDTH_NEXT + 1, height);
238 XDrawRectangle(Xdisplay, scrollBar.win, blackGC, 0, 250 XDrawRectangle (disp, scrollBar.win, blackGC, 0,
239 -SB_BORDER_WIDTH, SB_WIDTH_NEXT, 251 -SB_BORDER_WIDTH, SB_WIDTH_NEXT,
240 height + SB_BORDER_WIDTH); 252 height + SB_BORDER_WIDTH);
241 XFillRectangle(Xdisplay, scrollBar.win, stippleGC, 253 XFillRectangle (disp, scrollBar.win, stippleGC,
242 SB_LEFT_PADDING, 0, SB_BUTTON_WIDTH, height); 254 SB_LEFT_PADDING, 0, SB_BUTTON_WIDTH, height);
243 } 255 }
256
244 if (TermWin.nscrolled) { 257 if (TermWin.nscrolled)
258 {
245 if (last_top < scrollBar.top || !update) 259 if (last_top < scrollBar.top || !update)
246 XFillRectangle(Xdisplay, scrollBar.win, stippleGC, 260 XFillRectangle (disp, scrollBar.win, stippleGC,
247 SB_LEFT_PADDING, SB_PADDING + last_top, 261 SB_LEFT_PADDING, SB_PADDING + last_top,
248 SB_BUTTON_WIDTH, scrollBar.top - last_top); 262 SB_BUTTON_WIDTH, scrollBar.top - last_top);
263
249 if (scrollBar.bot < last_bot || !update) 264 if (scrollBar.bot < last_bot || !update)
250 XFillRectangle(Xdisplay, scrollBar.win, stippleGC, 265 XFillRectangle (disp, scrollBar.win, stippleGC,
251 SB_LEFT_PADDING, scrollBar.bot + SB_PADDING, 266 SB_LEFT_PADDING, scrollBar.bot + SB_PADDING,
252 SB_BUTTON_WIDTH, (last_bot - scrollBar.bot)); 267 SB_BUTTON_WIDTH, (last_bot - scrollBar.bot));
268
253 XFillRectangle(Xdisplay, scrollBar.win, grayGC, 269 XFillRectangle (disp, scrollBar.win, grayGC,
254 SB_LEFT_PADDING, scrollBar.top + SB_PADDING, 270 SB_LEFT_PADDING, scrollBar.top + SB_PADDING,
255 SB_BUTTON_WIDTH, scrollbar_len); 271 SB_BUTTON_WIDTH, scrollbar_len);
272
256 XCopyArea(Xdisplay, dimple, scrollBar.win, whiteGC, 0, 0, 273 XCopyArea (disp, dimple, scrollBar.win, whiteGC, 0, 0,
257 SCROLLER_DIMPLE_WIDTH, SCROLLER_DIMPLE_HEIGHT, 274 SCROLLER_DIMPLE_WIDTH, SCROLLER_DIMPLE_HEIGHT,
258 (SB_WIDTH_NEXT - SCROLLER_DIMPLE_WIDTH) / 2, 275 (SB_WIDTH_NEXT - SCROLLER_DIMPLE_WIDTH) / 2,
259 scrollBar.top + SB_BEVEL_WIDTH_UPPER_LEFT + 276 scrollBar.top + SB_BEVEL_WIDTH_UPPER_LEFT +
260 (scrollbar_len - SCROLLER_DIMPLE_HEIGHT) / 2); 277 (scrollbar_len - SCROLLER_DIMPLE_HEIGHT) / 2);
261 278
262 drawBevel (scrollBar.win, SB_BUTTON_BEVEL_X, 279 drawBevel (scrollBar.win, SB_BUTTON_BEVEL_X,
263 scrollBar.top + SB_PADDING, SB_BUTTON_WIDTH, 280 scrollBar.top + SB_PADDING, SB_BUTTON_WIDTH,
264 scrollbar_len); 281 scrollbar_len);
265 drawBevel (scrollBar.win, SB_BUTTON_BEVEL_X, 282 drawBevel (scrollBar.win, SB_BUTTON_BEVEL_X,
266 height - SB_BUTTON_BOTH_HEIGHT, SB_BUTTON_WIDTH, 283 height - SB_BUTTON_BOTH_HEIGHT, SB_BUTTON_WIDTH,
267 SB_BUTTON_HEIGHT); 284 SB_BUTTON_HEIGHT);
268 drawBevel (scrollBar.win, SB_BUTTON_BEVEL_X, 285 drawBevel (scrollBar.win, SB_BUTTON_BEVEL_X,
269 height - SB_BUTTON_SINGLE_HEIGHT, SB_BUTTON_WIDTH, 286 height - SB_BUTTON_SINGLE_HEIGHT, SB_BUTTON_WIDTH,
270 SB_BUTTON_HEIGHT); 287 SB_BUTTON_HEIGHT);
271 288
272 s = (scrollbar_isUp()) ? upArrowHi : upArrow; 289 s = (scrollbar_isUp ()) ? upArrowHi : upArrow;
273 XCopyArea(Xdisplay, s, scrollBar.win, whiteGC, 0, 0, 290 XCopyArea (disp, s, scrollBar.win, whiteGC, 0, 0,
274 ARROW_WIDTH, ARROW_HEIGHT, SB_BUTTON_FACE_X, 291 ARROW_WIDTH, ARROW_HEIGHT, SB_BUTTON_FACE_X,
275 height - SB_BUTTON_BOTH_HEIGHT + SB_BEVEL_WIDTH_UPPER_LEFT); 292 height - SB_BUTTON_BOTH_HEIGHT + SB_BEVEL_WIDTH_UPPER_LEFT);
276 293
277 s = (scrollbar_isDn()) ? downArrowHi : downArrow; 294 s = (scrollbar_isDn ()) ? downArrowHi : downArrow;
278 XCopyArea(Xdisplay, s, scrollBar.win, whiteGC, 0, 0, 295 XCopyArea (disp, s, scrollBar.win, whiteGC, 0, 0,
279 ARROW_WIDTH, ARROW_HEIGHT, SB_BUTTON_FACE_X, 296 ARROW_WIDTH, ARROW_HEIGHT, SB_BUTTON_FACE_X,
280 height - SB_BUTTON_SINGLE_HEIGHT + SB_BEVEL_WIDTH_UPPER_LEFT); 297 height - SB_BUTTON_SINGLE_HEIGHT + SB_BEVEL_WIDTH_UPPER_LEFT);
281 } 298 }
299
282 return 1; 300 return 1;
283} 301}
284#endif /* NEXT_SCROLLBAR */ 302#endif /* NEXT_SCROLLBAR */
285/*----------------------- end-of-file (C source) -----------------------*/ 303/*----------------------- end-of-file (C source) -----------------------*/

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines