Merge pull request #6 from maor1993/master

added support for double click reset to a known value
This commit is contained in:
2026-01-12 09:09:02 +03:00
committed by GitHub
3 changed files with 15 additions and 3 deletions

View File

@@ -87,7 +87,8 @@ impl eframe::App for KnobDemo {
.with_background_arc(self.show_bg_arc)
.with_show_filled_segments(self.show_filled)
.with_colors(self.knob_color, self.line_color, self.text_color)
.with_step(self.use_step.then_some(0.02));
.with_step(self.use_step.then_some(0.02))
.with_double_click_reset(0.5);
if *label == "Wiper, Sweep" {
knob = knob.with_sweep_range(0.25, 0.75).with_size(50.0);

View File

@@ -16,6 +16,7 @@ pub struct KnobConfig {
pub(crate) show_filled_segments: bool,
pub(crate) min_angle: f32,
pub(crate) max_angle: f32,
pub(crate) reset_value: Option<f32>,
}
impl KnobConfig {
@@ -36,6 +37,7 @@ impl KnobConfig {
drag_sensitivity: 0.005,
show_background_arc: true,
show_filled_segments: true,
reset_value: None,
}
}
}

View File

@@ -156,6 +156,11 @@ impl<'a> Knob<'a> {
self
}
/// Sets a reset value to return to on doubleclick event.
pub fn with_double_click_reset(mut self, reset_value: f32) -> Self {
self.config.reset_value = Some(reset_value);
self
}
}
impl Widget for Knob<'_> {
@@ -168,7 +173,7 @@ impl Widget for Knob<'_> {
let renderer = KnobRenderer::new(&self.config, current_value, self.min, self.max);
let adjusted_size = renderer.calculate_size(ui);
let (rect, response) = ui.allocate_exact_size(adjusted_size, Sense::drag());
let (rect, response) = ui.allocate_exact_size(adjusted_size, Sense::click_and_drag());
let mut response = response;
if response.dragged() {
@@ -189,6 +194,10 @@ impl Widget for Knob<'_> {
}
response.mark_changed();
} else if response.double_clicked() {
if let Some(reset_value) = self.config.reset_value {
*self.value = reset_value
}
}
let knob_rect = renderer.calculate_knob_rect(rect);