]> git.mxchange.org Git - flightgear.git/blob - PUI/puBox.cxx
Pui -> PUI.
[flightgear.git] / PUI / puBox.cxx
1 #include "puLocal.h"
2
3 #define PU_BEVEL              5
4 #define PU_SMALL_BEVEL        2
5 #define PU_DFLT_OFFSET        8
6 #define PU_BOX_WIDTH          2
7 #define PU_DROPSHADOW_OFFSET 10
8
9 void puBox::extend ( puBox *bx )
10 {
11   if ( bx -> isEmpty () ) return ;
12
13   if ( min[0]>bx->min[0] ) min[0] = bx->min[0] ;
14   if ( min[1]>bx->min[1] ) min[1] = bx->min[1] ;
15   if ( max[0]<bx->max[0] ) max[0] = bx->max[0] ;
16   if ( max[1]<bx->max[1] ) max[1] = bx->max[1] ;
17 }
18  
19
20  
21 void puBox::draw ( int dx, int dy, int style, puColour colour[], int am_default  )
22 {
23   int hi, mid, lo ;
24
25   /* Colour assignments */
26
27   switch ( style )
28   {
29     case  PUSTYLE_NONE       :
30       return ;
31
32     case  PUSTYLE_PLAIN      :
33     case  PUSTYLE_DROPSHADOW :
34       mid = PUCOL_FOREGROUND ;
35       lo  = PUCOL_BACKGROUND ;
36       break ;
37
38     case  PUSTYLE_SMALL_BEVELLED :
39     case  PUSTYLE_BEVELLED   :
40     case  PUSTYLE_BOXED      :
41     case  PUSTYLE_SPECIAL_UNDERLINED :
42       mid = PUCOL_FOREGROUND ;
43       hi  = PUCOL_HIGHLIGHT  ;
44       lo  = PUCOL_BACKGROUND ;
45       break ;
46
47     case  PUSTYLE_RADIO      :
48     case -PUSTYLE_RADIO      :
49       hi  = PUCOL_HIGHLIGHT  ;
50       lo  = PUCOL_BACKGROUND ;
51       break ;
52
53     case -PUSTYLE_PLAIN      :
54     case -PUSTYLE_DROPSHADOW :
55       mid = PUCOL_HIGHLIGHT  ;
56       lo  = PUCOL_BACKGROUND ;
57       break ;
58
59     case -PUSTYLE_SMALL_BEVELLED :
60     case -PUSTYLE_BEVELLED   :
61     case -PUSTYLE_BOXED      :
62     case -PUSTYLE_SPECIAL_UNDERLINED :
63       mid = PUCOL_FOREGROUND ;
64       hi  = PUCOL_BACKGROUND ;
65       lo  = PUCOL_HIGHLIGHT  ;
66       break ;
67
68     default :
69       fprintf ( stderr, "PUI: Unrecognised 'style' %d\n", style ) ;
70       return ;
71   }
72
73   switch ( abs(style) )
74   {
75     case  PUSTYLE_PLAIN      :
76       glColor4fv ( colour [ mid ] ) ;
77       glRecti ( dx + min[0], dy + min[1],
78                 dx + max[0], dy + max[1] ) ;
79       break ;
80
81     case  PUSTYLE_SMALL_BEVELLED   :
82       glColor4fv ( colour [ hi  ] ) ;
83       glBegin ( GL_QUAD_STRIP ) ;
84         glVertex2i ( dx + min[0] + PU_SMALL_BEVEL, dy + min[1] + PU_SMALL_BEVEL ) ;
85         glVertex2i ( dx + min[0], dy + min[1] ) ;
86         glVertex2i ( dx + min[0] + PU_SMALL_BEVEL, dy + max[1] - PU_SMALL_BEVEL ) ;
87         glVertex2i ( dx + min[0], dy + max[1] ) ;
88         glVertex2i ( dx + max[0] - PU_SMALL_BEVEL, dy + max[1] - PU_SMALL_BEVEL ) ;
89         glVertex2i ( dx + max[0], dy + max[1] ) ;
90       glEnd () ;
91         glColor4fv ( colour [ lo  ] ) ;
92       glBegin ( GL_QUAD_STRIP ) ;
93         glVertex2i ( dx + min[0], dy + min[1] ) ;
94         glVertex2i ( dx + min[0] + PU_SMALL_BEVEL, dy + min[1] + PU_SMALL_BEVEL ) ;
95         glVertex2i ( dx + max[0], dy + min[1] ) ;
96         glVertex2i ( dx + max[0] - PU_SMALL_BEVEL, dy + min[1] + PU_SMALL_BEVEL ) ;
97         glVertex2i ( dx + max[0], dy + max[1] ) ;
98         glVertex2i ( dx + max[0] - PU_SMALL_BEVEL, dy + max[1] - PU_SMALL_BEVEL ) ;
99       glEnd () ;
100       glColor4fv ( colour [ mid ] ) ;
101       glRecti ( dx + min[0] + PU_SMALL_BEVEL, dy + min[1] + PU_SMALL_BEVEL,
102                 dx + max[0] - PU_SMALL_BEVEL, dy + max[1] - PU_SMALL_BEVEL ) ;
103       break ;
104
105     case  PUSTYLE_BEVELLED   :
106       glColor4fv ( colour [ hi  ] ) ;
107       glBegin ( GL_QUAD_STRIP ) ;
108         glVertex2i ( dx + min[0] + PU_BEVEL, dy + min[1] + PU_BEVEL ) ;
109         glVertex2i ( dx + min[0], dy + min[1] ) ;
110         glVertex2i ( dx + min[0] + PU_BEVEL, dy + max[1] - PU_BEVEL ) ;
111         glVertex2i ( dx + min[0], dy + max[1] ) ;
112         glVertex2i ( dx + max[0] - PU_BEVEL, dy + max[1] - PU_BEVEL ) ;
113         glVertex2i ( dx + max[0], dy + max[1] ) ;
114       glEnd () ;
115         glColor4fv ( colour [ lo  ] ) ;
116       glBegin ( GL_QUAD_STRIP ) ;
117         glVertex2i ( dx + min[0], dy + min[1] ) ;
118         glVertex2i ( dx + min[0] + PU_BEVEL, dy + min[1] + PU_BEVEL ) ;
119         glVertex2i ( dx + max[0], dy + min[1] ) ;
120         glVertex2i ( dx + max[0] - PU_BEVEL, dy + min[1] + PU_BEVEL ) ;
121         glVertex2i ( dx + max[0], dy + max[1] ) ;
122         glVertex2i ( dx + max[0] - PU_BEVEL, dy + max[1] - PU_BEVEL ) ;
123       glEnd () ;
124       glColor4fv ( colour [ mid ] ) ;
125       glRecti ( dx + min[0] + PU_BEVEL, dy + min[1] + PU_BEVEL,
126                 dx + max[0] - PU_BEVEL, dy + max[1] - PU_BEVEL ) ;
127       break ;
128
129     case  PUSTYLE_BOXED      :
130       glColor4fv ( colour [ hi  ] ) ;
131       glRecti ( dx + min[0], dy + min[1],
132                 dx + max[0], dy + max[1] ) ;
133       glColor4fv ( colour [ mid ] ) ;
134       glRecti ( dx + min[0]+PU_BOX_WIDTH, dy + min[1]+PU_BOX_WIDTH,
135                 dx + max[0]-PU_BOX_WIDTH, dy + max[1]-PU_BOX_WIDTH ) ;
136       break ;
137
138     case  PUSTYLE_RADIO      :
139       glColor4fv ( colour [ lo  ] ) ;
140       glBegin ( GL_LINE_LOOP ) ;
141         glVertex2i ( dx + min[0] + PU_RADIO_BUTTON_SIZE/2, dy + min[1]                          ) ;
142         glVertex2i ( dx + min[0] + PU_RADIO_BUTTON_SIZE  , dy + min[1] + PU_RADIO_BUTTON_SIZE/2 ) ;
143         glVertex2i ( dx + min[0] + PU_RADIO_BUTTON_SIZE/2, dy + min[1] + PU_RADIO_BUTTON_SIZE   ) ;
144         glVertex2i ( dx + min[0]                         , dy + min[1] + PU_RADIO_BUTTON_SIZE/2 ) ;
145       glEnd () ;
146
147       if ( style < 0 )
148       {
149         glColor4fv ( colour [ hi  ] ) ;
150         glBegin ( GL_QUADS ) ;
151           glVertex2i ( dx + min[0] + PU_RADIO_BUTTON_SIZE/2, dy + min[1] + 2                      ) ;
152           glVertex2i ( dx + min[0] + PU_RADIO_BUTTON_SIZE-2, dy + min[1] + PU_RADIO_BUTTON_SIZE/2 ) ;
153           glVertex2i ( dx + min[0] + PU_RADIO_BUTTON_SIZE/2, dy + min[1] + PU_RADIO_BUTTON_SIZE-2 ) ;
154           glVertex2i ( dx + min[0] + 2                     , dy + min[1] + PU_RADIO_BUTTON_SIZE/2 ) ;
155         glEnd () ;
156       }
157       break ;
158
159     case  PUSTYLE_SPECIAL_UNDERLINED :
160       glColor4fv ( colour [ hi  ] ) ;
161       glRecti ( dx + min[0], dy + min[1],
162                 dx + max[0], dy + min[1]+2 ) ;
163       glColor4fv ( colour [ mid ] ) ;
164       glRecti ( dx + min[0], dy + min[1]+1,
165                 dx + max[0], dy + max[1] ) ;
166       break ;
167
168     case  PUSTYLE_DROPSHADOW :
169       glColor4fv ( colour [ lo  ] ) ;
170       glRecti ( dx + min[0] + PU_DROPSHADOW_OFFSET, dy + min[1] - PU_DROPSHADOW_OFFSET,
171                 dx + max[0] + PU_DROPSHADOW_OFFSET, dy + max[1] - PU_DROPSHADOW_OFFSET ) ;
172       glColor4fv ( colour [ mid ] ) ;
173       glRecti ( dx + min[0], dy + min[1],
174                 dx + max[0], dy + max[1] ) ;
175       break ;
176   }
177
178   if ( am_default )
179   {
180     glColor4fv ( colour [ PUCOL_BACKGROUND ] ) ;
181     glLineStipple ( 1, 0xF0F0 ) ;
182     glEnable ( GL_LINE_STIPPLE ) ;
183     glBegin ( GL_LINE_LOOP ) ;
184       glVertex2i ( dx + min[0] + PU_DFLT_OFFSET, dy + min[1] + PU_DFLT_OFFSET ) ;
185       glVertex2i ( dx + min[0] + PU_DFLT_OFFSET, dy + max[1] - PU_DFLT_OFFSET ) ;
186       glVertex2i ( dx + max[0] - PU_DFLT_OFFSET, dy + max[1] - PU_DFLT_OFFSET ) ;
187       glVertex2i ( dx + max[0] - PU_DFLT_OFFSET, dy + min[1] + PU_DFLT_OFFSET ) ;
188     glEnd () ;
189     glDisable ( GL_LINE_STIPPLE ) ;
190   }
191 }
192
193