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.6 by pcg, Sat Jan 31 04:12:10 2004 UTC vs.
Revision 1.7 by pcg, Sun Feb 1 01:34:41 2004 UTC

39#define SCROLLER_DIMPLE_WIDTH 6 39#define SCROLLER_DIMPLE_WIDTH 6
40#define SCROLLER_DIMPLE_HEIGHT 6 40#define SCROLLER_DIMPLE_HEIGHT 6
41#define ARROW_WIDTH 13 41#define ARROW_WIDTH 13
42#define ARROW_HEIGHT 13 42#define ARROW_HEIGHT 13
43 43
44const char *const SCROLLER_DIMPLE[] = { 44const char *const SCROLLER_DIMPLE[] =
45 {
45 ".%###.", 46 ".%###.",
46 "%#%%%%", 47 "%#%%%%",
47 "#%%...", 48 "#%%...",
48 "#%.. ", 49 "#%.. ",
49 "#%. ", 50 "#%. ",
50 ".%. ." 51 ".%. ."
51}; 52 };
52const char *const SCROLLER_ARROW_UP[] = { 53const char *const SCROLLER_ARROW_UP[] =
54 {
53 ".............", 55 ".............",
54 ".............", 56 ".............",
55 "......%......", 57 "......%......",
56 "......#......", 58 "......#......",
57 ".....%#%.....", 59 ".....%#%.....",
61 "...%#####%...", 63 "...%#####%...",
62 "...#######...", 64 "...#######...",
63 "..%#######%..", 65 "..%#######%..",
64 ".............", 66 ".............",
65 "............." 67 "............."
66}; 68 };
67const char *const SCROLLER_ARROW_DOWN[] = { 69const char *const SCROLLER_ARROW_DOWN[] =
70 {
68 ".............", 71 ".............",
69 ".............", 72 ".............",
70 "..%#######%..", 73 "..%#######%..",
71 "...#######...", 74 "...#######...",
72 "...%#####%...", 75 "...%#####%...",
76 ".....%#%.....", 79 ".....%#%.....",
77 "......#......", 80 "......#......",
78 "......%......", 81 "......%......",
79 ".............", 82 ".............",
80 "............." 83 "............."
81}; 84 };
82const char *const HI_SCROLLER_ARROW_UP[] = { 85const char *const HI_SCROLLER_ARROW_UP[] =
86 {
83 " ", 87 " ",
84 " ", 88 " ",
85 " % ", 89 " % ",
86 " % ", 90 " % ",
87 " %%% ", 91 " %%% ",
91 " %%%%%%% ", 95 " %%%%%%% ",
92 " %%%%%%% ", 96 " %%%%%%% ",
93 " %%%%%%%%% ", 97 " %%%%%%%%% ",
94 " ", 98 " ",
95 " " 99 " "
96}; 100 };
97const char *const HI_SCROLLER_ARROW_DOWN[] = { 101const char *const HI_SCROLLER_ARROW_DOWN[] =
102 {
98 " ", 103 " ",
99 " ", 104 " ",
100 " %%%%%%%%% ", 105 " %%%%%%%%% ",
101 " %%%%%%% ", 106 " %%%%%%% ",
102 " %%%%%%% ", 107 " %%%%%%% ",
106 " %%% ", 111 " %%% ",
107 " % ", 112 " % ",
108 " % ", 113 " % ",
109 " ", 114 " ",
110 " " 115 " "
111}; 116 };
112 117
113Pixmap 118Pixmap
114rxvt_term::renderPixmap (const char *const *data, int width, int height) 119rxvt_term::renderPixmap (const char *const *data, int width, int height)
115{ 120{
116 char a; 121 char a;
117 int x, y; 122 int x, y;
118 Pixmap d; 123 Pixmap d;
119 GC pointcolour; 124 GC pointcolour;
120 125
121 d = XCreatePixmap(Xdisplay, scrollBar.win, width, height, XDEPTH); 126 d = XCreatePixmap(Xdisplay, scrollBar.win, width, height, XDEPTH);
122 127
123 for (y = 0; y < height; y++) { 128 for (y = 0; y < height; y++)
129 {
124 for (x = 0; x < width; x++) { 130 for (x = 0; x < width; x++)
131 {
125 if ((a = data[y][x]) == ' ' || a == 'w') 132 if ((a = data[y][x]) == ' ' || a == 'w')
126 pointcolour = whiteGC; 133 pointcolour = whiteGC;
127 else if (a == '.' || a == 'l') 134 else if (a == '.' || a == 'l')
128 pointcolour = grayGC; 135 pointcolour = grayGC;
129 else if (a == '%' || a == 'd') 136 else if (a == '%' || a == 'd')
130 pointcolour = darkGC; 137 pointcolour = darkGC;
131 else /* if (a == '#' || a == 'b' || a) */ 138 else /* if (a == '#' || a == 'b' || a) */
132 pointcolour = blackGC; 139 pointcolour = blackGC;
133 XDrawPoint(Xdisplay, d, pointcolour, x, y); 140 XDrawPoint(Xdisplay, d, pointcolour, x, y);
134 } 141 }
135 } 142 }
136 return d; 143 return d;
137} 144}
138 145
139void 146void
140rxvt_term::init_scrollbar_stuff () 147rxvt_term::init_scrollbar_stuff ()
141{ 148{
142 XGCValues gcvalue; 149 XGCValues gcvalue;
143 XColor xcol; 150 XColor xcol;
144 Pixmap stipple; 151 Pixmap stipple;
145 unsigned long light, dark; 152 unsigned long light, dark;
146 153
147 gcvalue.graphics_exposures = False; 154 gcvalue.graphics_exposures = False;
148 155
149 gcvalue.foreground = PixColors[Color_Black]; 156 gcvalue.foreground = PixColors[Color_Black];
150 blackGC = XCreateGC(Xdisplay, scrollBar.win, 157 blackGC = XCreateGC(Xdisplay, scrollBar.win,
151 GCForeground | GCGraphicsExposures, &gcvalue); 158 GCForeground | GCGraphicsExposures, &gcvalue);
152 159
153 gcvalue.foreground = PixColors[Color_White]; 160 gcvalue.foreground = PixColors[Color_White];
154 whiteGC = XCreateGC(Xdisplay, scrollBar.win, 161 whiteGC = XCreateGC(Xdisplay, scrollBar.win,
155 GCForeground | GCGraphicsExposures, &gcvalue); 162 GCForeground | GCGraphicsExposures, &gcvalue);
156 163
157 xcol.red = 0xaeba; 164 xcol.red = 0xaeba;
158 xcol.green = 0xaaaa; 165 xcol.green = 0xaaaa;
159 xcol.blue = 0xaeba; 166 xcol.blue = 0xaeba;
160 //if (!rXAllocColor (&xcol, "light gray"))//TODO//D// 167 //if (!rXAllocColor (&xcol, "light gray"))//TODO//D//
161 xcol.pixel = PixColors[Color_AntiqueWhite]; 168 xcol.pixel = PixColors[Color_AntiqueWhite];
162 light = gcvalue.foreground = xcol.pixel; 169 light = gcvalue.foreground = xcol.pixel;
163 grayGC = XCreateGC(Xdisplay, scrollBar.win, 170 grayGC = XCreateGC(Xdisplay, scrollBar.win,
164 GCForeground | GCGraphicsExposures, &gcvalue); 171 GCForeground | GCGraphicsExposures, &gcvalue);
165 172
166 xcol.red = 0x51aa; 173 xcol.red = 0x51aa;
167 xcol.green = 0x5555; 174 xcol.green = 0x5555;
168 xcol.blue = 0x5144; 175 xcol.blue = 0x5144;
169 //if (!rXAllocColor (&xcol, "dark gray"))//TODO//D// 176 //if (!rXAllocColor (&xcol, "dark gray"))//TODO//D//
170 xcol.pixel = PixColors[Color_Grey25]; 177 xcol.pixel = PixColors[Color_Grey25];
171 dark = gcvalue.foreground = xcol.pixel; 178 dark = gcvalue.foreground = xcol.pixel;
172 darkGC = XCreateGC(Xdisplay, scrollBar.win, 179 darkGC = XCreateGC(Xdisplay, scrollBar.win,
173 GCForeground | GCGraphicsExposures, &gcvalue); 180 GCForeground | GCGraphicsExposures, &gcvalue);
174 181
175 stipple = XCreateBitmapFromData(Xdisplay, scrollBar.win, 182 stipple = XCreateBitmapFromData(Xdisplay, scrollBar.win,
176 (char *)n_stp_bits, n_stp_width, 183 (char *)n_stp_bits, n_stp_width,
177 n_stp_height); 184 n_stp_height);
178 185
179 gcvalue.foreground = dark; 186 gcvalue.foreground = dark;
180 gcvalue.background = light; 187 gcvalue.background = light;
181 gcvalue.fill_style = FillOpaqueStippled; 188 gcvalue.fill_style = FillOpaqueStippled;
182 gcvalue.stipple = stipple; 189 gcvalue.stipple = stipple;
183 190
184/* XSetWindowBackground(Xdisplay, scrollBar.win, PixColors[Color_Red]); */ 191 /* XSetWindowBackground(Xdisplay, scrollBar.win, PixColors[Color_Red]); */
185 192
186 stippleGC = XCreateGC(Xdisplay, scrollBar.win, 193 stippleGC = XCreateGC(Xdisplay, scrollBar.win,
187 GCForeground | GCBackground | GCStipple 194 GCForeground | GCBackground | GCStipple
188 | GCFillStyle | GCGraphicsExposures, &gcvalue); 195 | GCFillStyle | GCGraphicsExposures, &gcvalue);
189 196
190 dimple = renderPixmap (SCROLLER_DIMPLE, SCROLLER_DIMPLE_WIDTH, 197 dimple = renderPixmap (SCROLLER_DIMPLE, SCROLLER_DIMPLE_WIDTH,
191 SCROLLER_DIMPLE_HEIGHT); 198 SCROLLER_DIMPLE_HEIGHT);
192 199
193 upArrow = renderPixmap (SCROLLER_ARROW_UP, ARROW_WIDTH, 200 upArrow = renderPixmap (SCROLLER_ARROW_UP, ARROW_WIDTH,
194 ARROW_HEIGHT); 201 ARROW_HEIGHT);
195 downArrow = renderPixmap (SCROLLER_ARROW_DOWN, ARROW_WIDTH, 202 downArrow = renderPixmap (SCROLLER_ARROW_DOWN, ARROW_WIDTH,
196 ARROW_HEIGHT); 203 ARROW_HEIGHT);
197 upArrowHi = renderPixmap (HI_SCROLLER_ARROW_UP, ARROW_WIDTH, 204 upArrowHi = renderPixmap (HI_SCROLLER_ARROW_UP, ARROW_WIDTH,
198 ARROW_HEIGHT); 205 ARROW_HEIGHT);
199 downArrowHi = renderPixmap (HI_SCROLLER_ARROW_DOWN, 206 downArrowHi = renderPixmap (HI_SCROLLER_ARROW_DOWN,
200 ARROW_WIDTH, ARROW_HEIGHT); 207 ARROW_WIDTH, ARROW_HEIGHT);
201} 208}
202 209
203/* Draw bevel & arrows */ 210/* Draw bevel & arrows */
204void 211void
205rxvt_term::drawBevel (Drawable d, int x1, int y1, int w, int h) 212rxvt_term::drawBevel (Drawable d, int x1, int y1, int w, int h)
206{ 213{
207 int x2, y2; 214 int x2, y2;
208 215
209 x2 = x1 + w - 1; /* right point */ 216 x2 = x1 + w - 1; /* right point */
210 y2 = y1 + h - 1; /* bottom point */ 217 y2 = y1 + h - 1; /* bottom point */
211/* white top and left */ 218 /* white top and left */
212 XDrawLine(Xdisplay, d, whiteGC, x1, y1, x2, y1); 219 XDrawLine(Xdisplay, d, whiteGC, x1, y1, x2, y1);
213 XDrawLine(Xdisplay, d, whiteGC, x1, y1, x1, y2); 220 XDrawLine(Xdisplay, d, whiteGC, x1, y1, x1, y2);
214/* black bottom and right */ 221 /* black bottom and right */
215 XDrawLine(Xdisplay, d, blackGC, x1, y2, x2, y2); 222 XDrawLine(Xdisplay, d, blackGC, x1, y2, x2, y2);
216 XDrawLine(Xdisplay, d, blackGC, x2, y1, x2, y2); 223 XDrawLine(Xdisplay, d, blackGC, x2, y1, x2, y2);
217/* dark inside bottom and right */ 224 /* dark inside bottom and right */
218 x1++, y1++, x2--, y2--; /* move in one point */ 225 x1++, y1++, x2--, y2--; /* move in one point */
219 XDrawLine(Xdisplay, d, darkGC, x1, y2, x2, y2); 226 XDrawLine(Xdisplay, d, darkGC, x1, y2, x2, y2);
220 XDrawLine(Xdisplay, d, darkGC, x2, y1, x2, y2); 227 XDrawLine(Xdisplay, d, darkGC, x2, y1, x2, y2);
221} 228}
222 229
223int 230int
224rxvt_term::scrollbar_show_next (int update, int last_top, int last_bot, int scrollbar_len) 231rxvt_term::scrollbar_show_next (int update, int last_top, int last_bot, int scrollbar_len)
225{ 232{
226 int height = scrollBar.end + SB_BUTTON_TOTAL_HEIGHT + SB_PADDING; 233 int height = scrollBar.end + SB_BUTTON_TOTAL_HEIGHT + SB_PADDING;
227 Drawable s; 234 Drawable s;
228 235
229 if ((scrollBar.init & R_SB_NEXT) == 0) { 236 if ((scrollBar.init & R_SB_NEXT) == 0)
237 {
230 scrollBar.init |= R_SB_NEXT; 238 scrollBar.init |= R_SB_NEXT;
231 init_scrollbar_stuff (); 239 init_scrollbar_stuff ();
232 } 240 }
233 241
234 if (TermWin.nscrolled == 0 || !update) { 242 if (TermWin.nscrolled == 0 || !update)
243 {
235 XFillRectangle(Xdisplay, scrollBar.win, grayGC, 0, 0, 244 XFillRectangle(Xdisplay, scrollBar.win, grayGC, 0, 0,
236 SB_WIDTH_NEXT + 1, height); 245 SB_WIDTH_NEXT + 1, height);
237 XDrawRectangle(Xdisplay, scrollBar.win, blackGC, 0, 246 XDrawRectangle(Xdisplay, scrollBar.win, blackGC, 0,
238 -SB_BORDER_WIDTH, SB_WIDTH_NEXT, 247 -SB_BORDER_WIDTH, SB_WIDTH_NEXT,
239 height + SB_BORDER_WIDTH); 248 height + SB_BORDER_WIDTH);
240 XFillRectangle(Xdisplay, scrollBar.win, stippleGC,
241 SB_LEFT_PADDING, 0, SB_BUTTON_WIDTH, height);
242 }
243 if (TermWin.nscrolled) {
244 if (last_top < scrollBar.top || !update)
245 XFillRectangle(Xdisplay, scrollBar.win, stippleGC, 249 XFillRectangle(Xdisplay, scrollBar.win, stippleGC,
246 SB_LEFT_PADDING, SB_PADDING + last_top, 250 SB_LEFT_PADDING, 0, SB_BUTTON_WIDTH, height);
247 SB_BUTTON_WIDTH, scrollBar.top - last_top); 251 }
248 if (scrollBar.bot < last_bot || !update) 252 if (TermWin.nscrolled)
253 {
254 if (last_top < scrollBar.top || !update)
249 XFillRectangle(Xdisplay, scrollBar.win, stippleGC, 255 XFillRectangle(Xdisplay, scrollBar.win, stippleGC,
256 SB_LEFT_PADDING, SB_PADDING + last_top,
257 SB_BUTTON_WIDTH, scrollBar.top - last_top);
258 if (scrollBar.bot < last_bot || !update)
259 XFillRectangle(Xdisplay, scrollBar.win, stippleGC,
250 SB_LEFT_PADDING, scrollBar.bot + SB_PADDING, 260 SB_LEFT_PADDING, scrollBar.bot + SB_PADDING,
251 SB_BUTTON_WIDTH, (last_bot - scrollBar.bot)); 261 SB_BUTTON_WIDTH, (last_bot - scrollBar.bot));
252 XFillRectangle(Xdisplay, scrollBar.win, grayGC, 262 XFillRectangle(Xdisplay, scrollBar.win, grayGC,
253 SB_LEFT_PADDING, scrollBar.top + SB_PADDING, 263 SB_LEFT_PADDING, scrollBar.top + SB_PADDING,
254 SB_BUTTON_WIDTH, scrollbar_len); 264 SB_BUTTON_WIDTH, scrollbar_len);
255 XCopyArea(Xdisplay, dimple, scrollBar.win, whiteGC, 0, 0, 265 XCopyArea(Xdisplay, dimple, scrollBar.win, whiteGC, 0, 0,
256 SCROLLER_DIMPLE_WIDTH, SCROLLER_DIMPLE_HEIGHT, 266 SCROLLER_DIMPLE_WIDTH, SCROLLER_DIMPLE_HEIGHT,
257 (SB_WIDTH_NEXT - SCROLLER_DIMPLE_WIDTH) / 2, 267 (SB_WIDTH_NEXT - SCROLLER_DIMPLE_WIDTH) / 2,
258 scrollBar.top + SB_BEVEL_WIDTH_UPPER_LEFT + 268 scrollBar.top + SB_BEVEL_WIDTH_UPPER_LEFT +
259 (scrollbar_len - SCROLLER_DIMPLE_HEIGHT) / 2); 269 (scrollbar_len - SCROLLER_DIMPLE_HEIGHT) / 2);
260 270
261 drawBevel (scrollBar.win, SB_BUTTON_BEVEL_X, 271 drawBevel (scrollBar.win, SB_BUTTON_BEVEL_X,
262 scrollBar.top + SB_PADDING, SB_BUTTON_WIDTH, 272 scrollBar.top + SB_PADDING, SB_BUTTON_WIDTH,
263 scrollbar_len); 273 scrollbar_len);
264 drawBevel (scrollBar.win, SB_BUTTON_BEVEL_X, 274 drawBevel (scrollBar.win, SB_BUTTON_BEVEL_X,
265 height - SB_BUTTON_BOTH_HEIGHT, SB_BUTTON_WIDTH, 275 height - SB_BUTTON_BOTH_HEIGHT, SB_BUTTON_WIDTH,
266 SB_BUTTON_HEIGHT); 276 SB_BUTTON_HEIGHT);
267 drawBevel (scrollBar.win, SB_BUTTON_BEVEL_X, 277 drawBevel (scrollBar.win, SB_BUTTON_BEVEL_X,
268 height - SB_BUTTON_SINGLE_HEIGHT, SB_BUTTON_WIDTH, 278 height - SB_BUTTON_SINGLE_HEIGHT, SB_BUTTON_WIDTH,
269 SB_BUTTON_HEIGHT); 279 SB_BUTTON_HEIGHT);
270 280
271 s = (scrollbar_isUp()) ? upArrowHi : upArrow; 281 s = (scrollbar_isUp()) ? upArrowHi : upArrow;
272 XCopyArea(Xdisplay, s, scrollBar.win, whiteGC, 0, 0, 282 XCopyArea(Xdisplay, s, scrollBar.win, whiteGC, 0, 0,
273 ARROW_WIDTH, ARROW_HEIGHT, SB_BUTTON_FACE_X, 283 ARROW_WIDTH, ARROW_HEIGHT, SB_BUTTON_FACE_X,
274 height - SB_BUTTON_BOTH_HEIGHT + SB_BEVEL_WIDTH_UPPER_LEFT); 284 height - SB_BUTTON_BOTH_HEIGHT + SB_BEVEL_WIDTH_UPPER_LEFT);
275 285
276 s = (scrollbar_isDn()) ? downArrowHi : downArrow; 286 s = (scrollbar_isDn()) ? downArrowHi : downArrow;
277 XCopyArea(Xdisplay, s, scrollBar.win, whiteGC, 0, 0, 287 XCopyArea(Xdisplay, s, scrollBar.win, whiteGC, 0, 0,
278 ARROW_WIDTH, ARROW_HEIGHT, SB_BUTTON_FACE_X, 288 ARROW_WIDTH, ARROW_HEIGHT, SB_BUTTON_FACE_X,
279 height - SB_BUTTON_SINGLE_HEIGHT + SB_BEVEL_WIDTH_UPPER_LEFT); 289 height - SB_BUTTON_SINGLE_HEIGHT + SB_BEVEL_WIDTH_UPPER_LEFT);
280 } 290 }
281 return 1; 291 return 1;
282} 292}
283#endif /* NEXT_SCROLLBAR */ 293#endif /* NEXT_SCROLLBAR */
284/*----------------------- end-of-file (C source) -----------------------*/ 294/*----------------------- end-of-file (C source) -----------------------*/

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines