summaryrefslogtreecommitdiffstats
path: root/native/src/widget/slider.rs
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-06-08 18:33:36 +0200
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-06-08 18:33:36 +0200
commit8493ccec7fd4639aef9e02ad3519a7a3707cd488 (patch)
tree528fc7245a21fc5f362cca2bec609e8e9aaed4fb /native/src/widget/slider.rs
parent4dc5bffdfbfb09a017f35c12b484301fcf044876 (diff)
parentdcc4bb77e942f8550b0d7ee08fa5a2882fd22ecd (diff)
downloadiced-8493ccec7fd4639aef9e02ad3519a7a3707cd488.tar.gz
iced-8493ccec7fd4639aef9e02ad3519a7a3707cd488.tar.bz2
iced-8493ccec7fd4639aef9e02ad3519a7a3707cd488.zip
Merge branch 'intuitive-pane-grid-resize' into feature/pane-grid-titlebar
Diffstat (limited to 'native/src/widget/slider.rs')
-rw-r--r--native/src/widget/slider.rs25
1 files changed, 23 insertions, 2 deletions
diff --git a/native/src/widget/slider.rs b/native/src/widget/slider.rs
index 8cdfc3de..753a49fe 100644
--- a/native/src/widget/slider.rs
+++ b/native/src/widget/slider.rs
@@ -40,6 +40,7 @@ pub struct Slider<'a, Message, Renderer: self::Renderer> {
range: RangeInclusive<f32>,
value: f32,
on_change: Box<dyn Fn(f32) -> Message>,
+ on_release: Option<Message>,
width: Length,
style: Renderer::Style,
}
@@ -71,11 +72,25 @@ impl<'a, Message, Renderer: self::Renderer> Slider<'a, Message, Renderer> {
value: value.max(*range.start()).min(*range.end()),
range,
on_change: Box::new(on_change),
+ on_release: None,
width: Length::Fill,
style: Renderer::Style::default(),
}
}
+ /// Sets the release message of the [`Slider`].
+ /// This is called when the mouse is released from the slider.
+ ///
+ /// Typically, the user's interaction with the slider is finished when this message is produced.
+ /// This is useful if you need to spawn a long-running task from the slider's result, where
+ /// the default on_change message could create too many events.
+ ///
+ /// [`Slider`]: struct.Slider.html
+ pub fn on_release(mut self, on_release: Message) -> Self {
+ self.on_release = Some(on_release);
+ self
+ }
+
/// Sets the width of the [`Slider`].
///
/// [`Slider`]: struct.Slider.html
@@ -114,6 +129,7 @@ impl<'a, Message, Renderer> Widget<Message, Renderer>
for Slider<'a, Message, Renderer>
where
Renderer: self::Renderer,
+ Message: Clone,
{
fn width(&self) -> Length {
self.width
@@ -171,7 +187,12 @@ where
}
}
mouse::Event::ButtonReleased(mouse::Button::Left) => {
- self.state.is_dragging = false;
+ if self.state.is_dragging {
+ if let Some(on_release) = self.on_release.clone() {
+ messages.push(on_release);
+ }
+ self.state.is_dragging = false;
+ }
}
mouse::Event::CursorMoved { .. } => {
if self.state.is_dragging {
@@ -252,7 +273,7 @@ impl<'a, Message, Renderer> From<Slider<'a, Message, Renderer>>
for Element<'a, Message, Renderer>
where
Renderer: 'a + self::Renderer,
- Message: 'a,
+ Message: 'a + Clone,
{
fn from(
slider: Slider<'a, Message, Renderer>,