fix(ui): restore slider double-click reset
This commit is contained in:
parent
ca10c667f5
commit
0e00772952
@ -1588,12 +1588,34 @@ fn stabilize_button(button: >k::Button, width: i32) {
|
||||
/// Resets one slider to its default value on double-click.
|
||||
fn attach_scale_reset_gesture(scale: >k::Scale, default_value: f64) {
|
||||
let gesture = gtk::GestureClick::new();
|
||||
gesture.set_button(0);
|
||||
gesture.set_button(1);
|
||||
gesture.set_propagation_phase(gtk::PropagationPhase::Capture);
|
||||
let scale_for_click = scale.clone();
|
||||
gesture.connect_released(move |_, n_press, _, _| {
|
||||
if n_press == 2 && (scale_for_click.value() - default_value).abs() > f64::EPSILON {
|
||||
gesture.connect_pressed(move |_, n_press, _, _| {
|
||||
if should_reset_scale_on_double_click(n_press, scale_for_click.value(), default_value) {
|
||||
scale_for_click.set_value(default_value);
|
||||
}
|
||||
});
|
||||
scale.add_controller(gesture);
|
||||
}
|
||||
|
||||
fn should_reset_scale_on_double_click(
|
||||
n_press: i32,
|
||||
current_value: f64,
|
||||
default_value: f64,
|
||||
) -> bool {
|
||||
n_press == 2 && (current_value - default_value).abs() > f64::EPSILON
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::should_reset_scale_on_double_click;
|
||||
|
||||
#[test]
|
||||
fn scale_reset_helper_requires_a_true_double_click_and_a_real_change() {
|
||||
assert!(!should_reset_scale_on_double_click(1, 350.0, 200.0));
|
||||
assert!(!should_reset_scale_on_double_click(2, 200.0, 200.0));
|
||||
assert!(should_reset_scale_on_double_click(2, 350.0, 200.0));
|
||||
assert!(should_reset_scale_on_double_click(2, 75.0, 100.0));
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user