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.28 by ayin, Wed Feb 6 01:29:42 2008 UTC vs.
Revision 1.29 by ayin, Tue Feb 19 13:01:33 2008 UTC

113 " % ", 113 " % ",
114 " ", 114 " ",
115 " " 115 " "
116 }; 116 };
117 117
118Pixmap 118static Pixmap
119rxvt_term::renderPixmap (const char *const *data, int width, int height) 119renderPixmap (scrollBar_t *sb, const char *const *data, int width, int height)
120{ 120{
121 char a; 121 char a;
122 int x, y; 122 int x, y;
123 Pixmap d; 123 Pixmap d;
124 GC pointcolour; 124 GC pointcolour;
125 125
126 d = XCreatePixmap (dpy, scrollBar.win, width, height, depth); 126 d = XCreatePixmap (sb->term->dpy, sb->win, width, height, sb->term->depth);
127 127
128 for (y = 0; y < height; y++) 128 for (y = 0; y < height; y++)
129 { 129 {
130 for (x = 0; x < width; x++) 130 for (x = 0; x < width; x++)
131 { 131 {
132 if ((a = data[y][x]) == ' ' || a == 'w') 132 if ((a = data[y][x]) == ' ' || a == 'w')
133 pointcolour = whiteGC; 133 pointcolour = sb->whiteGC;
134 else if (a == '.' || a == 'l') 134 else if (a == '.' || a == 'l')
135 pointcolour = grayGC; 135 pointcolour = sb->grayGC;
136 else if (a == '%' || a == 'd') 136 else if (a == '%' || a == 'd')
137 pointcolour = darkGC; 137 pointcolour = sb->darkGC;
138 else /* if (a == '#' || a == 'b' || a) */ 138 else /* if (a == '#' || a == 'b' || a) */
139 pointcolour = blackGC; 139 pointcolour = sb->blackGC;
140 140
141 XDrawPoint (dpy, d, pointcolour, x, y); 141 XDrawPoint (sb->term->dpy, d, pointcolour, x, y);
142 } 142 }
143 } 143 }
144 return d; 144 return d;
145} 145}
146 146
147void 147void
148rxvt_term::init_scrollbar_stuff () 148scrollBar_t::init_next ()
149{ 149{
150 XGCValues gcvalue; 150 XGCValues gcvalue;
151 XColor xcol; 151 XColor xcol;
152 Pixmap stipple; 152 Pixmap stipple;
153 unsigned long light, dark; 153 unsigned long light, dark;
154 154
155 gcvalue.graphics_exposures = False; 155 gcvalue.graphics_exposures = False;
156 156
157 gcvalue.foreground = pix_colors_focused[Color_Black]; 157 gcvalue.foreground = term->pix_colors_focused[Color_Black];
158 blackGC = XCreateGC (dpy, scrollBar.win, 158 blackGC = XCreateGC (term->dpy, win,
159 GCForeground | GCGraphicsExposures, &gcvalue); 159 GCForeground | GCGraphicsExposures, &gcvalue);
160 160
161 gcvalue.foreground = pix_colors_focused[Color_White]; 161 gcvalue.foreground = term->pix_colors_focused[Color_White];
162 whiteGC = XCreateGC (dpy, scrollBar.win, 162 whiteGC = XCreateGC (term->dpy, win,
163 GCForeground | GCGraphicsExposures, &gcvalue); 163 GCForeground | GCGraphicsExposures, &gcvalue);
164 164
165 xcol.red = 0xaeba; 165 xcol.red = 0xaeba;
166 xcol.green = 0xaaaa; 166 xcol.green = 0xaaaa;
167 xcol.blue = 0xaeba; 167 xcol.blue = 0xaeba;
168 xcol.pixel = pix_colors_focused[Color_scroll]; 168 xcol.pixel = term->pix_colors_focused[Color_scroll];
169 light = gcvalue.foreground = xcol.pixel; 169 light = gcvalue.foreground = xcol.pixel;
170 grayGC = XCreateGC (dpy, scrollBar.win, 170 grayGC = XCreateGC (term->dpy, win,
171 GCForeground | GCGraphicsExposures, &gcvalue); 171 GCForeground | GCGraphicsExposures, &gcvalue);
172 172
173 xcol.red = 0x51aa; 173 xcol.red = 0x51aa;
174 xcol.green = 0x5555; 174 xcol.green = 0x5555;
175 xcol.blue = 0x5144; 175 xcol.blue = 0x5144;
176 //if (!rXAllocColor (&xcol, "dark gray"))//TODO//D// 176 //if (!rXAllocColor (&xcol, "dark gray"))//TODO//D//
177 xcol.pixel = pix_colors_focused[Color_Grey25]; 177 xcol.pixel = term->pix_colors_focused[Color_Grey25];
178 dark = gcvalue.foreground = xcol.pixel; 178 dark = gcvalue.foreground = xcol.pixel;
179 darkGC = XCreateGC (dpy, scrollBar.win, 179 darkGC = XCreateGC (term->dpy, win,
180 GCForeground | GCGraphicsExposures, &gcvalue); 180 GCForeground | GCGraphicsExposures, &gcvalue);
181 181
182 stipple = XCreateBitmapFromData (dpy, scrollBar.win, 182 stipple = XCreateBitmapFromData (term->dpy, win,
183 (char *)n_stp_bits, n_stp_width, 183 (char *)n_stp_bits, n_stp_width,
184 n_stp_height); 184 n_stp_height);
185 185
186 gcvalue.foreground = dark; 186 gcvalue.foreground = dark;
187 gcvalue.background = light; 187 gcvalue.background = light;
188 gcvalue.fill_style = FillOpaqueStippled; 188 gcvalue.fill_style = FillOpaqueStippled;
189 gcvalue.stipple = stipple; 189 gcvalue.stipple = stipple;
190 190
191 /* XSetWindowBackground (dpy, scrollBar.win, pix_colors_focused[Color_Red]); */ 191 /* XSetWindowBackground (dpy, scrollBar.win, pix_colors_focused[Color_Red]); */
192 192
193 stippleGC = XCreateGC (dpy, scrollBar.win, 193 stippleGC = XCreateGC (term->dpy, win,
194 GCForeground | GCBackground | GCStipple 194 GCForeground | GCBackground | GCStipple
195 | GCFillStyle | GCGraphicsExposures, &gcvalue); 195 | GCFillStyle | GCGraphicsExposures, &gcvalue);
196 196
197 dimple = renderPixmap (SCROLLER_DIMPLE, SCROLLER_DIMPLE_WIDTH, 197 dimple = renderPixmap (this, SCROLLER_DIMPLE, SCROLLER_DIMPLE_WIDTH,
198 SCROLLER_DIMPLE_HEIGHT); 198 SCROLLER_DIMPLE_HEIGHT);
199 199
200 upArrow = renderPixmap (SCROLLER_ARROW_UP, ARROW_WIDTH, 200 upArrow = renderPixmap (this, SCROLLER_ARROW_UP, ARROW_WIDTH,
201 ARROW_HEIGHT); 201 ARROW_HEIGHT);
202 downArrow = renderPixmap (SCROLLER_ARROW_DOWN, ARROW_WIDTH, 202 downArrow = renderPixmap (this, SCROLLER_ARROW_DOWN, ARROW_WIDTH,
203 ARROW_HEIGHT); 203 ARROW_HEIGHT);
204 upArrowHi = renderPixmap (HI_SCROLLER_ARROW_UP, ARROW_WIDTH, 204 upArrowHi = renderPixmap (this, HI_SCROLLER_ARROW_UP, ARROW_WIDTH,
205 ARROW_HEIGHT); 205 ARROW_HEIGHT);
206 downArrowHi = renderPixmap (HI_SCROLLER_ARROW_DOWN, 206 downArrowHi = renderPixmap (this, HI_SCROLLER_ARROW_DOWN,
207 ARROW_WIDTH, ARROW_HEIGHT); 207 ARROW_WIDTH, ARROW_HEIGHT);
208} 208}
209 209
210/* Draw bevel & arrows */ 210/* Draw bevel & arrows */
211void 211static void
212rxvt_term::drawBevel (Drawable d, int x1, int y1, int w, int h) 212drawBevel (scrollBar_t *sb, int x1, int y1, int w, int h)
213{ 213{
214 int x2, y2; 214 int x2, y2;
215 Drawable d = sb->win;
216 Display *dpy = sb->term->dpy;
215 217
216 x2 = x1 + w - 1; /* right point */ 218 x2 = x1 + w - 1; /* right point */
217 y2 = y1 + h - 1; /* bottom point */ 219 y2 = y1 + h - 1; /* bottom point */
218 /* white top and left */ 220 /* white top and left */
219 XDrawLine (dpy, d, whiteGC, x1, y1, x2, y1); 221 XDrawLine (dpy, d, sb->whiteGC, x1, y1, x2, y1);
220 XDrawLine (dpy, d, whiteGC, x1, y1, x1, y2); 222 XDrawLine (dpy, d, sb->whiteGC, x1, y1, x1, y2);
221 /* black bottom and right */ 223 /* black bottom and right */
222 XDrawLine (dpy, d, blackGC, x1, y2, x2, y2); 224 XDrawLine (dpy, d, sb->blackGC, x1, y2, x2, y2);
223 XDrawLine (dpy, d, blackGC, x2, y1, x2, y2); 225 XDrawLine (dpy, d, sb->blackGC, x2, y1, x2, y2);
224 /* dark inside bottom and right */ 226 /* dark inside bottom and right */
225 x1++, y1++, x2--, y2--; /* move in one point */ 227 x1++, y1++, x2--, y2--; /* move in one point */
226 XDrawLine (dpy, d, darkGC, x1, y2, x2, y2); 228 XDrawLine (dpy, d, sb->darkGC, x1, y2, x2, y2);
227 XDrawLine (dpy, d, darkGC, x2, y1, x2, y2); 229 XDrawLine (dpy, d, sb->darkGC, x2, y1, x2, y2);
228} 230}
229 231
230int 232int
231rxvt_term::scrollbar_show_next (int update, int last_top, int last_bot, int scrollbar_len) 233scrollBar_t::show_next (int update)
232{ 234{
233 int height = scrollBar.end + SB_BUTTON_TOTAL_HEIGHT + SB_PADDING; 235 int height = end + SB_BUTTON_TOTAL_HEIGHT + SB_PADDING;
234 Drawable src; 236 Drawable src;
235 237
236 if ((scrollBar.init & R_SB_NEXT) == 0) 238 if ((init & R_SB_NEXT) == 0)
237 { 239 {
238 scrollBar.init |= R_SB_NEXT; 240 init |= R_SB_NEXT;
239 init_scrollbar_stuff (); 241 init_next ();
240 } 242 }
241 243
242 if (top_row == 0 || !update) 244 if (term->top_row == 0 || !update)
243 { 245 {
244 XFillRectangle (dpy, scrollBar.win, grayGC, 0, 0, 246 XFillRectangle (term->dpy, win, grayGC, 0, 0,
245 SB_WIDTH_NEXT + 1, height); 247 SB_WIDTH_NEXT + 1, height);
246 XDrawRectangle (dpy, scrollBar.win, blackGC, 0, 248 XDrawRectangle (term->dpy, win, blackGC, 0,
247 -SB_BORDER_WIDTH, SB_WIDTH_NEXT, 249 -SB_BORDER_WIDTH, SB_WIDTH_NEXT,
248 height + SB_BORDER_WIDTH); 250 height + SB_BORDER_WIDTH);
249 XFillRectangle (dpy, scrollBar.win, stippleGC, 251 XFillRectangle (term->dpy, win, stippleGC,
250 SB_LEFT_PADDING, 0, SB_BUTTON_WIDTH, height); 252 SB_LEFT_PADDING, 0, SB_BUTTON_WIDTH, height);
251 } 253 }
252 254
253 if (top_row) 255 if (term->top_row)
254 { 256 {
255 if (last_top < scrollBar.top || !update) 257 if (last_top < top || !update)
256 XFillRectangle (dpy, scrollBar.win, stippleGC, 258 XFillRectangle (term->dpy, win, stippleGC,
257 SB_LEFT_PADDING, SB_PADDING + last_top, 259 SB_LEFT_PADDING, SB_PADDING + last_top,
258 SB_BUTTON_WIDTH, scrollBar.top - last_top); 260 SB_BUTTON_WIDTH, top - last_top);
259 261
260 if (scrollBar.bot < last_bot || !update) 262 if (bot < last_bot || !update)
261 XFillRectangle (dpy, scrollBar.win, stippleGC, 263 XFillRectangle (term->dpy, win, stippleGC,
262 SB_LEFT_PADDING, scrollBar.bot + SB_PADDING, 264 SB_LEFT_PADDING, bot + SB_PADDING,
263 SB_BUTTON_WIDTH, (last_bot - scrollBar.bot)); 265 SB_BUTTON_WIDTH, (last_bot - bot));
264 266
265 XFillRectangle (dpy, scrollBar.win, grayGC, 267 XFillRectangle (term->dpy, win, grayGC,
266 SB_LEFT_PADDING, scrollBar.top + SB_PADDING, 268 SB_LEFT_PADDING, top + SB_PADDING,
267 SB_BUTTON_WIDTH, scrollbar_len); 269 SB_BUTTON_WIDTH, len);
268 270
269 XCopyArea (dpy, dimple, scrollBar.win, whiteGC, 0, 0, 271 XCopyArea (term->dpy, dimple, win, whiteGC, 0, 0,
270 SCROLLER_DIMPLE_WIDTH, SCROLLER_DIMPLE_HEIGHT, 272 SCROLLER_DIMPLE_WIDTH, SCROLLER_DIMPLE_HEIGHT,
271 (SB_WIDTH_NEXT - SCROLLER_DIMPLE_WIDTH) / 2, 273 (SB_WIDTH_NEXT - SCROLLER_DIMPLE_WIDTH) / 2,
272 scrollBar.top + SB_BEVEL_WIDTH_UPPER_LEFT + 274 top + SB_BEVEL_WIDTH_UPPER_LEFT +
273 (scrollbar_len - SCROLLER_DIMPLE_HEIGHT) / 2); 275 (len - SCROLLER_DIMPLE_HEIGHT) / 2);
274 276
275 drawBevel (scrollBar.win, SB_BUTTON_BEVEL_X, 277 drawBevel (this, SB_BUTTON_BEVEL_X,
276 scrollBar.top + SB_PADDING, SB_BUTTON_WIDTH, 278 top + SB_PADDING, SB_BUTTON_WIDTH,
277 scrollbar_len); 279 len);
278 drawBevel (scrollBar.win, SB_BUTTON_BEVEL_X, 280 drawBevel (this, SB_BUTTON_BEVEL_X,
279 height - SB_BUTTON_BOTH_HEIGHT, SB_BUTTON_WIDTH, 281 height - SB_BUTTON_BOTH_HEIGHT, SB_BUTTON_WIDTH,
280 SB_BUTTON_HEIGHT); 282 SB_BUTTON_HEIGHT);
281 drawBevel (scrollBar.win, SB_BUTTON_BEVEL_X, 283 drawBevel (this, SB_BUTTON_BEVEL_X,
282 height - SB_BUTTON_SINGLE_HEIGHT, SB_BUTTON_WIDTH, 284 height - SB_BUTTON_SINGLE_HEIGHT, SB_BUTTON_WIDTH,
283 SB_BUTTON_HEIGHT); 285 SB_BUTTON_HEIGHT);
284 286
285 src = scrollBar.state == STATE_UP ? upArrowHi : upArrow; 287 src = state == STATE_UP ? upArrowHi : upArrow;
286 XCopyArea (dpy, src, scrollBar.win, whiteGC, 0, 0, 288 XCopyArea (term->dpy, src, win, whiteGC, 0, 0,
287 ARROW_WIDTH, ARROW_HEIGHT, SB_BUTTON_FACE_X, 289 ARROW_WIDTH, ARROW_HEIGHT, SB_BUTTON_FACE_X,
288 height - SB_BUTTON_BOTH_HEIGHT + SB_BEVEL_WIDTH_UPPER_LEFT); 290 height - SB_BUTTON_BOTH_HEIGHT + SB_BEVEL_WIDTH_UPPER_LEFT);
289 291
290 src = scrollBar.state == STATE_DOWN ? downArrowHi : downArrow; 292 src = state == STATE_DOWN ? downArrowHi : downArrow;
291 XCopyArea (dpy, src, scrollBar.win, whiteGC, 0, 0, 293 XCopyArea (term->dpy, src, win, whiteGC, 0, 0,
292 ARROW_WIDTH, ARROW_HEIGHT, SB_BUTTON_FACE_X, 294 ARROW_WIDTH, ARROW_HEIGHT, SB_BUTTON_FACE_X,
293 height - SB_BUTTON_SINGLE_HEIGHT + SB_BEVEL_WIDTH_UPPER_LEFT); 295 height - SB_BUTTON_SINGLE_HEIGHT + SB_BEVEL_WIDTH_UPPER_LEFT);
294 } 296 }
295 297
296 return 1; 298 return 1;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines