Fix: Number input on slider #111269

Merged
Christoph Lendenfeld merged 1 commits from ChrisLend/blender:fix_slider_num_input into main 2023-08-18 17:29:48 +02:00
3 changed files with 14 additions and 10 deletions

View File

@ -97,6 +97,7 @@ bool ED_slider_allow_increments_get(tSlider *slider);
void ED_slider_allow_increments_set(tSlider *slider, bool value);
void ED_slider_mode_set(tSlider *slider, SliderMode unit);
SliderMode ED_slider_mode_get(tSlider *slider);
void ED_slider_unit_set(tSlider *slider, const char *unit);
/* ************** XXX OLD CRUFT WARNING ************* */

View File

@ -330,17 +330,15 @@ static int graph_slider_modal(bContext *C, wmOperator *op, const wmEvent *event)
default: {
if ((event->val == KM_PRESS) && handleNumInput(C, &gso->num, event)) {
float value;
float percentage = RNA_property_float_get(op->ptr, gso->factor_prop);
/* Grab percentage from numeric input, and store this new value for redo
* NOTE: users see ints, while internally we use a 0-1 float.
*/
value = percentage * 100.0f;
applyNumInput(&gso->num, &value);
percentage = value / 100.0f;
ED_slider_factor_set(gso->slider, percentage);
RNA_property_float_set(op->ptr, gso->factor_prop, percentage);
/* Grab percentage from numeric input, and store this new value for redo
* NOTE: users see ints, while internally we use a 0-1 float. */
if (ED_slider_mode_get(gso->slider) == SLIDER_MODE_PERCENT) {
value = value / 100.0f;
}
ED_slider_factor_set(gso->slider, value);
RNA_property_float_set(op->ptr, gso->factor_prop, value);
gso->modal_update(C, op);
break;

View File

@ -543,7 +543,7 @@ void ED_slider_factor_set(tSlider *slider, const float factor)
slider->raw_factor = factor;
slider->factor = factor;
if (!slider->overshoot) {
slider->factor = clamp_f(slider->factor, 0, 1);
slider->factor = clamp_f(slider->factor, slider->factor_bounds[0], slider->factor_bounds[1]);
}
}
@ -576,6 +576,11 @@ void ED_slider_mode_set(tSlider *slider, SliderMode mode)
slider->slider_mode = mode;
}
SliderMode ED_slider_mode_get(tSlider *slider)
{
return slider->slider_mode;
}
void ED_slider_unit_set(tSlider *slider, const char *unit)
{
STRNCPY(slider->unit_string, unit);