Use closures for ProgressBar::style
This commit is contained in:
parent
fd7a23ca47
commit
7a5f5b0be7
2 changed files with 21 additions and 21 deletions
|
|
@ -340,12 +340,12 @@ where
|
||||||
/// * the current value of the [`ProgressBar`].
|
/// * the current value of the [`ProgressBar`].
|
||||||
///
|
///
|
||||||
/// [`ProgressBar`]: crate::ProgressBar
|
/// [`ProgressBar`]: crate::ProgressBar
|
||||||
pub fn progress_bar<Theme>(
|
pub fn progress_bar<'a, Theme>(
|
||||||
range: RangeInclusive<f32>,
|
range: RangeInclusive<f32>,
|
||||||
value: f32,
|
value: f32,
|
||||||
) -> ProgressBar<Theme>
|
) -> ProgressBar<'a, Theme>
|
||||||
where
|
where
|
||||||
Theme: progress_bar::DefaultStyle,
|
Theme: progress_bar::DefaultStyle + 'a,
|
||||||
{
|
{
|
||||||
ProgressBar::new(range, value)
|
ProgressBar::new(range, value)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ use std::ops::RangeInclusive;
|
||||||
///
|
///
|
||||||
/// # Example
|
/// # Example
|
||||||
/// ```no_run
|
/// ```no_run
|
||||||
/// # type ProgressBar = iced_widget::ProgressBar;
|
/// # type ProgressBar<'a> = iced_widget::ProgressBar<'a>;
|
||||||
/// #
|
/// #
|
||||||
/// let value = 50.0;
|
/// let value = 50.0;
|
||||||
///
|
///
|
||||||
|
|
@ -22,15 +22,15 @@ use std::ops::RangeInclusive;
|
||||||
///
|
///
|
||||||
/// 
|
/// 
|
||||||
#[allow(missing_debug_implementations)]
|
#[allow(missing_debug_implementations)]
|
||||||
pub struct ProgressBar<Theme = crate::Theme> {
|
pub struct ProgressBar<'a, Theme = crate::Theme> {
|
||||||
range: RangeInclusive<f32>,
|
range: RangeInclusive<f32>,
|
||||||
value: f32,
|
value: f32,
|
||||||
width: Length,
|
width: Length,
|
||||||
height: Option<Length>,
|
height: Option<Length>,
|
||||||
style: Style<Theme>,
|
style: Style<'a, Theme>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<Theme> ProgressBar<Theme> {
|
impl<'a, Theme> ProgressBar<'a, Theme> {
|
||||||
/// The default height of a [`ProgressBar`].
|
/// The default height of a [`ProgressBar`].
|
||||||
pub const DEFAULT_HEIGHT: f32 = 30.0;
|
pub const DEFAULT_HEIGHT: f32 = 30.0;
|
||||||
|
|
||||||
|
|
@ -41,14 +41,14 @@ impl<Theme> ProgressBar<Theme> {
|
||||||
/// * the current value of the [`ProgressBar`]
|
/// * the current value of the [`ProgressBar`]
|
||||||
pub fn new(range: RangeInclusive<f32>, value: f32) -> Self
|
pub fn new(range: RangeInclusive<f32>, value: f32) -> Self
|
||||||
where
|
where
|
||||||
Theme: DefaultStyle,
|
Theme: DefaultStyle + 'a,
|
||||||
{
|
{
|
||||||
ProgressBar {
|
ProgressBar {
|
||||||
value: value.clamp(*range.start(), *range.end()),
|
value: value.clamp(*range.start(), *range.end()),
|
||||||
range,
|
range,
|
||||||
width: Length::Fill,
|
width: Length::Fill,
|
||||||
height: None,
|
height: None,
|
||||||
style: Theme::default_style(),
|
style: Box::new(Theme::default_style),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -65,14 +65,14 @@ impl<Theme> ProgressBar<Theme> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Sets the style of the [`ProgressBar`].
|
/// Sets the style of the [`ProgressBar`].
|
||||||
pub fn style(mut self, style: fn(&Theme) -> Appearance) -> Self {
|
pub fn style(mut self, style: impl Fn(&Theme) -> Appearance + 'a) -> Self {
|
||||||
self.style = style.into();
|
self.style = Box::new(style);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer>
|
impl<'a, Message, Theme, Renderer> Widget<Message, Theme, Renderer>
|
||||||
for ProgressBar<Theme>
|
for ProgressBar<'a, Theme>
|
||||||
where
|
where
|
||||||
Renderer: crate::core::Renderer,
|
Renderer: crate::core::Renderer,
|
||||||
{
|
{
|
||||||
|
|
@ -143,7 +143,7 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, Message, Theme, Renderer> From<ProgressBar<Theme>>
|
impl<'a, Message, Theme, Renderer> From<ProgressBar<'a, Theme>>
|
||||||
for Element<'a, Message, Theme, Renderer>
|
for Element<'a, Message, Theme, Renderer>
|
||||||
where
|
where
|
||||||
Message: 'a,
|
Message: 'a,
|
||||||
|
|
@ -151,7 +151,7 @@ where
|
||||||
Renderer: 'a + crate::core::Renderer,
|
Renderer: 'a + crate::core::Renderer,
|
||||||
{
|
{
|
||||||
fn from(
|
fn from(
|
||||||
progress_bar: ProgressBar<Theme>,
|
progress_bar: ProgressBar<'a, Theme>,
|
||||||
) -> Element<'a, Message, Theme, Renderer> {
|
) -> Element<'a, Message, Theme, Renderer> {
|
||||||
Element::new(progress_bar)
|
Element::new(progress_bar)
|
||||||
}
|
}
|
||||||
|
|
@ -169,23 +169,23 @@ pub struct Appearance {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The style of a [`ProgressBar`].
|
/// The style of a [`ProgressBar`].
|
||||||
pub type Style<Theme> = fn(&Theme) -> Appearance;
|
pub type Style<'a, Theme> = Box<dyn Fn(&Theme) -> Appearance + 'a>;
|
||||||
|
|
||||||
/// The default style of a [`ProgressBar`].
|
/// The default style of a [`ProgressBar`].
|
||||||
pub trait DefaultStyle {
|
pub trait DefaultStyle {
|
||||||
/// Returns the default style of a [`ProgressBar`].
|
/// Returns the default style of a [`ProgressBar`].
|
||||||
fn default_style() -> Style<Self>;
|
fn default_style(&self) -> Appearance;
|
||||||
}
|
}
|
||||||
|
|
||||||
impl DefaultStyle for Theme {
|
impl DefaultStyle for Theme {
|
||||||
fn default_style() -> Style<Self> {
|
fn default_style(&self) -> Appearance {
|
||||||
primary
|
primary(self)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl DefaultStyle for Appearance {
|
impl DefaultStyle for Appearance {
|
||||||
fn default_style() -> Style<Self> {
|
fn default_style(&self) -> Appearance {
|
||||||
|appearance| *appearance
|
*self
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue