added Matt Ebb's new windowtype button

This commit is contained in:
2003-05-10 10:36:14 +00:00
parent 37d32099d6
commit 950504c016
4 changed files with 440 additions and 92 deletions

View File

@@ -275,7 +275,7 @@ float FTF_TTFont::DrawStringRGB(char* str, unsigned int flag, float r, float g,
float FTF_TTFont::GetStringWidth(char* str, unsigned int flag) float FTF_TTFont::GetStringWidth(char* str, unsigned int flag)
{ {
char ustr[FTF_MAX_STR_SIZE*2]={0}; char ustr[FTF_MAX_STR_SIZE*2]={0};
wchar_t wstr[255]={'\0'}; wchar_t wstr[511]={'\0'};
int len=0; int len=0;
if (FTF_USE_GETTEXT & flag) if (FTF_USE_GETTEXT & flag)

View File

@@ -35,7 +35,7 @@
/* general defines */ /* general defines */
#define UI_MAX_DRAW_STR 180 #define UI_MAX_DRAW_STR 400
#define UI_MAX_NAME_STR 64 #define UI_MAX_NAME_STR 64
#define UI_ARRAY 29 #define UI_ARRAY 29
@@ -78,6 +78,7 @@
#define LINK (22<<9) #define LINK (22<<9)
#define INLINK (23<<9) #define INLINK (23<<9)
#define KEYEVT (24<<9) #define KEYEVT (24<<9)
#define ICONTEXTROW (25<<9)
#define BUTTYPE (31<<9) #define BUTTYPE (31<<9)
@@ -98,6 +99,10 @@
#define UI_ACTIVE 4 #define UI_ACTIVE 4
#define UI_HAS_ICON 8 #define UI_HAS_ICON 8
#define UI_TEXT_LEFT 16 #define UI_TEXT_LEFT 16
/* definitions for icons (and their alignment) in buttons */
#define UI_ICON_LEFT 32
#define UI_ICON_RIGHT 64
/* definitions for icons (and their alignment) in buttons */
/* uiBlock->flag */ /* uiBlock->flag */
#define UI_BLOCK_LOOP 1 #define UI_BLOCK_LOOP 1
@@ -115,6 +120,7 @@
#define UI_EMBOSSF 3 /* Square embossed button */ #define UI_EMBOSSF 3 /* Square embossed button */
#define UI_EMBOSSM 4 /* Colored Border */ #define UI_EMBOSSM 4 /* Colored Border */
#define UI_EMBOSSP 5 /* Borderless coloured button */ #define UI_EMBOSSP 5 /* Borderless coloured button */
#define UI_EMBOSSA 6 /* same as EMBOSSX but with arrows to simulate */
/* uiBlock->direction */ /* uiBlock->direction */
#define UI_TOP 0 #define UI_TOP 0

View File

@@ -2500,6 +2500,44 @@ void do_info_file_optionsmenu(void *arg, int event)
// allqueue(REDRAWINFO, 0); // allqueue(REDRAWINFO, 0);
} }
//#ifdef NEW_WINDOW_TYPE_MENUS
static char *windowtype_pup(void)
{
static char string[1024];
strcpy(string, "Window type:%t"); //14
strcat(string, "|3D Viewport %x1"); //30
strcat(string, "|%l"); // 33
strcat(string, "|Ipo Curve Editor %x2"); //54
strcat(string, "|Action Editor %x12"); //73
strcat(string, "|Animation Mixer %x13"); //94
strcat(string, "|%l"); //97
strcat(string, "|UV/Image Editor %x6"); //117
strcat(string, "|Video Sequence Editor %x8"); //143
strcat(string, "|Audio Timeline %x11"); //163
strcat(string, "|Text Editor %x9"); //179
strcat(string, "|%l"); //192
strcat(string, "|User Preferences %x7"); //213
strcat(string, "|OOPS Schematic %x3"); //232
strcat(string, "|Buttons Window %x4"); //251
strcat(string, "|%l"); //254
strcat(string, "|Image Browser %x10");
strcat(string, "|File Browser %x5");
return (string);
}
static uiBlock *info_file_optionsmenu(void *arg_unused) static uiBlock *info_file_optionsmenu(void *arg_unused)
{ {
@@ -3456,7 +3494,7 @@ void info_buttons(void)
if (G.fileflags & G_AUTOPACK) { if (G.fileflags & G_AUTOPACK) {
uiBlockSetEmboss(block, UI_EMBOSSN); uiBlockSetEmboss(block, UI_EMBOSSN);
uiDefIconBut(block, LABEL, 0, ICON_PACKAGE, xco, 0, XIC, YIC, &G.fileflags, 0.0, 0.0, 0, 0, "This is a Packed file. See File menu."); uiDefIconBut(block, LABEL, 0, ICON_PACKAGE, xco, 0, XIC, YIC, &G.fileflags, 0.0, 0.0, 0, 0, "This is a Packed file. See File menu.");
xco += 24; xco += XIC;
uiBlockSetEmboss(block, UI_EMBOSSX); uiBlockSetEmboss(block, UI_EMBOSSX);
} }
@@ -3464,10 +3502,11 @@ void info_buttons(void)
if (curarea->full == 0) { if (curarea->full == 0) {
curarea->butspacetype= SPACE_INFO; curarea->butspacetype= SPACE_INFO;
uiDefIconButC(block, ICONROW,B_NEWSPACE, ICON_VIEW3D, 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Current window type "); uiDefIconTextButC(block, ICONTEXTROW,B_NEWSPACE, ICON_VIEW3D, windowtype_pup(), 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Current Window Type ");
/* STD SCREEN BUTTONS */ /* STD SCREEN BUTTONS */
xco+= XIC; // xco+= XIC;
xco+= 4;
xco= std_libbuttons(block, xco, 0, NULL, B_INFOSCR, (ID *)G.curscreen, 0, &G.curscreen->screennr, 1, 1, B_INFODELSCR, 0, 0); xco= std_libbuttons(block, xco, 0, NULL, B_INFOSCR, (ID *)G.curscreen, 0, &G.curscreen->screennr, 1, 1, B_INFODELSCR, 0, 0);
/* STD SCENE BUTTONS */ /* STD SCENE BUTTONS */
@@ -3562,7 +3601,8 @@ void seq_buttons()
uiBlockSetCol(block, BUTPURPLE); uiBlockSetCol(block, BUTPURPLE);
curarea->butspacetype= SPACE_SEQ; curarea->butspacetype= SPACE_SEQ;
uiDefIconButC(block, ICONROW,B_NEWSPACE, ICON_VIEW3D, 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Current window type ");
uiDefIconTextButC(block, ICONTEXTROW,B_NEWSPACE, ICON_VIEW3D, windowtype_pup(), 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Current Window Type ");
/* FULL WINDOW */ /* FULL WINDOW */
xco= 25; xco= 25;
@@ -3903,7 +3943,7 @@ void nla_buttons(void)
uiBlockSetCol(block, BUTCHOKE); uiBlockSetCol(block, BUTCHOKE);
curarea->butspacetype= SPACE_NLA; curarea->butspacetype= SPACE_NLA;
uiDefIconButC(block, ICONROW,B_NEWSPACE, ICON_VIEW3D, 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Current window type "); uiDefIconTextButC(block, ICONTEXTROW,B_NEWSPACE, ICON_VIEW3D, windowtype_pup(), 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Current Window Type ");
/* FULL WINDOW */ /* FULL WINDOW */
xco= 25; xco= 25;
@@ -3952,7 +3992,7 @@ void action_buttons(void)
uiBlockSetCol(block, BUTPINK); uiBlockSetCol(block, BUTPINK);
curarea->butspacetype= SPACE_ACTION; curarea->butspacetype= SPACE_ACTION;
uiDefIconButC(block, ICONROW,B_NEWSPACE, ICON_VIEW3D, 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Current window type"); uiDefIconTextButC(block, ICONTEXTROW,B_NEWSPACE, ICON_VIEW3D, windowtype_pup(), 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Current Window Type ");
/* FULL WINDOW */ /* FULL WINDOW */
xco= 25; xco= 25;
@@ -3997,8 +4037,8 @@ void view3d_buttons(void)
uiBlockSetCol(block, BUTBLUE); uiBlockSetCol(block, BUTBLUE);
curarea->butspacetype= SPACE_VIEW3D; curarea->butspacetype= SPACE_VIEW3D;
uiDefIconButC(block, ICONROW,B_NEWSPACE, ICON_VIEW3D, 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Current window type ");
uiDefIconTextButC(block, ICONTEXTROW,B_NEWSPACE, ICON_VIEW3D, windowtype_pup(), 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Current Window Type ");
/* FULL WINDOW */ /* FULL WINDOW */
xco= 25; xco= 25;
@@ -4272,7 +4312,8 @@ void ipo_buttons(void)
uiBlockSetCol(block, BUTSALMON); uiBlockSetCol(block, BUTSALMON);
curarea->butspacetype= SPACE_IPO; curarea->butspacetype= SPACE_IPO;
uiDefIconButC(block, ICONROW,B_NEWSPACE, ICON_VIEW3D, 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Current window type ");
uiDefIconTextButC(block, ICONTEXTROW,B_NEWSPACE, ICON_VIEW3D, windowtype_pup(), 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Current Window Type ");
test_editipo(); /* test if current editipo is OK, make_editipo sets v2d->cur */ test_editipo(); /* test if current editipo is OK, make_editipo sets v2d->cur */
@@ -4648,7 +4689,8 @@ void buts_buttons(void)
uiBlockSetCol(block, BUTGREY); uiBlockSetCol(block, BUTGREY);
curarea->butspacetype= SPACE_BUTS; curarea->butspacetype= SPACE_BUTS;
uiDefIconButC(block, ICONROW,B_NEWSPACE, ICON_VIEW3D, 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Current window type ");
uiDefIconTextButC(block, ICONTEXTROW,B_NEWSPACE, ICON_VIEW3D, windowtype_pup(), 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Current Window Type ");
/* FULL WINDOW */ /* FULL WINDOW */
xco= 25; xco= 25;
@@ -4887,7 +4929,7 @@ void file_buttons(void)
uiBlockSetCol(block, BUTGREY); uiBlockSetCol(block, BUTGREY);
curarea->butspacetype= SPACE_FILE; curarea->butspacetype= SPACE_FILE;
uiDefIconButC(block, ICONROW,B_NEWSPACE, ICON_VIEW3D, 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Current window type"); uiDefIconTextButC(block, ICONTEXTROW,B_NEWSPACE, ICON_VIEW3D, windowtype_pup(), 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Current Window Type ");
/* FULL WINDOW */ /* FULL WINDOW */
xco= 25; xco= 25;
@@ -5007,7 +5049,8 @@ void oops_buttons(void)
uiBlockSetCol(block, BUTGREEN); uiBlockSetCol(block, BUTGREEN);
curarea->butspacetype= SPACE_OOPS; curarea->butspacetype= SPACE_OOPS;
uiDefIconButC(block, ICONROW,B_NEWSPACE, ICON_VIEW3D, 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Current window type");
uiDefIconTextButC(block, ICONTEXTROW,B_NEWSPACE, ICON_VIEW3D, windowtype_pup(), 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Current Window Type ");
/* FULL WINDOW */ /* FULL WINDOW */
xco= 25; xco= 25;
@@ -5181,7 +5224,8 @@ void text_buttons(void)
uiBlockSetCol(block, BUTGREY); uiBlockSetCol(block, BUTGREY);
curarea->butspacetype= SPACE_TEXT; curarea->butspacetype= SPACE_TEXT;
uiDefIconButC(block, ICONROW,B_NEWSPACE, ICON_VIEW3D, 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Current window type");
uiDefIconTextButC(block, ICONTEXTROW,B_NEWSPACE, ICON_VIEW3D, windowtype_pup(), 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Current Window Type ");
/* FULL WINDOW */ /* FULL WINDOW */
xco= 25; xco= 25;
@@ -5437,7 +5481,8 @@ void sound_buttons(void)
uiBlockSetCol(block, BUTYELLOW); uiBlockSetCol(block, BUTYELLOW);
curarea->butspacetype= SPACE_SOUND; curarea->butspacetype= SPACE_SOUND;
uiDefIconButC(block, ICONROW,B_NEWSPACE, ICON_VIEW3D, 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Current window type");
uiDefIconTextButC(block, ICONTEXTROW,B_NEWSPACE, ICON_VIEW3D, windowtype_pup(), 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Current Window Type ");
/* FULL WINDOW */ /* FULL WINDOW */
xco= 25; xco= 25;
@@ -5759,7 +5804,8 @@ void image_buttons(void)
what_image(G.sima); what_image(G.sima);
curarea->butspacetype= SPACE_IMAGE; curarea->butspacetype= SPACE_IMAGE;
uiDefIconButC(block, ICONROW,B_NEWSPACE, ICON_VIEW3D, 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Current window type ");
uiDefIconTextButC(block, ICONTEXTROW,B_NEWSPACE, ICON_VIEW3D, windowtype_pup(), 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Current Window Type ");
/* FULL WINDOW */ /* FULL WINDOW */
xco= 25; xco= 25;
@@ -5877,7 +5923,8 @@ void imasel_buttons(void)
uiBlockSetCol(block, BUTBLUE); uiBlockSetCol(block, BUTBLUE);
curarea->butspacetype= SPACE_IMASEL; curarea->butspacetype= SPACE_IMASEL;
uiDefIconButC(block, ICONROW,B_NEWSPACE, ICON_VIEW3D, 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Current window type");
uiDefIconTextButC(block, ICONTEXTROW,B_NEWSPACE, ICON_VIEW3D, windowtype_pup(), 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Current Window Type ");
/* FULL WINDOW */ /* FULL WINDOW */
xco= 25; xco= 25;

View File

@@ -384,8 +384,27 @@ static void ui_endpupdraw(uiSaveUnder *su)
static void ui_draw_icon(uiBut *but, BIFIconID icon) static void ui_draw_icon(uiBut *but, BIFIconID icon)
{ {
float xs= (but->x1+but->x2- BIF_get_icon_width(icon))/2.0; float xs, ys;
float ys= (but->y1+but->y2- BIF_get_icon_height(icon))/2.0;
/* check for left aligned icons (in case of IconTextBut) */
if (but->type == ICONTEXTROW) {
xs= (but->x1+but->x2- BIF_get_icon_width(icon))/2.0;
ys= (but->y1+but->y2- BIF_get_icon_height(icon))/2.0;
}
else if(but->flag & UI_ICON_LEFT) {
if (but->type==BUTM) {
xs= but->x1+1.0;
}
else {
xs= but->x1+6.0;
}
ys= (but->y1+but->y2- BIF_get_icon_height(icon))/2.0;
}
else {
xs= (but->x1+but->x2- BIF_get_icon_width(icon))/2.0;
ys= (but->y1+but->y2- BIF_get_icon_height(icon))/2.0;
}
/* END check for left aligned icons (in case of IconTextBut) */
glRasterPos2f(xs, ys); glRasterPos2f(xs, ys);
@@ -482,6 +501,69 @@ static void ui_emboss_X(BIFColorID bc, float asp, float x1, float y1, float x2,
ui_draw_outlineX(x1, y1, x2, y2, asp); ui_draw_outlineX(x1, y1, x2, y2, asp);
} }
static void ui_emboss_A(BIFColorID bc, float asp, float x1, float y1, float x2, float y2, int flag)
{
short a;
/* paper */
if(flag & UI_SELECT) {
if(flag & UI_ACTIVE) BIF_set_color(bc, COLORSHADE_DARK);
else BIF_set_color(bc, COLORSHADE_GREY);
}
else {
if(flag & UI_ACTIVE) BIF_set_color(bc, COLORSHADE_HILITE);
else BIF_set_color(bc, COLORSHADE_MEDIUM);
}
glRectf(x1+1, y1+1, x2-1, y2-1);
x1+= asp;
x2-= asp;
y1+= asp;
y2-= asp;
/* below */
if(flag & UI_SELECT) BIF_set_color(bc, COLORSHADE_MEDIUM);
else BIF_set_color(bc, COLORSHADE_DARK);
fdrawline(x1, y1, x2, y1);
/* right */
fdrawline(x2, y1, x2, y2);
/* top */
if(flag & UI_SELECT) BIF_set_color(bc, COLORSHADE_DARK);
else BIF_set_color(bc, COLORSHADE_WHITE);
fdrawline(x1, y2, x2, y2);
/* left */
fdrawline(x1, y1, x1, y2);
/* outline */
glColor3ub(0,0,0);
ui_draw_outlineX(x1, y1, x2, y2, asp);
/* code to draw side arrows as in iconrow */
/* teken pijltjes, icon is standaard RGB */
a= (y1+y2)/2;
glColor3ub(0,0,0);
sdrawline((short)(x1-1), (short)(a-2), (short)(x1-1), (short)(a+2));
sdrawline((short)(x1-2), (short)(a-1), (short)(x1-2), (short)(a+1));
sdrawline((short)(x1-3), a, (short)(x1-3), a);
glColor3ub(255,255,255);
sdrawline((short)(x1-3), (short)(a-1), (short)(x1-1), (short)(a-3));
x2+=1;
glColor3ub(0,0,0);
sdrawline((short)(x2+1), (short)(a-2), (short)(x2+1), (short)(a+2));
sdrawline((short)(x2+2), (short)(a-1), (short)(x2+2), (short)(a+1));
sdrawline((short)(x2+3), a, (short)(x2+3), a);
glColor3ub(255,255,255);
sdrawline((short)(x2+3), (short)(a-1), (short)(x2+1), (short)(a-3));
}
void uiEmboss(float x1, float y1, float x2, float y2, int sel) void uiEmboss(float x1, float y1, float x2, float y2, int sel)
{ {
@@ -673,15 +755,30 @@ static void ui_draw_but_BUT(uiBut *but)
but->embossfunc(but->col, but->aspect, but->x1, but->y1, but->x2, but->y2, but->flag); but->embossfunc(but->col, but->aspect, but->x1, but->y1, but->x2, but->y2, but->flag);
if( but->flag & UI_HAS_ICON ) { /* check for button text label */
if (but->type == ICONTEXTROW) {
ui_draw_icon(but, (BIFIconID) (but->icon+but->iconadd)); ui_draw_icon(but, (BIFIconID) (but->icon+but->iconadd));
} }
else if(but->drawstr[0]!=0) { else if(but->drawstr[0]!=0) {
if(but->flag & UI_SELECT) glColor3ub(255,255,255);
else glColor3ub(0,0,0);
/* If there's an icon too (made with uiDefIconTextBut) then draw the icon
and offset the text label to accomodate it */
if ( (but->flag & UI_HAS_ICON) && (but->flag & UI_ICON_LEFT) ) {
ui_draw_icon(but, but->icon);
if(but->flag & UI_TEXT_LEFT) x= but->x1+24.0;
else x= (but->x1+but->x2-but->strwidth+1)/2.0;
}
else {
if(but->flag & UI_TEXT_LEFT) x= but->x1+4.0; if(but->flag & UI_TEXT_LEFT) x= but->x1+4.0;
else x= (but->x1+but->x2-but->strwidth+1)/2.0; else x= (but->x1+but->x2-but->strwidth+1)/2.0;
}
if(but->flag & UI_SELECT) {
glColor3ub(255,255,255);
} else {
glColor3ub(0,0,0);
}
glRasterPos2f( x, (but->y1+but->y2- 9.0)/2.0); glRasterPos2f( x, (but->y1+but->y2- 9.0)/2.0);
@@ -697,6 +794,10 @@ static void ui_draw_but_BUT(uiBut *but)
BMF_DrawString(but->font, but->drawstr+but->ofs); BMF_DrawString(but->font, but->drawstr+but->ofs);
#endif #endif
} }
/* if there's no text label, then check to see if there's an icon only and draw it */
else if( but->flag & UI_HAS_ICON ) {
ui_draw_icon(but, (BIFIconID) (but->icon+but->iconadd));
}
} }
static void ui_draw_but_TOG3(uiBut *but) static void ui_draw_but_TOG3(uiBut *but)
@@ -817,44 +918,55 @@ static void ui_draw_but_TEX(uiBut *but)
static void ui_draw_but_BUTM(uiBut *but) static void ui_draw_but_BUTM(uiBut *but)
{ {
float x; float x;
short len, opt; short len;
char *cpoin; char *cpoin;
but->embossfunc(but->col, but->aspect, but->x1, but->y1, but->x2, but->y2, but->flag); but->embossfunc(but->col, but->aspect, but->x1, but->y1, but->x2, but->y2, but->flag);
if( but->flag & UI_HAS_ICON ) { /* check for button text label */
ui_draw_icon(but, but->icon);
}
else {
if(but->drawstr[0]!=0) { if(but->drawstr[0]!=0) {
cpoin= strchr(but->drawstr, '|'); cpoin= strchr(but->drawstr, '|');
if(cpoin) *cpoin= 0; if(cpoin) *cpoin= 0;
if(but->embossfunc==ui_emboss_P) { if(but->embossfunc==ui_emboss_P) {
if(but->flag & UI_ACTIVE) { opt = 1; glColor3ub(255,255,255); } if(but->flag & UI_ACTIVE) glColor3ub(255,255,255);
else { opt = 0; glColor3ub(0,0,0); } else glColor3ub(0,0,0);
} else { }
opt = 0;glColor3ub(0,0,0); else {
glColor3ub(0,0,0);
} }
/* If there's an icon too (made with uiDefIconTextBut) then draw the icon
and offset the text label to accomodate it */
if ( (but->flag & UI_HAS_ICON) && (but->flag & UI_ICON_LEFT) ) {
ui_draw_icon(but, but->icon);
x= but->x1+24.0;
}
else {
x= but->x1+4.0; x= but->x1+4.0;
}
glRasterPos2f( x, (but->y1+but->y2- 9.0)/2.0); glRasterPos2f( x, (but->y1+but->y2- 9.0)/2.0);
#ifdef INTERNATIONAL #ifdef INTERNATIONAL
if(G.ui_international == TRUE) if(G.ui_international == TRUE) {
if(U.transopts & TR_BUTTONS) // BUTTON TEXTS if(U.transopts & TR_BUTTONS) { // BUTTON TEXTS
FTF_DrawString(but->drawstr, FTF_USE_GETTEXT | FTF_INPUT_UTF8, opt); FTF_DrawString(but->drawstr, FTF_USE_GETTEXT | FTF_INPUT_UTF8, but->flag & UI_ACTIVE);
else }
FTF_DrawString(but->drawstr, FTF_NO_TRANSCONV | FTF_INPUT_UTF8, opt); else {
else FTF_DrawString(but->drawstr, FTF_NO_TRANSCONV | FTF_INPUT_UTF8, but->flag & UI_ACTIVE);
}
}
else {
BMF_DrawString(but->font, but->drawstr); BMF_DrawString(but->font, but->drawstr);
}
#else #else
BMF_DrawString(but->font, but->drawstr); BMF_DrawString(but->font, but->drawstr);
#endif #endif
if(cpoin) { if(cpoin) {
#ifdef INTERNATIONAL #ifdef INTERNATIONAL
if(G.ui_international == TRUE) { if(G.ui_international == TRUE) {
if(U.transopts & TR_BUTTONS) { // BUTTON TEXTS if(U.transopts & TR_BUTTONS) { // BUTTON TEXTS
@@ -862,13 +974,15 @@ static void ui_draw_but_BUTM(uiBut *but)
glRasterPos2f( but->x2 - len*but->aspect-3, (but->y1+but->y2- 9.0)/2.0); glRasterPos2f( but->x2 - len*but->aspect-3, (but->y1+but->y2- 9.0)/2.0);
FTF_DrawString(cpoin+1, FTF_USE_GETTEXT | FTF_INPUT_UTF8, but->flag & UI_ACTIVE); FTF_DrawString(cpoin+1, FTF_USE_GETTEXT | FTF_INPUT_UTF8, but->flag & UI_ACTIVE);
*cpoin= '|'; *cpoin= '|';
} else { }
else {
len= FTF_GetStringWidth(cpoin+1, FTF_NO_TRANSCONV | FTF_INPUT_UTF8); len= FTF_GetStringWidth(cpoin+1, FTF_NO_TRANSCONV | FTF_INPUT_UTF8);
glRasterPos2f( but->x2 - len*but->aspect-3, (but->y1+but->y2- 9.0)/2.0); glRasterPos2f( but->x2 - len*but->aspect-3, (but->y1+but->y2- 9.0)/2.0);
FTF_DrawString(cpoin+1, FTF_NO_TRANSCONV | FTF_INPUT_UTF8, but->flag & UI_ACTIVE); FTF_DrawString(cpoin+1, FTF_NO_TRANSCONV | FTF_INPUT_UTF8, but->flag & UI_ACTIVE);
*cpoin= '|'; *cpoin= '|';
} }
} else { }
else {
len= BMF_GetStringWidth(but->font, cpoin+1); len= BMF_GetStringWidth(but->font, cpoin+1);
glRasterPos2f( but->x2 - len*but->aspect-3, (but->y1+but->y2- 9.0)/2.0); glRasterPos2f( but->x2 - len*but->aspect-3, (but->y1+but->y2- 9.0)/2.0);
BMF_DrawString(but->font, cpoin+1); BMF_DrawString(but->font, cpoin+1);
@@ -880,9 +994,11 @@ static void ui_draw_but_BUTM(uiBut *but)
BMF_DrawString(but->font, cpoin+1); BMF_DrawString(but->font, cpoin+1);
*cpoin= '|'; *cpoin= '|';
#endif #endif
} }
} }
/* if there's no text label, then check to see if there's an icon only and draw it */
else if( but->flag & UI_HAS_ICON ) {
ui_draw_icon(but, but->icon);
} }
} }
@@ -896,28 +1012,44 @@ static void ui_draw_but_LABEL(uiBut *but)
if(sel) glColor3ub(255,255,255); if(sel) glColor3ub(255,255,255);
else glColor3ub(0,0,0); else glColor3ub(0,0,0);
if( but->flag & UI_HAS_ICON ) { /* check for button text label */
ui_draw_icon(but, but->icon); if(but->drawstr[0]!=0) {
}
else if(but->drawstr[0]!=0) {
/* If there's an icon too (made with uiDefIconTextBut) then draw the icon
and offset the text label to accomodate it */
if ( (but->flag & UI_HAS_ICON) && (but->flag & UI_ICON_LEFT) ) {
ui_draw_icon(but, but->icon);
if(but->flag & UI_TEXT_LEFT) x= but->x1+24.0;
else x= (but->x1+but->x2-but->strwidth+1)/2.0;
}
else {
if(but->flag & UI_TEXT_LEFT) x= but->x1+4.0; if(but->flag & UI_TEXT_LEFT) x= but->x1+4.0;
else x= (but->x1+but->x2-but->strwidth+1)/2.0; else x= (but->x1+but->x2-but->strwidth+1)/2.0;
}
glRasterPos2f( x, (but->y1+but->y2- 9.0)/2.0); glRasterPos2f( x, (but->y1+but->y2- 9.0)/2.0);
#ifdef INTERNATIONAL #ifdef INTERNATIONAL
if(G.ui_international == TRUE) if(G.ui_international == TRUE) {
if(U.transopts & TR_BUTTONS) // BUTTON TEXTS if(U.transopts & TR_BUTTONS) { // BUTTON TEXTS
FTF_DrawString(but->drawstr+but->ofs, FTF_USE_GETTEXT | FTF_INPUT_UTF8, sel); FTF_DrawString(but->drawstr+but->ofs, FTF_USE_GETTEXT | FTF_INPUT_UTF8, sel);
else }
else {
FTF_DrawString(but->drawstr+but->ofs, FTF_NO_TRANSCONV | FTF_INPUT_UTF8, sel); FTF_DrawString(but->drawstr+but->ofs, FTF_NO_TRANSCONV | FTF_INPUT_UTF8, sel);
else }
}
else {
BMF_DrawString(but->font, but->drawstr+but->ofs); BMF_DrawString(but->font, but->drawstr+but->ofs);
}
#else #else
BMF_DrawString(but->font, but->drawstr+but->ofs); BMF_DrawString(but->font, but->drawstr+but->ofs);
#endif #endif
} }
/* if there's no text label, then check to see if there's an icon only and draw it */
else if( but->flag & UI_HAS_ICON ) {
ui_draw_icon(but, but->icon);
}
} }
static void ui_draw_but_SEPR(uiBut *but) static void ui_draw_but_SEPR(uiBut *but)
@@ -996,6 +1128,28 @@ static void ui_draw_but(uiBut *but)
break; break;
case ICONTEXTROW:
ui_draw_but_BUT(but);
/* teken pijltjes, icon is standaard RGB */
a= (but->y1+but->y2)/2;
glColor3ub(0,0,0);
sdrawline((short)(but->x1-1), (short)(a-2), (short)(but->x1-1), (short)(a+2));
sdrawline((short)(but->x1-2), (short)(a-1), (short)(but->x1-2), (short)(a+1));
sdrawline((short)(but->x1-3), a, (short)(but->x1-3), a);
glColor3ub(255,255,255);
sdrawline((short)(but->x1-3), (short)(a-1), (short)(but->x1-1), (short)(a-3));
glColor3ub(0,0,0);
sdrawline((short)(but->x2+1), (short)(a-2), (short)(but->x2+1), (short)(a+2));
sdrawline((short)(but->x2+2), (short)(a-1), (short)(but->x2+2), (short)(a+1));
sdrawline((short)(but->x2+3), a, (short)(but->x2+3), a);
glColor3ub(255,255,255);
sdrawline((short)(but->x2+3), (short)(a-1), (short)(but->x2+1), (short)(a-3));
break;
case MENU: case MENU:
ui_draw_but_BUT(but); ui_draw_but_BUT(but);
@@ -2324,6 +2478,104 @@ static int ui_do_but_ICONROW(uiBut *but)
return but->retval; return but->retval;
} }
static int ui_do_but_ICONTEXTROW(uiBut *but)
{
uiBlock *block;
ListBase listb={NULL, NULL};
int width, a, xmax, ypos;
int event;
MenuData *md;
but->flag |= UI_SELECT;
ui_draw_but(but);
block= uiNewBlock(&listb, "menu", UI_EMBOSSP, UI_HELV, but->win);
block->flag= UI_BLOCK_LOOP|UI_BLOCK_REDRAW|UI_BLOCK_NUMSELECT;
md= decompose_menu_string(but->str);
/* size and location */
/* expand menu width to fit labels */
#ifdef INTERNATIONAL
if(G.ui_international == TRUE) {
if(md->title)
if(U.transopts & TR_MENUS)
width= 2*strlen(md->title)+FTF_GetStringWidth(md->title, FTF_USE_GETTEXT | FTF_INPUT_UTF8);
else
width= 2*strlen(md->title)+FTF_GetStringWidth(md->title, FTF_NO_TRANSCONV | FTF_INPUT_UTF8);
else
width= 0;
} else {
if(md->title)
width= 2*strlen(md->title)+BMF_GetStringWidth(block->curfont, md->title);
else
width= 0;
}
#else
if(md->title)
width= 2*strlen(md->title)+BMF_GetStringWidth(block->curfont, md->title);
else
width= 0;
#endif
for(a=0; a<md->nitems; a++) {
#ifdef INTERNATIONAL
if(G.ui_international == TRUE)
if(U.transopts & TR_MENUS)
xmax= FTF_GetStringWidth(md->items[a].str, FTF_USE_GETTEXT | FTF_INPUT_UTF8);
else
xmax= FTF_GetStringWidth(md->items[a].str, FTF_NO_TRANSCONV | FTF_INPUT_UTF8);
else
xmax= BMF_GetStringWidth(block->curfont, md->items[a].str);
#else
xmax= BMF_GetStringWidth(block->curfont, md->items[a].str);
#endif
if(xmax>width) width= xmax;
}
width+= 30;
if (width<50) width=50;
ypos = 0;
/* loop through the menu options and draw them out with icons & text labels */
for(a=0; a<md->nitems; a++) {
/* add a space if there's a separator (%l) */
if (strcmp(md->items[a].str, "%l")==0) {
ypos +=3;
}
else {
uiDefIconTextBut(block, BUTM|but->pointype, but->retval, (short)(md->items[a].retval-but->min), md->items[a].str, 0, ypos,(short)width, 19, but->poin, (float) md->items[a].retval, 0.0, 0, 0, "");
ypos += 20;
}
}
block->direction= UI_TOP;
ui_positionblock(block, but);
/* the block is made with but-win, but is handled in mainwin space...
this is needs better implementation */
block->win= G.curscreen->mainwin;
uiBoundsBlock(block, 3);
uiDoBlocks(&listb, 0);
/* ready, restore stuff */
UIfrontbuf= 1;
menudata_free(md);
but->flag &= ~UI_SELECT;
ui_check_but(but);
ui_draw_but(but);
uibut_do_func(but);
return but->retval;
}
static int ui_do_but_IDPOIN(uiBut *but) static int ui_do_but_IDPOIN(uiBut *but)
{ {
char str[UI_MAX_DRAW_STR]; char str[UI_MAX_DRAW_STR];
@@ -2874,6 +3126,10 @@ static int ui_do_button(uiBlock *block, uiBut *but, uiEvent *uevent)
if(uevent->val) retval= ui_do_but_ICONROW(but); if(uevent->val) retval= ui_do_but_ICONROW(but);
break; break;
case ICONTEXTROW:
if(uevent->val) retval= ui_do_but_ICONTEXTROW(but);
break;
case IDPOIN: case IDPOIN:
if(uevent->val) retval= ui_do_but_IDPOIN(but); if(uevent->val) retval= ui_do_but_IDPOIN(but);
break; break;
@@ -3800,7 +4056,6 @@ static void ui_check_but(uiBut *but)
else else
but->strwidth= 0; but->strwidth= 0;
#endif #endif
/* automatic width */ /* automatic width */
if(but->x2==0.0) { if(but->x2==0.0) {
but->x2= (but->x1+but->strwidth+6); but->x2= (but->x1+but->strwidth+6);
@@ -3867,6 +4122,12 @@ static void ui_check_but(uiBut *but)
value= ui_get_but_val(but); value= ui_get_but_val(but);
but->iconadd= (int)value- (int)(but->min); but->iconadd= (int)value- (int)(but->min);
break; break;
case ICONTEXTROW:
value= ui_get_but_val(but);
ui_set_name_menu(but, (int)value);
but->iconadd= (int)value- (int)(but->min);
break;
} }
} }
@@ -3942,6 +4203,7 @@ static uiBut *ui_def_but(uiBlock *block, int type, int retval, char *str, short
else if(block->dt==UI_EMBOSSF) but->embossfunc= ui_emboss_F; else if(block->dt==UI_EMBOSSF) but->embossfunc= ui_emboss_F;
else if(block->dt==UI_EMBOSSM) but->embossfunc= ui_emboss_M; else if(block->dt==UI_EMBOSSM) but->embossfunc= ui_emboss_M;
else if(block->dt==UI_EMBOSSP) but->embossfunc= ui_emboss_P; else if(block->dt==UI_EMBOSSP) but->embossfunc= ui_emboss_P;
else if(block->dt==UI_EMBOSSA) but->embossfunc= ui_emboss_A;
else but->embossfunc= ui_emboss_N; else but->embossfunc= ui_emboss_N;
but->pos= -1; /* cursor invisible */ but->pos= -1; /* cursor invisible */
@@ -4017,6 +4279,39 @@ uiBut *uiDefIconButC(uiBlock *block, int type, int retval, int icon, short x1, s
return uiDefIconBut(block, type|CHA, retval, icon, x1, y1, x2, y2, (void*) poin, min, max, a1, a2, tip); return uiDefIconBut(block, type|CHA, retval, icon, x1, y1, x2, y2, (void*) poin, min, max, a1, a2, tip);
} }
/* Button containing both string label and icon */
uiBut *uiDefIconTextBut(uiBlock *block, int type, int retval, int icon, char *str, short x1, short y1, short x2, short y2, void *poin, float min, float max, float a1, float a2, char *tip)
{
uiBut *but= ui_def_but(block, type, retval, str, x1, y1, x2, y2, poin, min, max, a1, a2, tip);
but->icon= (BIFIconID) icon;
but->flag|= UI_HAS_ICON;
but->flag|= UI_ICON_LEFT;
ui_check_but(but);
return but;
}
uiBut *uiDefIconTextButF(uiBlock *block, int type, int retval, int icon, char *str, short x1, short y1, short x2, short y2, float *poin, float min, float max, float a1, float a2, char *tip)
{
return uiDefIconTextBut(block, type|FLO, retval, icon, str, x1, y1, x2, y2, (void*) poin, min, max, a1, a2, tip);
}
uiBut *uiDefIconTextButI(uiBlock *block, int type, int retval, int icon, char *str, short x1, short y1, short x2, short y2, int *poin, float min, float max, float a1, float a2, char *tip)
{
return uiDefIconTextBut(block, type|INT, retval, icon, str, x1, y1, x2, y2, (void*) poin, min, max, a1, a2, tip);
}
uiBut *uiDefIconTextButS(uiBlock *block, int type, int retval, int icon, char *str, short x1, short y1, short x2, short y2, short *poin, float min, float max, float a1, float a2, char *tip)
{
return uiDefIconTextBut(block, type|SHO, retval, icon, str, x1, y1, x2, y2, (void*) poin, min, max, a1, a2, tip);
}
uiBut *uiDefIconTextButC(uiBlock *block, int type, int retval, int icon, char *str, short x1, short y1, short x2, short y2, char *poin, float min, float max, float a1, float a2, char *tip)
{
return uiDefIconTextBut(block, type|CHA, retval, icon, str, x1, y1, x2, y2, (void*) poin, min, max, a1, a2, tip);
}
/* END Button containing both string label and icon */
void uiAutoBlock(uiBlock *block, float minx, float miny, float sizex, float sizey, int flag) void uiAutoBlock(uiBlock *block, float minx, float miny, float sizex, float sizey, int flag)
{ {
block->minx= minx; block->minx= minx;