From 28052728266e6446eac4e5b354f464e04140b322 Mon Sep 17 00:00:00 2001 From: Robbert van der Helm Date: Mon, 14 Mar 2022 14:22:33 +0100 Subject: [PATCH] Allow Ctrl+Click for reset --- nih_plug_iced/src/widgets/param_slider.rs | 27 ++++++++++++++++------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/nih_plug_iced/src/widgets/param_slider.rs b/nih_plug_iced/src/widgets/param_slider.rs index 0f774b10..497943ee 100644 --- a/nih_plug_iced/src/widgets/param_slider.rs +++ b/nih_plug_iced/src/widgets/param_slider.rs @@ -1,8 +1,8 @@ //! A slider that integrates with NIH-plug's [`Param`] types. use crate::{ - alignment, backend, event, layout, mouse, renderer, text, touch, Clipboard, Color, Element, - Event, Layout, Length, Point, Rectangle, Shell, Size, Widget, + alignment, backend, event, keyboard, layout, mouse, renderer, text, touch, Clipboard, Color, + Element, Event, Layout, Length, Point, Rectangle, Shell, Size, Widget, }; use nih_plug::prelude::{GuiContext, Param, ParamSetter}; @@ -13,7 +13,6 @@ use super::ParamMessage; /// /// TODO: There are currently no styling options at all /// TODO: Handle Shift+drag for granular drag -/// TODO: Handle Ctrl+click for reset /// TODO: Handle Double click for reset /// TODO: Handle Alt+click for text entry pub struct ParamSlider<'a, P: Param, Renderer: text::Renderer> { @@ -34,6 +33,7 @@ pub struct ParamSlider<'a, P: Param, Renderer: text::Renderer> { #[derive(Debug, Default)] pub struct State { drag_active: bool, + keyboard_modifiers: keyboard::Modifiers, } impl<'a, P: Param, Renderer: text::Renderer> ParamSlider<'a, P, Renderer> { @@ -115,11 +115,19 @@ impl<'a, P: Param, Renderer: text::Renderer> Widget shell.publish(ParamMessage::BeginSetParameter(self.param.as_ptr())); self.state.drag_active = true; - // Immediately trigger a parameter update if the value would be different - self.set_normalized_value( - shell, - util::remap_rect_x_coordinate(&bounds, cursor_position.x), - ); + // Immediately trigger a parameter update if the value would be different, or + // reset the parameter if Ctrl is held + if self.state.keyboard_modifiers.control() { + self.set_normalized_value( + shell, + self.setter.default_normalized_param_value(self.param), + ); + } else { + self.set_normalized_value( + shell, + util::remap_rect_x_coordinate(&bounds, cursor_position.x), + ); + } return event::Status::Captured; } @@ -144,6 +152,9 @@ impl<'a, P: Param, Renderer: text::Renderer> Widget return event::Status::Captured; } } + Event::Keyboard(keyboard::Event::ModifiersChanged(modifiers)) => { + self.state.keyboard_modifiers = modifiers; + } _ => {} }