diff options
author | 2022-07-09 02:28:52 +0200 | |
---|---|---|
committer | 2022-07-09 02:28:52 +0200 | |
commit | e053e25d2ccb17f7a162685a106a8bbd915a873f (patch) | |
tree | 5304f3ea2712e8889c7278ec5e57418f484d8f6c /native/src/widget/progress_bar.rs | |
parent | 66eb6263003c1bbedd1fd14d6b12f172d20a6211 (diff) | |
parent | 7105db97a53d90adf429091298f31c90974d8f08 (diff) | |
download | iced-e053e25d2ccb17f7a162685a106a8bbd915a873f.tar.gz iced-e053e25d2ccb17f7a162685a106a8bbd915a873f.tar.bz2 iced-e053e25d2ccb17f7a162685a106a8bbd915a873f.zip |
Merge pull request #1362 from iced-rs/theming
Theming
Diffstat (limited to 'native/src/widget/progress_bar.rs')
-rw-r--r-- | native/src/widget/progress_bar.rs | 39 |
1 files changed, 26 insertions, 13 deletions
diff --git a/native/src/widget/progress_bar.rs b/native/src/widget/progress_bar.rs index c26c38fa..4eb7438a 100644 --- a/native/src/widget/progress_bar.rs +++ b/native/src/widget/progress_bar.rs @@ -5,13 +5,13 @@ use crate::{Color, Element, Layout, Length, Point, Rectangle, Size, Widget}; use std::ops::RangeInclusive; -pub use iced_style::progress_bar::{Style, StyleSheet}; +pub use iced_style::progress_bar::{Appearance, StyleSheet}; /// A bar that displays progress. /// /// # Example /// ``` -/// # use iced_native::widget::ProgressBar; +/// # type ProgressBar = iced_native::widget::ProgressBar<iced_native::renderer::Null>; /// let value = 50.0; /// /// ProgressBar::new(0.0..=100.0, value); @@ -19,15 +19,23 @@ pub use iced_style::progress_bar::{Style, StyleSheet}; /// ///  #[allow(missing_debug_implementations)] -pub struct ProgressBar<'a> { +pub struct ProgressBar<Renderer> +where + Renderer: crate::Renderer, + Renderer::Theme: StyleSheet, +{ range: RangeInclusive<f32>, value: f32, width: Length, height: Option<Length>, - style_sheet: Box<dyn StyleSheet + 'a>, + style: <Renderer::Theme as StyleSheet>::Style, } -impl<'a> ProgressBar<'a> { +impl<Renderer> ProgressBar<Renderer> +where + Renderer: crate::Renderer, + Renderer::Theme: StyleSheet, +{ /// The default height of a [`ProgressBar`]. pub const DEFAULT_HEIGHT: u16 = 30; @@ -42,7 +50,7 @@ impl<'a> ProgressBar<'a> { range, width: Length::Fill, height: None, - style_sheet: Default::default(), + style: Default::default(), } } @@ -61,16 +69,17 @@ impl<'a> ProgressBar<'a> { /// Sets the style of the [`ProgressBar`]. pub fn style( mut self, - style_sheet: impl Into<Box<dyn StyleSheet + 'a>>, + style: impl Into<<Renderer::Theme as StyleSheet>::Style>, ) -> Self { - self.style_sheet = style_sheet.into(); + self.style = style.into(); self } } -impl<'a, Message, Renderer> Widget<Message, Renderer> for ProgressBar<'a> +impl<'a, Message, Renderer> Widget<Message, Renderer> for ProgressBar<Renderer> where Renderer: crate::Renderer, + Renderer::Theme: StyleSheet, { fn width(&self) -> Length { self.width @@ -97,6 +106,7 @@ where fn draw( &self, renderer: &mut Renderer, + theme: &Renderer::Theme, _style: &renderer::Style, layout: Layout<'_>, _cursor_position: Point, @@ -112,7 +122,7 @@ where / (range_end - range_start) }; - let style = self.style_sheet.style(); + let style = theme.appearance(self.style); renderer.fill_quad( renderer::Quad { @@ -141,13 +151,16 @@ where } } -impl<'a, Message, Renderer> From<ProgressBar<'a>> +impl<'a, Message, Renderer> From<ProgressBar<Renderer>> for Element<'a, Message, Renderer> where - Renderer: 'a + crate::Renderer, Message: 'a, + Renderer: 'a + crate::Renderer, + Renderer::Theme: StyleSheet, { - fn from(progress_bar: ProgressBar<'a>) -> Element<'a, Message, Renderer> { + fn from( + progress_bar: ProgressBar<Renderer>, + ) -> Element<'a, Message, Renderer> { Element::new(progress_bar) } } |