Made numbuts use non linear rate of change when dragging.

The further you drag the bigger the number gets (like gimp/photoshop brush size slider)
Works for ranges: float buttons bigger then 11 and int buttons bigger then 129.
This commit is contained in:
Campbell Barton
2006-01-24 22:07:41 +00:00
parent f0dae325c3
commit 7bb69869e0

View File

@@ -1987,7 +1987,7 @@ static int ui_do_but_NUM(uiBut *but)
{
double value;
float deler, fstart, f, tempf;
int lvalue, temp; /* , firsttime=1; */
int lvalue, temp, orig_x; /* , firsttime=1; */
short retval=0, qual, sx, mval[2], pos=0;
but->flag |= UI_SELECT;
@@ -1998,6 +1998,7 @@ static int ui_do_but_NUM(uiBut *but)
value= ui_get_but_val(but);
sx= mval[0];
orig_x = sx; /* Store so we can scale the rate of change by the dist the mouse is from its original xlocation */
fstart= (value - but->min)/(but->max-but->min);
f= fstart;
@@ -2013,21 +2014,30 @@ static int ui_do_but_NUM(uiBut *but)
while (get_mbut() & L_MOUSE) {
qual= get_qual();
uiGetMouse(mywinget(), mval);
deler= 500;
if( but->pointype!=FLO ) {
if( (but->max-but->min)<100 ) deler= 200.0;
if( (but->max-but->min)<25 ) deler= 50.0;
}
if(qual & LR_SHIFTKEY) deler*= 10.0;
if(qual & LR_ALTKEY) deler*= 20.0;
uiGetMouse(mywinget(), mval);
if(mval[0] != sx) {
f+= ((float)(mval[0]-sx))/deler;
if( but->pointype==FLO && but->max-but->min > 11) {
/* non linear change in mouse input- good for high precicsion */
f+= (((float)(mval[0]-sx))/deler) * (fabs(orig_x-mval[0])*0.002);
} else if ( but->pointype!=FLO && but->max-but->min > 129) { /* only scale large int buttons */
/* non linear change in mouse input- good for high precicsionm ints need less fine tuning */
f+= (((float)(mval[0]-sx))/deler) * (fabs(orig_x-mval[0])*0.004);
} else {
/*no scaling */
f+= ((float)(mval[0]-sx))/deler ;
}
if(f>1.0) f= 1.0;
if(f<0.0) f= 0.0;
sx= mval[0];