Index: gui/components/gui_numberinput.cc =================================================================== --- gui/components/gui_numberinput.cc (リビジョン 3478) +++ gui/components/gui_numberinput.cc (作業コピー) @@ -132,10 +132,28 @@ return (wrapping && value==max_value) ? min_value : max_value; } + if(event_get_last_control_shift()==1) { + return clamp( value+1, min_value, max_value ); + } + switch( step_mode ) { // automatic linear case AUTOLINEAR: - return clamp( value+max(1,(max_value-min_value)/100), min_value, max_value ); + { + int n = 0; + int v = value; + while(abs(v)>=1000) { + v /= 10; + n++; + } + v=1; + while(n>0) { + v *= 10; + n--; + } + sint32 delta = event_get_last_control_shift()==2 ? v*10 : v; + return clamp( value+delta, min_value, max_value ); + } // power of 2 case POWER2: { @@ -160,7 +178,8 @@ } // default value is step size default: - return clamp( ((value+step_mode)/step_mode)*step_mode, min_value, max_value ); + sint32 delta = event_get_last_control_shift()==2 ? step_mode*10 : step_mode; + return clamp( ((value+delta)/step_mode)*step_mode, min_value, max_value ); } } @@ -173,10 +192,28 @@ return (wrapping && value==min_value) ? max_value : min_value; } + if(event_get_last_control_shift()==1) { + return clamp( value-1, min_value, max_value ); + } + switch( step_mode ) { // automatic linear case AUTOLINEAR: - return clamp( value-max(1,(uint32)(max_value-min_value)/100u), min_value, max_value ); + { + int n = 0; + int v = value; + while(abs(v)>=1000) { + v /= 10; + n++; + } + v=1; + while(n>0) { + v *= 10; + n--; + } + sint32 delta = event_get_last_control_shift()==2 ? v*10 : v; + return clamp( value-delta, min_value, max_value ); + } // power of 2 case POWER2: { @@ -201,7 +238,8 @@ } // default value is step size default: - return clamp( value-step_mode, min_value, max_value ); + sint32 delta = event_get_last_control_shift()==2 ? step_mode*10 : step_mode; + return clamp( value-delta, min_value, max_value ); } } @@ -275,7 +313,7 @@ case SIM_KEY_UP: case SIM_KEY_DOWN: // next/previous choice - new_value = (ev->ev_code==SIM_KEY_UP) ? get_prev_value() : get_next_value(); + new_value = (ev->ev_code==SIM_KEY_DOWN) ? get_prev_value() : get_next_value(); } if( call_textinp ) { event_t ev2 = *ev;