ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/scrollbar-rxvt.C
Revision: 1.10
Committed: Mon Jun 21 22:24:07 2004 UTC (20 years ago) by root
Content type: text/plain
Branch: MAIN
CVS Tags: rel-3_6, rel-3_5, rel-3_4, rel-3_3, rel-3_2
Changes since 1.9: +25 -28 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 pcg 1.1 /*--------------------------------*-C-*---------------------------------*
2 pcg 1.9 * File: scrollbar-rxvt.C
3 pcg 1.1 *----------------------------------------------------------------------*
4     *
5     * Copyright (c) 1997,1998 mj olesen <olesen@me.QueensU.CA>
6     * Copyright (c) 1999-2001 Geoff Wing <gcw@pobox.com>
7 pcg 1.9 * Copyright (c) 2004 Marc Lehmann <pcg@goof.com>
8 pcg 1.1 *
9     * This program is free software; you can redistribute it and/or modify
10     * it under the terms of the GNU General Public License as published by
11     * the Free Software Foundation; either version 2 of the License, or
12     * (at your option) any later version.
13     *
14     * This program is distributed in the hope that it will be useful,
15     * but WITHOUT ANY WARRANTY; without even the implied warranty of
16     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17     * GNU General Public License for more details.
18     *
19     * You should have received a copy of the GNU General Public License
20     * along with this program; if not, write to the Free Software
21     * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22     *----------------------------------------------------------------------*/
23    
24     #include "../config.h" /* NECESSARY */
25     #include "rxvt.h" /* NECESSARY */
26     #include "scrollbar-rxvt.intpro" /* PROTOS for internal routines */
27    
28     /*----------------------------------------------------------------------*/
29     #if defined(RXVT_SCROLLBAR)
30    
31     /* draw triangular button with a shadow of SHADOW (1 or 2) pixels */
32     void
33 pcg 1.4 rxvt_term::Draw_button (int x, int y, int state, int dirn)
34 pcg 1.1 {
35 pcg 1.6 unsigned int sz, sz2;
36     XPoint pt[3];
37     GC top, bot;
38    
39     sz = scrollBar.width;
40     sz2 = sz / 2;
41     switch (state)
42     {
43     case +1:
44     top = topShadowGC;
45     bot = botShadowGC;
46     break;
47     case -1:
48     top = botShadowGC;
49     bot = topShadowGC;
50     break;
51     default:
52     top = bot = scrollbarGC;
53     break;
54     }
55    
56     /* fill triangle */
57     pt[0].x = x;
58     pt[1].x = x + sz - 1;
59     pt[2].x = x + sz2;
60     if (dirn == UP)
61     {
62     pt[0].y = pt[1].y = y + sz - 1;
63     pt[2].y = y;
64     }
65     else
66     {
67     pt[0].y = pt[1].y = y;
68     pt[2].y = y + sz - 1;
69     }
70 root 1.10
71 pcg 1.8 XFillPolygon (display->display, scrollBar.win, scrollbarGC,
72 root 1.10 pt, 3, Convex, CoordModeOrigin);
73 pcg 1.6
74     /* draw base */
75 pcg 1.8 XDrawLine (display->display, scrollBar.win, (dirn == UP ? bot : top),
76 root 1.10 pt[0].x, pt[0].y, pt[1].x, pt[1].y);
77 pcg 1.6
78     /* draw shadow on left */
79     pt[1].x = x + sz2 - 1;
80     pt[1].y = y + (dirn == UP ? 0 : sz - 1);
81 pcg 1.8 XDrawLine (display->display, scrollBar.win, top,
82 root 1.10 pt[0].x, pt[0].y, pt[1].x, pt[1].y);
83 pcg 1.1
84     #if (SHADOW > 1)
85 pcg 1.6 /* doubled */
86     pt[0].x++;
87     if (dirn == UP)
88     {
89     pt[0].y--;
90     pt[1].y++;
91 pcg 1.1 }
92 pcg 1.6 else
93     {
94     pt[0].y++;
95     pt[1].y--;
96     }
97 pcg 1.8 XDrawLine (display->display, scrollBar.win, top,
98 root 1.10 pt[0].x, pt[0].y, pt[1].x, pt[1].y);
99 pcg 1.1 #endif
100 pcg 1.6 /* draw shadow on right */
101     pt[1].x = x + sz - 1;
102     /* pt[2].x = x + sz2; */
103     pt[1].y = y + (dirn == UP ? sz - 1 : 0);
104     pt[2].y = y + (dirn == UP ? 0 : sz - 1);
105 pcg 1.8 XDrawLine (display->display, scrollBar.win, bot,
106 root 1.10 pt[2].x, pt[2].y, pt[1].x, pt[1].y);
107 pcg 1.1 #if (SHADOW > 1)
108 pcg 1.6 /* doubled */
109     pt[1].x--;
110     if (dirn == UP)
111     {
112     pt[2].y++;
113     pt[1].y--;
114 pcg 1.1 }
115 pcg 1.6 else
116     {
117     pt[2].y--;
118     pt[1].y++;
119     }
120 root 1.10
121 pcg 1.8 XDrawLine (display->display, scrollBar.win, bot,
122 root 1.10 pt[2].x, pt[2].y, pt[1].x, pt[1].y);
123 pcg 1.1 #endif
124     }
125    
126     int
127 pcg 1.8 rxvt_term::scrollbar_show_rxvt (int update __attribute__ ((unused)), int last_top, int last_bot, int scrollbar_len)
128 pcg 1.1 {
129 pcg 1.6 int sbshadow = sb_shadow;
130     int sbwidth = (int)scrollBar.width;
131 pcg 1.1
132 pcg 1.6 if ((scrollBar.init & R_SB_RXVT) == 0)
133     {
134     scrollBar.init |= R_SB_RXVT;
135     if (sbshadow)
136     {
137 root 1.10 XSetWindowBackground (display->display, scrollBar.win, PixColors[Color_trough]);
138 pcg 1.8 XClearWindow (display->display, scrollBar.win);
139 pcg 1.6 }
140     }
141     else
142     {
143 pcg 1.7 /* instead of XClearWindow (display->display, scrollBar.win); */
144 pcg 1.6 if (last_top < scrollBar.top)
145 pcg 1.8 XClearArea (display->display, scrollBar.win,
146 root 1.10 sbshadow, last_top,
147     sbwidth, (scrollBar.top - last_top),
148     False);
149 pcg 1.6
150     if (scrollBar.bot < last_bot)
151 pcg 1.8 XClearArea (display->display, scrollBar.win,
152 root 1.10 sbshadow, scrollBar.bot,
153     sbwidth, (last_bot - scrollBar.bot),
154     False);
155 pcg 1.1 }
156    
157 pcg 1.6 /* scrollbar slider */
158 pcg 1.1 #ifdef SB_BORDER
159 pcg 1.6 {
160 root 1.10 int xofs;
161 pcg 1.1
162 pcg 1.6 if (Options & Opt_scrollBar_right)
163     xofs = 0;
164     else
165     xofs = sbshadow ? sbwidth : sbwidth - 1;
166    
167 pcg 1.8 XDrawLine (display->display, scrollBar.win, botShadowGC,
168 root 1.10 xofs, 0, xofs, scrollBar.end + sbwidth);
169 pcg 1.6 }
170     #endif
171 root 1.10
172 pcg 1.8 XFillRectangle (display->display, scrollBar.win, scrollbarGC,
173 root 1.10 sbshadow, scrollBar.top, sbwidth,
174     scrollbar_len);
175 pcg 1.1
176 pcg 1.6 if (sbshadow)
177     /* trough shadow */
178 pcg 1.8 rxvt_Draw_Shadow (display->display, scrollBar.win,
179 pcg 1.6 botShadowGC, topShadowGC,
180     0, 0,
181 pcg 1.8 sbwidth + 2 * sbshadow, /* scrollbar_TotalWidth () */
182 pcg 1.6 scrollBar.end + (sbwidth + 1) + sbshadow);
183 root 1.10
184 pcg 1.6 /* shadow for scrollbar slider */
185 pcg 1.8 rxvt_Draw_Shadow (display->display, scrollBar.win,
186 pcg 1.6 topShadowGC, botShadowGC,
187     sbshadow, scrollBar.top, sbwidth,
188     scrollbar_len);
189    
190 root 1.10 /* Redraw scrollbar arrows */
191     Draw_button (sbshadow, sbshadow, (scrollbar_isUp () ? -1 : +1), UP);
192     Draw_button (sbshadow, scrollBar.end + 1, (scrollbar_isDn () ? -1 : +1), DN);
193    
194 pcg 1.6 return 1;
195 pcg 1.1 }
196     #endif /* RXVT_SCROLLBAR */
197     /*----------------------- end-of-file (C source) -----------------------*/