Allow Ctrl+Click for reset
This commit is contained in:
parent
ee9e3701f3
commit
2805272826
1 changed files with 19 additions and 8 deletions
|
@ -1,8 +1,8 @@
|
||||||
//! A slider that integrates with NIH-plug's [`Param`] types.
|
//! A slider that integrates with NIH-plug's [`Param`] types.
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
alignment, backend, event, layout, mouse, renderer, text, touch, Clipboard, Color, Element,
|
alignment, backend, event, keyboard, layout, mouse, renderer, text, touch, Clipboard, Color,
|
||||||
Event, Layout, Length, Point, Rectangle, Shell, Size, Widget,
|
Element, Event, Layout, Length, Point, Rectangle, Shell, Size, Widget,
|
||||||
};
|
};
|
||||||
use nih_plug::prelude::{GuiContext, Param, ParamSetter};
|
use nih_plug::prelude::{GuiContext, Param, ParamSetter};
|
||||||
|
|
||||||
|
@ -13,7 +13,6 @@ use super::ParamMessage;
|
||||||
///
|
///
|
||||||
/// TODO: There are currently no styling options at all
|
/// TODO: There are currently no styling options at all
|
||||||
/// TODO: Handle Shift+drag for granular drag
|
/// TODO: Handle Shift+drag for granular drag
|
||||||
/// TODO: Handle Ctrl+click for reset
|
|
||||||
/// TODO: Handle Double click for reset
|
/// TODO: Handle Double click for reset
|
||||||
/// TODO: Handle Alt+click for text entry
|
/// TODO: Handle Alt+click for text entry
|
||||||
pub struct ParamSlider<'a, P: Param, Renderer: text::Renderer> {
|
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)]
|
#[derive(Debug, Default)]
|
||||||
pub struct State {
|
pub struct State {
|
||||||
drag_active: bool,
|
drag_active: bool,
|
||||||
|
keyboard_modifiers: keyboard::Modifiers,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, P: Param, Renderer: text::Renderer> ParamSlider<'a, P, Renderer> {
|
impl<'a, P: Param, Renderer: text::Renderer> ParamSlider<'a, P, Renderer> {
|
||||||
|
@ -115,11 +115,19 @@ impl<'a, P: Param, Renderer: text::Renderer> Widget<ParamMessage, Renderer>
|
||||||
shell.publish(ParamMessage::BeginSetParameter(self.param.as_ptr()));
|
shell.publish(ParamMessage::BeginSetParameter(self.param.as_ptr()));
|
||||||
self.state.drag_active = true;
|
self.state.drag_active = true;
|
||||||
|
|
||||||
// Immediately trigger a parameter update if the value would be different
|
// Immediately trigger a parameter update if the value would be different, or
|
||||||
self.set_normalized_value(
|
// reset the parameter if Ctrl is held
|
||||||
shell,
|
if self.state.keyboard_modifiers.control() {
|
||||||
util::remap_rect_x_coordinate(&bounds, cursor_position.x),
|
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;
|
return event::Status::Captured;
|
||||||
}
|
}
|
||||||
|
@ -144,6 +152,9 @@ impl<'a, P: Param, Renderer: text::Renderer> Widget<ParamMessage, Renderer>
|
||||||
return event::Status::Captured;
|
return event::Status::Captured;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Event::Keyboard(keyboard::Event::ModifiersChanged(modifiers)) => {
|
||||||
|
self.state.keyboard_modifiers = modifiers;
|
||||||
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue