From d60f3b89a75f5b2ad8e6fb17827f5574a0a44bd1 Mon Sep 17 00:00:00 2001 From: Songtronix Date: Wed, 1 Jan 2020 17:27:14 +0100 Subject: add(widget): primitive progressbar widget --- wgpu/src/renderer/widget.rs | 1 + wgpu/src/renderer/widget/progressbar.rs | 43 +++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 wgpu/src/renderer/widget/progressbar.rs (limited to 'wgpu/src') 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, + 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, + ) + } +} -- cgit