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.
|
/// Resets one slider to its default value on double-click.
|
||||||
fn attach_scale_reset_gesture(scale: >k::Scale, default_value: f64) {
|
fn attach_scale_reset_gesture(scale: >k::Scale, default_value: f64) {
|
||||||
let gesture = gtk::GestureClick::new();
|
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();
|
let scale_for_click = scale.clone();
|
||||||
gesture.connect_released(move |_, n_press, _, _| {
|
gesture.connect_pressed(move |_, n_press, _, _| {
|
||||||
if n_press == 2 && (scale_for_click.value() - default_value).abs() > f64::EPSILON {
|
if should_reset_scale_on_double_click(n_press, scale_for_click.value(), default_value) {
|
||||||
scale_for_click.set_value(default_value);
|
scale_for_click.set_value(default_value);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
scale.add_controller(gesture);
|
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