5 #define PU_SMALL_BEVEL 2
6 #define PU_DFLT_OFFSET 8
8 #define PU_DROPSHADOW_OFFSET 5
10 void puBox::extend ( puBox *bx )
12 if ( bx -> isEmpty () ) return ;
14 if ( min[0]>bx->min[0] ) min[0] = bx->min[0] ;
15 if ( min[1]>bx->min[1] ) min[1] = bx->min[1] ;
16 if ( max[0]<bx->max[0] ) max[0] = bx->max[0] ;
17 if ( max[1]<bx->max[1] ) max[1] = bx->max[1] ;
22 void puBox::draw ( int dx, int dy, int style, puColour colour[], int am_default )
26 /* Colour assignments */
34 case PUSTYLE_DROPSHADOW :
35 mid = PUCOL_FOREGROUND ;
36 lo = PUCOL_BACKGROUND ;
39 case PUSTYLE_SMALL_SHADED :
41 case PUSTYLE_SMALL_BEVELLED :
42 case PUSTYLE_BEVELLED :
44 case PUSTYLE_SPECIAL_UNDERLINED :
45 mid = PUCOL_FOREGROUND ;
46 hi = PUCOL_HIGHLIGHT ;
47 lo = PUCOL_BACKGROUND ;
52 hi = PUCOL_HIGHLIGHT ;
53 lo = PUCOL_BACKGROUND ;
57 case -PUSTYLE_DROPSHADOW :
58 mid = PUCOL_HIGHLIGHT ;
59 lo = PUCOL_BACKGROUND ;
62 case -PUSTYLE_SMALL_BEVELLED :
63 case -PUSTYLE_BEVELLED :
64 case -PUSTYLE_SMALL_SHADED :
65 case -PUSTYLE_SHADED :
67 case -PUSTYLE_SPECIAL_UNDERLINED :
68 mid = PUCOL_FOREGROUND ;
69 hi = PUCOL_BACKGROUND ;
70 lo = PUCOL_HIGHLIGHT ;
74 fprintf ( stderr, "PUI: Unrecognised 'style' %d\n", style ) ;
81 glColor4fv ( colour [ mid ] ) ;
82 glRecti ( dx + min[0], dy + min[1],
83 dx + max[0], dy + max[1] ) ;
86 case PUSTYLE_SMALL_BEVELLED :
87 case PUSTYLE_SMALL_SHADED :
88 glColor4fv ( colour [ hi ] ) ;
89 glBegin ( GL_QUAD_STRIP ) ;
90 glVertex2i ( dx + min[0] + PU_SMALL_BEVEL, dy + min[1] + PU_SMALL_BEVEL ) ;
91 glVertex2i ( dx + min[0], dy + min[1] ) ;
92 glVertex2i ( dx + min[0] + PU_SMALL_BEVEL, dy + max[1] - PU_SMALL_BEVEL ) ;
93 glVertex2i ( dx + min[0], dy + max[1] ) ;
94 glVertex2i ( dx + max[0] - PU_SMALL_BEVEL, dy + max[1] - PU_SMALL_BEVEL ) ;
95 glVertex2i ( dx + max[0], dy + max[1] ) ;
97 glColor4fv ( colour [ lo ] ) ;
98 glBegin ( GL_QUAD_STRIP ) ;
99 glVertex2i ( dx + min[0], dy + min[1] ) ;
100 glVertex2i ( dx + min[0] + PU_SMALL_BEVEL, dy + min[1] + PU_SMALL_BEVEL ) ;
101 glVertex2i ( dx + max[0], dy + min[1] ) ;
102 glVertex2i ( dx + max[0] - PU_SMALL_BEVEL, dy + min[1] + PU_SMALL_BEVEL ) ;
103 glVertex2i ( dx + max[0], dy + max[1] ) ;
104 glVertex2i ( dx + max[0] - PU_SMALL_BEVEL, dy + max[1] - PU_SMALL_BEVEL ) ;
107 if ( abs(style) == PUSTYLE_SMALL_BEVELLED )
109 glColor4fv ( colour [ mid ] ) ;
110 glRecti ( dx + min[0] + PU_SMALL_BEVEL, dy + min[1] + PU_SMALL_BEVEL,
111 dx + max[0] - PU_SMALL_BEVEL, dy + max[1] - PU_SMALL_BEVEL ) ;
115 glShadeModel(GL_SMOOTH);
117 glColor4fv( colour [ mid ] );
118 glVertex2i( dx + min[0] + PU_SMALL_BEVEL , dy + min[1] + PU_SMALL_BEVEL );
119 if(style==PUSTYLE_SMALL_SHADED)
120 glColor4f( colour [mid][0] + (colour[lo][0] - colour[mid][0])/2.0f,
121 colour [mid][1] + (colour[lo][1] - colour[mid][1])/2.0f,
122 colour [mid][2] + (colour[lo][2] - colour[mid][2])/2.0f,
125 glColor4f( colour [mid][0] + (colour[hi][0] - colour[mid][0])/2.0f,
126 colour [mid][1] + (colour[hi][1] - colour[mid][1])/2.0f,
127 colour [mid][2] + (colour[hi][2] - colour[mid][2])/2.0f,
129 glVertex2i( dx + min[0] + PU_SMALL_BEVEL , dy + max[1] - PU_SMALL_BEVEL );
130 glColor4fv( colour [ mid ] );
131 glVertex2i( dx + max[0] - PU_SMALL_BEVEL , dy + max[1] - PU_SMALL_BEVEL );
132 if(style==-PUSTYLE_SMALL_SHADED)
133 glColor4f( colour [mid][0] + (colour[lo][0] - colour[mid][0])/2.0f,
134 colour [mid][1] + (colour[lo][1] - colour[mid][1])/2.0f,
135 colour [mid][2] + (colour[lo][2] - colour[mid][2])/2.0f,
138 glColor4f( colour [mid][0] + (colour[hi][0] - colour[mid][0])/2.0f,
139 colour [mid][1] + (colour[hi][1] - colour[mid][1])/2.0f,
140 colour [mid][2] + (colour[hi][2] - colour[mid][2])/2.0f,
142 glVertex2i( dx + max[0] - PU_SMALL_BEVEL , dy + min[1] + PU_SMALL_BEVEL );
144 glShadeModel(GL_FLAT);
146 if(style == -PUSTYLE_SMALL_SHADED)
148 glColor4fv ( colour [ lo ] ) ;
149 glBegin ( GL_QUAD_STRIP ) ;
150 glVertex2i ( dx + min[0] + PU_SMALL_BEVEL , dy + min[1] + PU_SMALL_BEVEL ) ;
151 glVertex2i ( dx + min[0] + PU_SMALL_BEVEL/2 , dy + min[1] + PU_SMALL_BEVEL/2 ) ;
152 glVertex2i ( dx + min[0] + PU_SMALL_BEVEL , dy + max[1] - PU_SMALL_BEVEL ) ;
153 glVertex2i ( dx + min[0] + PU_SMALL_BEVEL/2 , dy + max[1] - PU_SMALL_BEVEL/2 ) ;
154 glVertex2i ( dx + max[0] - PU_SMALL_BEVEL , dy + max[1] - PU_SMALL_BEVEL ) ;
155 glVertex2i ( dx + max[0] - PU_SMALL_BEVEL/2 , dy + max[1] - PU_SMALL_BEVEL/2 ) ;
157 glColor4fv ( colour [ hi ] ) ;
158 glBegin ( GL_QUAD_STRIP ) ;
159 glVertex2i ( dx + min[0] + PU_SMALL_BEVEL/2 , dy + min[1] + PU_SMALL_BEVEL/2 ) ;
160 glVertex2i ( dx + min[0] + PU_SMALL_BEVEL , dy + min[1] + PU_SMALL_BEVEL ) ;
161 glVertex2i ( dx + max[0] - PU_SMALL_BEVEL/2 , dy + min[1] + PU_SMALL_BEVEL/2 ) ;
162 glVertex2i ( dx + max[0] - PU_SMALL_BEVEL , dy + min[1] + PU_SMALL_BEVEL ) ;
163 glVertex2i ( dx + max[0] - PU_SMALL_BEVEL/2 , dy + max[1] - PU_SMALL_BEVEL/2 ) ;
164 glVertex2i ( dx + max[0] - PU_SMALL_BEVEL , dy + max[1] - PU_SMALL_BEVEL ) ;
170 case PUSTYLE_BEVELLED :
171 case PUSTYLE_SHADED :
172 glColor4fv ( colour [ hi ] ) ;
173 glBegin ( GL_QUAD_STRIP ) ;
174 glVertex2i ( dx + min[0] + PU_BEVEL, dy + min[1] + PU_BEVEL ) ;
175 glVertex2i ( dx + min[0], dy + min[1] ) ;
176 glVertex2i ( dx + min[0] + PU_BEVEL, dy + max[1] - PU_BEVEL ) ;
177 glVertex2i ( dx + min[0], dy + max[1] ) ;
178 glVertex2i ( dx + max[0] - PU_BEVEL, dy + max[1] - PU_BEVEL ) ;
179 glVertex2i ( dx + max[0], dy + max[1] ) ;
181 glColor4fv ( colour [ lo ] ) ;
182 glBegin ( GL_QUAD_STRIP ) ;
183 glVertex2i ( dx + min[0], dy + min[1] ) ;
184 glVertex2i ( dx + min[0] + PU_BEVEL, dy + min[1] + PU_BEVEL ) ;
185 glVertex2i ( dx + max[0], dy + min[1] ) ;
186 glVertex2i ( dx + max[0] - PU_BEVEL, dy + min[1] + PU_BEVEL ) ;
187 glVertex2i ( dx + max[0], dy + max[1] ) ;
188 glVertex2i ( dx + max[0] - PU_BEVEL, dy + max[1] - PU_BEVEL ) ;
191 if ( abs(style) == PUSTYLE_BEVELLED )
193 glColor4fv ( colour [ mid ] ) ;
194 glRecti ( dx + min[0] + PU_BEVEL, dy + min[1] + PU_BEVEL,
195 dx + max[0] - PU_BEVEL, dy + max[1] - PU_BEVEL ) ;
199 glShadeModel(GL_SMOOTH);
201 glColor4fv( colour [ mid ] );
202 glVertex2i( dx + min[0] + PU_BEVEL , dy + min[1] + PU_BEVEL );
203 if(style==PUSTYLE_SHADED)
204 glColor4f( colour [mid][0] + (colour[lo][0] - colour[mid][0])/2.0f,
205 colour [mid][1] + (colour[lo][1] - colour[mid][1])/2.0f,
206 colour [mid][2] + (colour[lo][2] - colour[mid][2])/2.0f,
209 glColor4f( colour [mid][0] + (colour[hi][0] - colour[mid][0])/2.0f,
210 colour [mid][1] + (colour[hi][1] - colour[mid][1])/2.0f,
211 colour [mid][2] + (colour[hi][2] - colour[mid][2])/2.0f,
213 glVertex2i( dx + min[0] + PU_BEVEL , dy + max[1] - PU_BEVEL );
214 glColor4fv( colour [ mid ] );
215 glVertex2i( dx + max[0] - PU_BEVEL , dy + max[1] - PU_BEVEL );
216 if(style==-PUSTYLE_SHADED)
217 glColor4f( colour [mid][0] + (colour[lo][0] - colour[mid][0])/2.0f,
218 colour [mid][1] + (colour[lo][1] - colour[mid][1])/2.0f,
219 colour [mid][2] + (colour[lo][2] - colour[mid][2])/2.0f,
222 glColor4f( colour [mid][0] + (colour[hi][0] - colour[mid][0])/2.0f,
223 colour [mid][1] + (colour[hi][1] - colour[mid][1])/2.0f,
224 colour [mid][2] + (colour[hi][2] - colour[mid][2])/2.0f,
226 glVertex2i( dx + max[0] - PU_BEVEL , dy + min[1] + PU_BEVEL );
228 glShadeModel(GL_FLAT);
230 if(style == -PUSTYLE_SHADED)
232 glColor4fv ( colour [ lo ] ) ;
233 glBegin ( GL_QUAD_STRIP ) ;
234 glVertex2i ( dx + min[0] + PU_BEVEL , dy + min[1] + PU_BEVEL ) ;
235 glVertex2i ( dx + min[0] + PU_BEVEL/2 , dy + min[1] + PU_BEVEL/2 ) ;
236 glVertex2i ( dx + min[0] + PU_BEVEL , dy + max[1] - PU_BEVEL ) ;
237 glVertex2i ( dx + min[0] + PU_BEVEL/2 , dy + max[1] - PU_BEVEL/2 ) ;
238 glVertex2i ( dx + max[0] - PU_BEVEL , dy + max[1] - PU_BEVEL ) ;
239 glVertex2i ( dx + max[0] - PU_BEVEL/2 , dy + max[1] - PU_BEVEL/2 ) ;
241 glColor4fv ( colour [ hi ] ) ;
242 glBegin ( GL_QUAD_STRIP ) ;
243 glVertex2i ( dx + min[0] + PU_BEVEL/2 , dy + min[1] + PU_BEVEL/2 ) ;
244 glVertex2i ( dx + min[0] + PU_BEVEL , dy + min[1] + PU_BEVEL ) ;
245 glVertex2i ( dx + max[0] - PU_BEVEL/2 , dy + min[1] + PU_BEVEL/2 ) ;
246 glVertex2i ( dx + max[0] - PU_BEVEL , dy + min[1] + PU_BEVEL ) ;
247 glVertex2i ( dx + max[0] - PU_BEVEL/2 , dy + max[1] - PU_BEVEL/2 ) ;
248 glVertex2i ( dx + max[0] - PU_BEVEL , dy + max[1] - PU_BEVEL ) ;
255 glColor4fv ( colour [ hi ] ) ;
256 glRecti ( dx + min[0], dy + min[1],
257 dx + max[0], dy + max[1] ) ;
258 glColor4fv ( colour [ mid ] ) ;
259 glRecti ( dx + min[0]+PU_BOX_WIDTH, dy + min[1]+PU_BOX_WIDTH,
260 dx + max[0]-PU_BOX_WIDTH, dy + max[1]-PU_BOX_WIDTH ) ;
264 glColor4fv ( colour [ lo ] ) ;
265 glBegin ( GL_LINE_LOOP ) ;
266 glVertex2i ( dx + min[0] + PU_RADIO_BUTTON_SIZE/2, dy + min[1] ) ;
267 glVertex2i ( dx + min[0] + PU_RADIO_BUTTON_SIZE , dy + min[1] + PU_RADIO_BUTTON_SIZE/2 ) ;
268 glVertex2i ( dx + min[0] + PU_RADIO_BUTTON_SIZE/2, dy + min[1] + PU_RADIO_BUTTON_SIZE ) ;
269 glVertex2i ( dx + min[0] , dy + min[1] + PU_RADIO_BUTTON_SIZE/2 ) ;
274 glColor4fv ( colour [ hi ] ) ;
275 glBegin ( GL_QUADS ) ;
276 glVertex2i ( dx + min[0] + PU_RADIO_BUTTON_SIZE/2, dy + min[1] + 2 ) ;
277 glVertex2i ( dx + min[0] + PU_RADIO_BUTTON_SIZE-2, dy + min[1] + PU_RADIO_BUTTON_SIZE/2 ) ;
278 glVertex2i ( dx + min[0] + PU_RADIO_BUTTON_SIZE/2, dy + min[1] + PU_RADIO_BUTTON_SIZE-2 ) ;
279 glVertex2i ( dx + min[0] + 2 , dy + min[1] + PU_RADIO_BUTTON_SIZE/2 ) ;
284 case PUSTYLE_SPECIAL_UNDERLINED :
285 glColor4fv ( colour [ hi ] ) ;
286 glRecti ( dx + min[0], dy + min[1],
287 dx + max[0], dy + min[1]+2 ) ;
288 glColor4fv ( colour [ mid ] ) ;
289 glRecti ( dx + min[0], dy + min[1]+1,
290 dx + max[0], dy + max[1] ) ;
293 case PUSTYLE_DROPSHADOW :
294 glColor4fv ( colour [ lo ] ) ;
295 glRecti ( dx + min[0] + PU_DROPSHADOW_OFFSET, dy + min[1] - PU_DROPSHADOW_OFFSET,
296 dx + max[0] + PU_DROPSHADOW_OFFSET, dy + max[1] - PU_DROPSHADOW_OFFSET ) ;
297 glColor4fv ( colour [ mid ] ) ;
298 glRecti ( dx + min[0], dy + min[1],
299 dx + max[0], dy + max[1] ) ;
305 glColor4fv ( colour [ PUCOL_BACKGROUND ] ) ;
306 glLineStipple ( 1, 0xF0F0 ) ;
307 glEnable ( GL_LINE_STIPPLE ) ;
308 glBegin ( GL_LINE_LOOP ) ;
309 glVertex2i ( dx + min[0] + PU_DFLT_OFFSET, dy + min[1] + PU_DFLT_OFFSET ) ;
310 glVertex2i ( dx + min[0] + PU_DFLT_OFFSET, dy + max[1] - PU_DFLT_OFFSET ) ;
311 glVertex2i ( dx + max[0] - PU_DFLT_OFFSET, dy + max[1] - PU_DFLT_OFFSET ) ;
312 glVertex2i ( dx + max[0] - PU_DFLT_OFFSET, dy + min[1] + PU_DFLT_OFFSET ) ;
314 glDisable ( GL_LINE_STIPPLE ) ;