diff options
| author | 2019-11-21 13:47:20 +0100 | |
|---|---|---|
| committer | 2019-11-21 13:47:20 +0100 | |
| commit | 65eb218d3d7ba52b2869a586a1480eeb3c8f84e4 (patch) | |
| tree | 644f27f40f2f4b8ee1abe7743aac426297503eea /web/src/widget/slider.rs | |
| parent | d3553adf278e5b616fbd885f321faa83a4d24b56 (diff) | |
| download | iced-65eb218d3d7ba52b2869a586a1480eeb3c8f84e4.tar.gz iced-65eb218d3d7ba52b2869a586a1480eeb3c8f84e4.tar.bz2 iced-65eb218d3d7ba52b2869a586a1480eeb3c8f84e4.zip | |
Move widgets from `core` to `native` and `web`
Also made fields private and improved `Renderer` traits.
Diffstat (limited to '')
| -rw-r--r-- | web/src/widget/slider.rs | 59 | 
1 files changed, 57 insertions, 2 deletions
| diff --git a/web/src/widget/slider.rs b/web/src/widget/slider.rs index 54b2fdf6..acdef0a1 100644 --- a/web/src/widget/slider.rs +++ b/web/src/widget/slider.rs @@ -1,8 +1,55 @@ -use crate::{Bus, Element, Widget}; +use crate::{Bus, Element, Length, Widget};  use dodrio::bumpalo; +use std::{ops::RangeInclusive, rc::Rc}; -pub use iced_core::slider::*; +pub struct Slider<'a, Message> { +    _state: &'a mut State, +    range: RangeInclusive<f32>, +    value: f32, +    on_change: Rc<Box<dyn Fn(f32) -> Message>>, +    width: Length, +} + +impl<'a, Message> Slider<'a, Message> { +    /// Creates a new [`Slider`]. +    /// +    /// It expects: +    ///   * the local [`State`] of the [`Slider`] +    ///   * an inclusive range of possible values +    ///   * the current value of the [`Slider`] +    ///   * a function that will be called when the [`Slider`] is dragged. +    ///   It receives the new value of the [`Slider`] and must produce a +    ///   `Message`. +    /// +    /// [`Slider`]: struct.Slider.html +    /// [`State`]: struct.State.html +    pub fn new<F>( +        state: &'a mut State, +        range: RangeInclusive<f32>, +        value: f32, +        on_change: F, +    ) -> Self +    where +        F: 'static + Fn(f32) -> Message, +    { +        Slider { +            _state: state, +            value: value.max(*range.start()).min(*range.end()), +            range, +            on_change: Rc::new(Box::new(on_change)), +            width: Length::Fill, +        } +    } + +    /// Sets the width of the [`Slider`]. +    /// +    /// [`Slider`]: struct.Slider.html +    pub fn width(mut self, width: Length) -> Self { +        self.width = width; +        self +    } +}  impl<'a, Message> Widget<Message> for Slider<'a, Message>  where @@ -60,3 +107,11 @@ where          Element::new(slider)      }  } + +pub struct State; + +impl State { +    pub fn new() -> Self { +        Self +    } +} | 
