2.5: UI
* Text editing in buttons now hides the label, to give more space. * Tweak slider buttons text clipping, happened a bit too early. * Move editing text closer to the left, because the < > buttons are not visible then anyway.
This commit is contained in:
@@ -1887,10 +1887,8 @@ void ui_check_but(uiBut *but)
|
||||
}
|
||||
|
||||
/* if we are doing text editing, this will override the drawstr */
|
||||
if(but->editstr) {
|
||||
strcpy(but->drawstr, but->str);
|
||||
strcat(but->drawstr, but->editstr);
|
||||
}
|
||||
if(but->editstr)
|
||||
strcpy(but->drawstr, but->editstr);
|
||||
|
||||
/* text clipping moved to widget drawing code itself */
|
||||
}
|
||||
|
||||
@@ -1045,15 +1045,17 @@ static void ui_textedit_set_cursor_pos(uiBut *but, uiHandleButtonData *data, sho
|
||||
|
||||
/* XXX solve generic */
|
||||
if(but->type==NUM || but->type==NUMSLI)
|
||||
startx += 20;
|
||||
startx += (int)(0.5f*(but->y2 - but->y1));
|
||||
else if(but->type==TEX)
|
||||
startx += 5;
|
||||
|
||||
/* XXX does not take zoom level into account */
|
||||
while((BLF_width(origstr+but->ofs) + startx) > x) {
|
||||
if (but->pos <= 0) break;
|
||||
but->pos--;
|
||||
origstr[but->pos+but->ofs] = 0;
|
||||
}
|
||||
|
||||
but->pos -= strlen(but->str);
|
||||
but->pos += but->ofs;
|
||||
if(but->pos<0) but->pos= 0;
|
||||
|
||||
|
||||
@@ -749,7 +749,7 @@ static void ui_text_leftclip(uiFontStyle *fstyle, uiBut *but, rcti *rect)
|
||||
|
||||
/* textbut exception */
|
||||
if(but->editstr && but->pos != -1) {
|
||||
int pos= but->pos+strlen(but->str);
|
||||
int pos= but->pos+1;
|
||||
|
||||
if(pos-1 < but->ofs) {
|
||||
pos= but->ofs-pos+1;
|
||||
@@ -784,44 +784,46 @@ static void widget_draw_text(uiFontStyle *fstyle, uiWidgetColors *wcol, uiBut *b
|
||||
short selsta_tmp, selend_tmp, selsta_draw, selwidth_draw;
|
||||
|
||||
if ((but->selend - but->selsta) > 0) {
|
||||
/* XXX weak, why is this? (ton) */
|
||||
t= but->str[0]?1:-2;
|
||||
|
||||
/* text button selection */
|
||||
selsta_tmp = but->selsta + strlen(but->str);
|
||||
selend_tmp = but->selend + strlen(but->str);
|
||||
selsta_tmp = but->selsta;
|
||||
selend_tmp = but->selend;
|
||||
|
||||
if(but->drawstr[0]!=0) {
|
||||
ch= but->drawstr[selsta_tmp];
|
||||
but->drawstr[selsta_tmp]= 0;
|
||||
|
||||
selsta_draw = BLF_width(but->drawstr+but->ofs) + t;
|
||||
selsta_draw = BLF_width(but->drawstr+but->ofs);
|
||||
|
||||
but->drawstr[selsta_tmp]= ch;
|
||||
|
||||
ch= but->drawstr[selend_tmp];
|
||||
but->drawstr[selend_tmp]= 0;
|
||||
|
||||
selwidth_draw = BLF_width(but->drawstr+but->ofs) + t;
|
||||
selwidth_draw = BLF_width(but->drawstr+but->ofs);
|
||||
|
||||
but->drawstr[selend_tmp]= ch;
|
||||
|
||||
/* if at pos 0, leave a bit more to the left */
|
||||
t= (pos == 0)? 0: 1;
|
||||
|
||||
glColor3ubv((unsigned char*)wcol->item);
|
||||
glRects(rect->xmin+selsta_draw+1, rect->ymin+2, rect->xmin+selwidth_draw+1, rect->ymax-2);
|
||||
}
|
||||
} else {
|
||||
/* text cursor */
|
||||
pos= but->pos+strlen(but->str);
|
||||
pos= but->pos;
|
||||
if(pos >= but->ofs) {
|
||||
if(but->drawstr[0]!=0) {
|
||||
ch= but->drawstr[pos];
|
||||
but->drawstr[pos]= 0;
|
||||
|
||||
t= BLF_width(but->drawstr+but->ofs) + 1;
|
||||
t= BLF_width(but->drawstr+but->ofs);
|
||||
|
||||
but->drawstr[pos]= ch;
|
||||
}
|
||||
else t= 1;
|
||||
|
||||
/* if at pos 0, leave a bit more to the left */
|
||||
t += (pos == 0)? 0: 1;
|
||||
|
||||
glColor3ub(255,0,0);
|
||||
glRects(rect->xmin+t, rect->ymin+2, rect->xmin+t+2, rect->ymax-2);
|
||||
@@ -857,7 +859,7 @@ static void widget_draw_text_icon(uiFontStyle *fstyle, uiWidgetColors *wcol, uiB
|
||||
if(but==NULL) return;
|
||||
|
||||
/* cutting off from left part */
|
||||
if ELEM3(but->type, NUM, NUMABS, TEX) {
|
||||
if ELEM5(but->type, NUM, NUMABS, NUMSLI, SLI, TEX) {
|
||||
ui_text_leftclip(fstyle, but, rect);
|
||||
}
|
||||
else but->ofs= 0;
|
||||
@@ -889,7 +891,7 @@ static void widget_draw_text_icon(uiFontStyle *fstyle, uiWidgetColors *wcol, uiB
|
||||
if(but->editstr || (but->flag & UI_TEXT_LEFT))
|
||||
rect->xmin += 5;
|
||||
}
|
||||
else if(but->flag & UI_TEXT_LEFT)
|
||||
else if((but->flag & UI_TEXT_LEFT))
|
||||
rect->xmin += 5;
|
||||
|
||||
/* always draw text for textbutton cursor */
|
||||
@@ -1599,6 +1601,7 @@ static void widget_numbut(uiWidgetColors *wcol, rcti *rect, int state, int round
|
||||
{
|
||||
uiWidgetBase wtb;
|
||||
float rad= 0.5f*(rect->ymax - rect->ymin);
|
||||
int textoffs;
|
||||
|
||||
widget_init(&wtb);
|
||||
|
||||
@@ -1613,9 +1616,15 @@ static void widget_numbut(uiWidgetColors *wcol, rcti *rect, int state, int round
|
||||
widgetbase_draw(&wtb, wcol);
|
||||
|
||||
/* text space */
|
||||
rect->xmin += (rect->ymax-rect->ymin);
|
||||
rect->xmax -= (rect->ymax-rect->ymin);
|
||||
|
||||
if(!(state & UI_TEXTINPUT)) {
|
||||
rect->xmin += (rect->ymax-rect->ymin);
|
||||
rect->xmax -= (rect->ymax-rect->ymin);
|
||||
}
|
||||
else {
|
||||
textoffs= rad;
|
||||
rect->xmin += textoffs;
|
||||
rect->xmax -= textoffs;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1822,6 +1831,7 @@ static void widget_numslider(uiBut *but, uiWidgetColors *wcol, rcti *rect, int s
|
||||
rcti rect1;
|
||||
double value;
|
||||
float offs, fac;
|
||||
int textoffs;
|
||||
char outline[3];
|
||||
|
||||
widget_init(&wtb);
|
||||
@@ -1831,6 +1841,7 @@ static void widget_numslider(uiBut *but, uiWidgetColors *wcol, rcti *rect, int s
|
||||
|
||||
/* fully rounded */
|
||||
offs= 0.5f*(rect->ymax - rect->ymin);
|
||||
textoffs= offs;
|
||||
round_box_edges(&wtb, roundboxalign, rect, offs);
|
||||
|
||||
wtb.outline= 0;
|
||||
@@ -1872,9 +1883,8 @@ static void widget_numslider(uiBut *but, uiWidgetColors *wcol, rcti *rect, int s
|
||||
widgetbase_draw(&wtb, wcol);
|
||||
|
||||
/* text space */
|
||||
rect->xmin += (rect->ymax-rect->ymin);
|
||||
rect->xmax -= (rect->ymax-rect->ymin);
|
||||
|
||||
rect->xmin += textoffs;
|
||||
rect->xmax -= textoffs;
|
||||
}
|
||||
|
||||
static void widget_swatch(uiBut *but, uiWidgetColors *wcol, rcti *rect, int state, int roundboxalign)
|
||||
|
||||
Reference in New Issue
Block a user