117
void gl_round_box_topshade(float minx, float miny, float maxx, float maxy, float rad)
116
void gl_round_box(int mode, float minx, float miny, float maxx, float maxy, float rad)
118
float vec[7][2]= {{0.195, 0.02}, {0.383, 0.067}, {0.55, 0.169}, {0.707, 0.293},
119
{0.831, 0.45}, {0.924, 0.617}, {0.98, 0.805}};
124
vec[a][0]*= rad; vec[a][1]*= rad;
129
/* start with corner right-bottom */
130
if(roundboxtype & 4) {
131
glVertex2f( maxx-rad, miny);
133
glVertex2f( maxx-rad+vec[a][0], miny+vec[a][1]);
135
glVertex2f( maxx, miny+rad);
137
else glVertex2f( maxx, miny);
139
/* corner right-top */
140
if(roundboxtype & 2) {
141
glVertex2f( maxx, maxy-rad);
143
glVertex2f( maxx-vec[a][1], maxy-rad+vec[a][0]);
145
glVertex2f( maxx-rad, maxy);
147
else glVertex2f( maxx, maxy);
149
/* corner left-top */
150
if(roundboxtype & 1) {
151
glVertex2f( minx+rad, maxy);
153
glVertex2f( minx+rad-vec[a][0], maxy-vec[a][1]);
155
glVertex2f( minx, maxy-rad);
157
else glVertex2f( minx, maxy);
159
/* corner left-bottom */
160
if(roundboxtype & 8) {
161
glVertex2f( minx, miny+rad);
163
glVertex2f( minx+vec[a][1], miny+rad-vec[a][0]);
165
glVertex2f( minx+rad, miny);
167
else glVertex2f( minx, miny);
172
static void round_box_shade_col(float *col1, float *col2, float fac)
176
col[0]= (fac*col1[0] + (1.0-fac)*col2[0]);
177
col[1]= (fac*col1[1] + (1.0-fac)*col2[1]);
178
col[2]= (fac*col1[2] + (1.0-fac)*col2[2]);
183
/* linear horizontal shade within button or in outline */
184
void gl_round_box_shade(int mode, float minx, float miny, float maxx, float maxy, float rad, float shadetop, float shadedown)
186
float vec[7][2]= {{0.195, 0.02}, {0.383, 0.067}, {0.55, 0.169}, {0.707, 0.293},
187
{0.831, 0.45}, {0.924, 0.617}, {0.98, 0.805}};
188
float div= maxy-miny;
189
float coltop[3], coldown[3], color[4];
194
vec[a][0]*= rad; vec[a][1]*= rad;
196
/* get current color, needs to be outside of glBegin/End */
197
glGetFloatv(GL_CURRENT_COLOR, color);
199
/* 'shade' defines strength of shading */
200
coltop[0]= color[0]+shadetop; if(coltop[0]>1.0) coltop[0]= 1.0;
201
coltop[1]= color[1]+shadetop; if(coltop[1]>1.0) coltop[1]= 1.0;
202
coltop[2]= color[2]+shadetop; if(coltop[2]>1.0) coltop[2]= 1.0;
203
coldown[0]= color[0]+shadedown; if(coldown[0]<0.0) coldown[0]= 0.0;
204
coldown[1]= color[1]+shadedown; if(coldown[1]<0.0) coldown[1]= 0.0;
205
coldown[2]= color[2]+shadedown; if(coldown[2]<0.0) coldown[2]= 0.0;
207
glShadeModel(GL_SMOOTH);
210
/* start with corner right-bottom */
211
if(roundboxtype & 4) {
213
round_box_shade_col(coltop, coldown, 0.0);
214
glVertex2f( maxx-rad, miny);
217
round_box_shade_col(coltop, coldown, vec[a][1]/div);
218
glVertex2f( maxx-rad+vec[a][0], miny+vec[a][1]);
221
round_box_shade_col(coltop, coldown, rad/div);
222
glVertex2f( maxx, miny+rad);
225
round_box_shade_col(coltop, coldown, 0.0);
226
glVertex2f( maxx, miny);
229
/* corner right-top */
230
if(roundboxtype & 2) {
232
round_box_shade_col(coltop, coldown, (div-rad)/div);
233
glVertex2f( maxx, maxy-rad);
236
round_box_shade_col(coltop, coldown, (div-rad+vec[a][1])/div);
237
glVertex2f( maxx-vec[a][1], maxy-rad+vec[a][0]);
239
round_box_shade_col(coltop, coldown, 1.0);
240
glVertex2f( maxx-rad, maxy);
243
round_box_shade_col(coltop, coldown, 1.0);
244
glVertex2f( maxx, maxy);
247
/* corner left-top */
248
if(roundboxtype & 1) {
250
round_box_shade_col(coltop, coldown, 1.0);
251
glVertex2f( minx+rad, maxy);
254
round_box_shade_col(coltop, coldown, (div-vec[a][1])/div);
255
glVertex2f( minx+rad-vec[a][0], maxy-vec[a][1]);
258
round_box_shade_col(coltop, coldown, (div-rad)/div);
259
glVertex2f( minx, maxy-rad);
262
round_box_shade_col(coltop, coldown, 1.0);
263
glVertex2f( minx, maxy);
266
/* corner left-bottom */
267
if(roundboxtype & 8) {
269
round_box_shade_col(coltop, coldown, rad/div);
270
glVertex2f( minx, miny+rad);
273
round_box_shade_col(coltop, coldown, (rad-vec[a][1])/div);
274
glVertex2f( minx+vec[a][1], miny+rad-vec[a][0]);
277
round_box_shade_col(coltop, coldown, 0.0);
278
glVertex2f( minx+rad, miny);
281
round_box_shade_col(coltop, coldown, 0.0);
282
glVertex2f( minx, miny);
286
glShadeModel(GL_FLAT);
289
/* only for headers */
290
static void gl_round_box_topshade(float minx, float miny, float maxx, float maxy, float rad)
119
292
float vec[7][2]= {{0.195, 0.02}, {0.383, 0.067}, {0.55, 0.169}, {0.707, 0.293},
120
293
{0.831, 0.45}, {0.924, 0.617}, {0.98, 0.805}};
165
void gl_round_box(float minx, float miny, float maxx, float maxy, float rad)
167
float vec[7][2]= {{0.195, 0.02}, {0.383, 0.067}, {0.55, 0.169}, {0.707, 0.293},
168
{0.831, 0.45}, {0.924, 0.617}, {0.98, 0.805}};
173
vec[a][0]*= rad; vec[a][1]*= rad;
176
/* start with corner right-bottom */
177
if(roundboxtype & 4) {
178
glVertex2f( maxx-rad, miny);
180
glVertex2f( maxx-rad+vec[a][0], miny+vec[a][1]);
182
glVertex2f( maxx, miny+rad);
184
else glVertex2f( maxx, miny);
186
/* corner right-top */
187
if(roundboxtype & 2) {
188
glVertex2f( maxx, maxy-rad);
190
glVertex2f( maxx-vec[a][1], maxy-rad+vec[a][0]);
192
glVertex2f( maxx-rad, maxy);
194
else glVertex2f( maxx, maxy);
196
/* corner left-top */
197
if(roundboxtype & 1) {
198
glVertex2f( minx+rad, maxy);
200
glVertex2f( minx+rad-vec[a][0], maxy-vec[a][1]);
202
glVertex2f( minx, maxy-rad);
204
else glVertex2f( minx, maxy);
206
/* corner left-bottom */
207
if(roundboxtype & 8) {
208
glVertex2f( minx, miny+rad);
210
glVertex2f( minx+vec[a][1], miny+rad-vec[a][0]);
212
glVertex2f( minx+rad, miny);
214
else glVertex2f( minx, miny);
218
337
/* for headers and floating panels */
219
void uiRoundBoxEmboss(float minx, float miny, float maxx, float maxy, float rad)
338
void uiRoundBoxEmboss(float minx, float miny, float maxx, float maxy, float rad, int active)
780
906
if(pa->active==0);
781
907
else if(pa==panel) {
910
/* draw the active tab */
783
911
uiSetRoundBox(3);
784
912
BIF_ThemeColorShade(TH_HEADER, -3);
785
913
uiRoundBox(2+pnl_icons+a*width, panel->sizey-1, pnl_icons+(a+1)*width, panel->sizey+PNL_HEADER-3, 8);
915
/* draw the active text label */
787
916
BIF_ThemeColor(TH_TEXT);
788
glRasterPos2f(16+pnl_icons+a*width, panel->sizey+4);
917
ui_rasterpos_safe(16+pnl_icons+a*width, panel->sizey+4, block->aspect);
789
918
str= ui_block_cut_str(block, pa->panelname, (short)(width-10));
790
919
BIF_DrawString(block->curfont, str, (U.transopts & USER_TR_BUTTONS));
794
923
else if(pa->paneltab==panel) {
924
/* draw an inactive tab */
797
926
BIF_ThemeColorShade(TH_HEADER, -60);
798
927
uiRoundBox(2+pnl_icons+a*width, panel->sizey, pnl_icons+(a+1)*width, panel->sizey+PNL_HEADER-3, 8);
929
/* draw an inactive tab label */
800
930
BIF_ThemeColorShade(TH_TEXT_HI, -40);
801
glRasterPos2f(16+pnl_icons+a*width, panel->sizey+4);
931
ui_rasterpos_safe(16+pnl_icons+a*width, panel->sizey+4, block->aspect);
802
932
str= ui_block_cut_str(block, pa->panelname, (short)(width-10));
803
933
BIF_DrawString(block->curfont, str, (U.transopts & USER_TR_BUTTONS));
824
954
if(panel->paneltab) return;
956
/* if the panel is minimised vertically:
826
959
if(panel->flag & PNL_CLOSEDY) {
960
/* draw a little rounded box, the size of the header */
827
961
uiSetRoundBox(15);
828
962
BIF_ThemeColorShade(TH_HEADER, -30);
829
uiRoundBox(block->minx, block->maxy, block->maxx, block->maxy+PNL_HEADER, 10);
963
uiRoundBox(block->minx, block->maxy, block->maxx, block->maxy+PNL_HEADER, 8);
832
966
ofsx= PNL_ICON+8;
833
967
if(panel->control & UI_PNL_CLOSE) ofsx+= PNL_ICON;
834
968
BIF_ThemeColor(TH_TEXT_HI);
835
glRasterPos2f(4+block->minx+ofsx, block->maxy+5);
969
ui_rasterpos_safe(4+block->minx+ofsx, block->maxy+5, block->aspect);
836
970
BIF_DrawString(block->curfont, panel->panelname, (U.transopts & USER_TR_BUTTONS));
839
973
if(panel->flag & PNL_SELECT) {
840
974
BIF_ThemeColorShade(TH_HEADER, -120);
841
uiRoundRect(block->minx, block->maxy, block->maxx, block->maxy+PNL_HEADER, 10);
975
uiRoundRect(block->minx, block->maxy, block->maxx, block->maxy+PNL_HEADER, 8);
977
/* if it's being overlapped by a panel being dragged */
843
978
if(panel->flag & PNL_OVERLAP) {
844
979
BIF_ThemeColor(TH_TEXT_HI);
845
uiRoundRect(block->minx, block->maxy, block->maxx, block->maxy+PNL_HEADER, 10);
980
uiRoundRect(block->minx, block->maxy, block->maxx, block->maxy+PNL_HEADER, 8);
984
/* if the panel is minimised horizontally:
849
991
else if(panel->flag & PNL_CLOSEDX) {
995
/* draw a little rounded box, the size of the header, rotated 90 deg */
853
996
uiSetRoundBox(15);
854
997
BIF_ThemeColorShade(TH_HEADER, -30);
855
uiRoundBox(block->minx, block->miny, block->minx+PNL_HEADER, block->maxy+PNL_HEADER, 10);
998
uiRoundBox(block->minx, block->miny, block->minx+PNL_HEADER, block->maxy+PNL_HEADER, 8);
857
// title, only capitals for now
1000
/* title, only the initial character for now */
858
1001
BIF_ThemeColor(TH_TEXT_HI);
860
1003
end= strlen(panel->panelname);
862
1005
for(a=0; a<end; a++) {
863
1006
str[0]= panel->panelname[a];
864
1007
if( isupper(str[0]) ) {
865
glRasterPos2f(block->minx+5, block->maxy-ofs);
1008
ui_rasterpos_safe(block->minx+5, block->maxy-ofs, block->aspect);
866
1009
BIF_DrawString(block->curfont, str, 0);
872
1015
if(panel->flag & PNL_SELECT) {
873
1016
BIF_ThemeColorShade(TH_HEADER, -120);
874
uiRoundRect(block->minx, block->miny, block->minx+PNL_HEADER, block->maxy+PNL_HEADER, 10);
1017
uiRoundRect(block->minx, block->miny, block->minx+PNL_HEADER, block->maxy+PNL_HEADER, 8);
876
1019
if(panel->flag & PNL_OVERLAP) {
877
1020
BIF_ThemeColor(TH_TEXT_HI);
878
uiRoundRect(block->minx, block->miny, block->minx+PNL_HEADER, block->maxy+PNL_HEADER, 10);
1021
uiRoundRect(block->minx, block->miny, block->minx+PNL_HEADER, block->maxy+PNL_HEADER, 8);
1027
/* all panels now... */
886
1028
if(panel->control & UI_PNL_SOLID) {
887
1029
BIF_ThemeColorShade(TH_HEADER, -30);
888
uiRoundBox(block->minx, block->maxy, block->maxx, block->maxy+PNL_HEADER, 10);
1032
uiRoundBox(block->minx, block->maxy, block->maxx, block->maxy+PNL_HEADER, 8);
889
1034
// blend now for panels in 3d window, test...
890
1035
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
891
1036
glEnable(GL_BLEND);
892
1037
BIF_ThemeColor4(TH_PANEL);
893
glRectf(block->minx, block->miny, block->maxx, block->maxy);
1040
uiRoundBox(block->minx, block->miny, block->maxx, block->maxy, 8);
1042
// glRectf(block->minx, block->miny, block->maxx, block->maxy);
895
1046
glColor4ub(0, 0, 0, 40);
897
1048
fdrawline(block->minx+2, block->miny-1, block->maxx+1, block->miny-1);
916
1071
glDisable(GL_BLEND);
1074
/* draw the title, tabs, etc in the header */
920
1075
ui_draw_panel_header(block);
1077
/* in some occasions, draw a border */
924
1078
if(panel->flag & PNL_SELECT) {
1079
if(panel->control & UI_PNL_SOLID) uiSetRoundBox(15);
1080
else uiSetRoundBox(3);
925
1082
BIF_ThemeColorShade(TH_HEADER, -120);
926
uiRoundRect(block->minx, block->miny, block->maxx, block->maxy+PNL_HEADER, 10);
1083
uiRoundRect(block->minx, block->miny, block->maxx, block->maxy+PNL_HEADER, 8);
928
1085
if(panel->flag & PNL_OVERLAP) {
1086
if(panel->control & UI_PNL_SOLID) uiSetRoundBox(15);
1087
else uiSetRoundBox(3);
929
1089
BIF_ThemeColor(TH_TEXT_HI);
930
uiRoundRect(block->minx, block->miny, block->maxx, block->maxy+PNL_HEADER, 10);
1090
uiRoundRect(block->minx, block->miny, block->maxx, block->maxy+PNL_HEADER, 8);
933
1093
/* and a soft shadow-line for now */
934
1095
glEnable( GL_BLEND );
935
1096
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
936
1097
glColor4ub(0, 0, 0, 50);
937
1098
fdrawline(block->maxx, block->miny, block->maxx, block->maxy+PNL_HEADER/2);
938
1099
fdrawline(block->minx, block->miny, block->maxx, block->miny);
939
1100
glDisable(GL_BLEND);