diff options
Diffstat (limited to '')
| -rw-r--r-- | wgpu/src/renderer/widget.rs | 1 | ||||
| -rw-r--r-- | wgpu/src/renderer/widget/progressbar.rs | 43 | 
2 files changed, 44 insertions, 0 deletions
| diff --git a/wgpu/src/renderer/widget.rs b/wgpu/src/renderer/widget.rs index f82631d5..94ebd10e 100644 --- a/wgpu/src/renderer/widget.rs +++ b/wgpu/src/renderer/widget.rs @@ -2,6 +2,7 @@ mod button;  mod checkbox;  mod column;  mod image; +mod progressbar;  mod radio;  mod row;  mod scrollable; diff --git a/wgpu/src/renderer/widget/progressbar.rs b/wgpu/src/renderer/widget/progressbar.rs new file mode 100644 index 00000000..3c62e54d --- /dev/null +++ b/wgpu/src/renderer/widget/progressbar.rs @@ -0,0 +1,43 @@ +use crate::{Primitive, Renderer}; +use iced_native::{progressbar, Background, Color, MouseCursor, Rectangle}; + +impl progressbar::Renderer for Renderer { +    fn height(&self) -> u32 { +        30 +    } + +    fn draw( +        &self, +        bounds: Rectangle, +        range: std::ops::RangeInclusive<f32>, +        value: f32, +    ) -> Self::Output { +        let (range_start, range_end) = range.into_inner(); +        let active_progress_width = bounds.width +            * ((value - range_start) / (range_end - range_start).max(1.0)); + +        let background = Primitive::Group { +            primitives: vec![Primitive::Quad { +                bounds: Rectangle { ..bounds }, +                background: Color::from_rgb(0.6, 0.6, 0.6).into(), +                border_radius: 5, +            }], +        }; + +        let active_progress = Primitive::Quad { +            bounds: Rectangle { +                width: active_progress_width, +                ..bounds +            }, +            background: Background::Color([0.0, 0.95, 0.0].into()), +            border_radius: 4, +        }; + +        ( +            Primitive::Group { +                primitives: vec![background, active_progress], +            }, +            MouseCursor::OutOfBounds, +        ) +    } +} | 
