diff --git a/nih_plug_egui/src/widgets/param_slider.rs b/nih_plug_egui/src/widgets/param_slider.rs index 3abd09e7..9aa8cf32 100644 --- a/nih_plug_egui/src/widgets/param_slider.rs +++ b/nih_plug_egui/src/widgets/param_slider.rs @@ -84,7 +84,7 @@ impl<'a, P: Param> ParamSlider<'a, P> { ui.memory() .data .get_temp(*DRAG_NORMALIZED_START_VALUE_MEMORY_ID) - .unwrap_or(0.0) + .unwrap_or(0.5) } fn set_drag_normalized_start_value_memory(ui: &Ui, amount: f32) { @@ -103,38 +103,11 @@ impl<'a, P: Param> ParamSlider<'a, P> { fn set_drag_amount_memory(ui: &Ui, amount: f32) { ui.memory().data.insert_temp(*DRAG_AMOUNT_MEMORY_ID, amount); } -} - -impl<P: Param> Widget for ParamSlider<'_, P> { - fn ui(self, ui: &mut Ui) -> Response { - // Allocate space, but add some padding on the top and bottom to make it look a bit slimmer. - let height = ui - .fonts() - .row_height(TextStyle::Body) - .max(ui.spacing().interact_size.y); - let slider_height = ui.painter().round_to_pixel(height * 0.65); - let response = ui - .vertical(|ui| { - ui.allocate_space(vec2( - ui.spacing().slider_width, - (height - slider_height) / 2.0, - )); - let response = ui.allocate_response( - vec2(ui.spacing().slider_width, slider_height), - Sense::click_and_drag(), - ); - ui.allocate_space(vec2( - ui.spacing().slider_width, - (height - slider_height) / 2.0, - )); - response - }) - .inner; + fn slider_ui(&self, ui: &Ui, response: &Response) { // Handle user input // TODO: Optionally (since it can be annoying) add scrolling behind a builder option // TODO: Optionally add alt+click for value entry? - // TODO: Handle shift+drag being more granular if response.drag_started() { // When beginning a drag or dragging normally, reset the memory used to keep track of // our granular drag @@ -186,9 +159,38 @@ impl<P: Param> Widget for ParamSlider<'_, P> { 0.0, Stroke::new(1.0, ui.visuals().widgets.active.bg_fill), ); - - // TODO: Render the text } + } +} + +impl<P: Param> Widget for ParamSlider<'_, P> { + fn ui(self, ui: &mut Ui) -> Response { + // Allocate space, but add some padding on the top and bottom to make it look a bit slimmer. + let height = ui + .fonts() + .row_height(TextStyle::Body) + .max(ui.spacing().interact_size.y); + let slider_height = ui.painter().round_to_pixel(height * 0.65); + let response = ui + .vertical(|ui| { + ui.allocate_space(vec2( + ui.spacing().slider_width, + (height - slider_height) / 2.0, + )); + let response = ui.allocate_response( + vec2(ui.spacing().slider_width, slider_height), + Sense::click_and_drag(), + ); + ui.allocate_space(vec2( + ui.spacing().slider_width, + (height - slider_height) / 2.0, + )); + response + }) + .inner; + + // TODO: Render the text + self.slider_ui(ui, &response); response }