From e2524a2d8133e7aa96d7bab6338661abf366b275 Mon Sep 17 00:00:00 2001 From: Robbert van der Helm Date: Wed, 9 Feb 2022 11:18:38 +0100 Subject: [PATCH] Handle stepped non-float parameters The widget now snaps to the correct range. This would always be displayed this way internally, but now we also won't tell the host about the invalid values. --- nih_plug_egui/src/widgets/param_slider.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/nih_plug_egui/src/widgets/param_slider.rs b/nih_plug_egui/src/widgets/param_slider.rs index adc943e5..a173b84f 100644 --- a/nih_plug_egui/src/widgets/param_slider.rs +++ b/nih_plug_egui/src/widgets/param_slider.rs @@ -26,7 +26,14 @@ impl<'a, P: Param> ParamSlider<'a, P> { fn set_normalized_value(&self, normalized: f32) { // TODO: The gesture should start on mouse down and end up mouse up self.setter.begin_set_parameter(self.param); - self.setter.set_parameter_normalized(self.param, normalized); + + // This snaps to the nearest plain value if the parameter is stepped in some wayA + // TODO: As an optimization, we could add a `const CONTINUOUS: bool` to the parameter to + // avoid this normalized->plain->normalized conversion for parameters that don't need + // it + let value = self.param.preview_plain(normalized); + self.setter.set_parameter(self.param, value); + self.setter.end_set_parameter(self.param); } }