Add a ParamSlider style that overlays all options
This commit is contained in:
parent
c3134fb5ef
commit
c5d4671f06
|
@ -47,7 +47,9 @@ pub enum ParamSliderStyle {
|
||||||
/// Show the current step instead of filling a portion fothe bar, useful for discrete
|
/// Show the current step instead of filling a portion fothe bar, useful for discrete
|
||||||
/// parameters.
|
/// parameters.
|
||||||
CurrentStep,
|
CurrentStep,
|
||||||
// TODO: A CurrentStepWithLabel that overlays the label over the step
|
/// The same as `CurrentStep`, but overlay the labels over the steps instead of showing the
|
||||||
|
/// active value. Only useful for discrete parameters with two, maybe three possible values.
|
||||||
|
CurrentStepLabeled,
|
||||||
}
|
}
|
||||||
|
|
||||||
enum ParamSliderEvent {
|
enum ParamSliderEvent {
|
||||||
|
@ -150,6 +152,12 @@ impl ParamSlider {
|
||||||
move |cx, text_input_active| {
|
move |cx, text_input_active| {
|
||||||
let param_display_value_lens =
|
let param_display_value_lens =
|
||||||
params.map(move |params| params_to_param(params).to_string());
|
params.map(move |params| params_to_param(params).to_string());
|
||||||
|
let param_preview_display_value_lens = |normalized_value| {
|
||||||
|
params.map(move |params| {
|
||||||
|
params_to_param(params)
|
||||||
|
.normalized_value_to_string(normalized_value, true)
|
||||||
|
})
|
||||||
|
};
|
||||||
let normalized_param_value_lens =
|
let normalized_param_value_lens =
|
||||||
params.map(move |params| params_to_param(params).normalized_value());
|
params.map(move |params| params_to_param(params).normalized_value());
|
||||||
|
|
||||||
|
@ -189,7 +197,8 @@ impl ParamSlider {
|
||||||
}
|
}
|
||||||
ParamSliderStyle::Centered
|
ParamSliderStyle::Centered
|
||||||
| ParamSliderStyle::FromLeft => (0.0, current_value),
|
| ParamSliderStyle::FromLeft => (0.0, current_value),
|
||||||
ParamSliderStyle::CurrentStep => {
|
ParamSliderStyle::CurrentStep
|
||||||
|
| ParamSliderStyle::CurrentStepLabeled => {
|
||||||
let previous_step = unsafe {
|
let previous_step = unsafe {
|
||||||
param_ptr
|
param_ptr
|
||||||
.previous_normalized_step(current_value)
|
.previous_normalized_step(current_value)
|
||||||
|
@ -212,11 +221,42 @@ impl ParamSlider {
|
||||||
// not affect that
|
// not affect that
|
||||||
.hoverable(false);
|
.hoverable(false);
|
||||||
|
|
||||||
Label::new(cx, param_display_value_lens)
|
// Either display the current value, or display all values over the
|
||||||
.class("value")
|
// parameter's steps
|
||||||
.height(Stretch(1.0))
|
match (style, step_count) {
|
||||||
.width(Stretch(1.0))
|
(ParamSliderStyle::CurrentStepLabeled, Some(step_count)) => {
|
||||||
.hoverable(false);
|
HStack::new(cx, |cx| {
|
||||||
|
// There are step_count + 1 possible values for a
|
||||||
|
// discrete parameter
|
||||||
|
for value in 0..step_count + 1 {
|
||||||
|
let normalized_value =
|
||||||
|
value as f32 / step_count as f32;
|
||||||
|
Label::new(
|
||||||
|
cx,
|
||||||
|
param_preview_display_value_lens(
|
||||||
|
normalized_value,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
.class("value")
|
||||||
|
.class("value--multiple")
|
||||||
|
.height(Stretch(1.0))
|
||||||
|
.width(Stretch(1.0))
|
||||||
|
.hoverable(false);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.height(Stretch(1.0))
|
||||||
|
.width(Stretch(1.0))
|
||||||
|
.hoverable(false);
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
Label::new(cx, param_display_value_lens)
|
||||||
|
.class("value")
|
||||||
|
.class("value--single")
|
||||||
|
.height(Stretch(1.0))
|
||||||
|
.width(Stretch(1.0))
|
||||||
|
.hoverable(false);
|
||||||
|
}
|
||||||
|
};
|
||||||
})
|
})
|
||||||
.hoverable(false);
|
.hoverable(false);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue