change(widget): make height adjustable at widget level

addtionally rename Progressbar to ProgressBar
This commit is contained in:
Songtronix 2020-01-02 18:07:00 +01:00
parent bf8f83decc
commit 986f01237f
5 changed files with 61 additions and 59 deletions

View File

@ -1,8 +1,8 @@
use iced::{ use iced::{
settings::Window, slider, Background, Color, Column, Element, Sandbox, settings::Window, slider, Background, Color, Column, Element, Length,
Settings, Slider, Sandbox, Settings, Slider,
}; };
use iced_winit::Progressbar; use iced_winit::ProgressBar;
pub fn main() { pub fn main() {
Progress::run(Settings { Progress::run(Settings {
@ -17,7 +17,7 @@ pub fn main() {
#[derive(Default)] #[derive(Default)]
struct Progress { struct Progress {
value: f32, value: f32,
progressbar_slider: slider::State, progress_bar_slider: slider::State,
} }
#[derive(Debug, Clone, Copy)] #[derive(Debug, Clone, Copy)]
@ -46,14 +46,15 @@ impl Sandbox for Progress {
Column::new() Column::new()
.padding(20) .padding(20)
.push( .push(
Progressbar::new(0.0..=100.0, self.value) ProgressBar::new(0.0..=100.0, self.value)
.background(Background::Color(Color::from_rgb( .background(Background::Color(Color::from_rgb(
0.6, 0.6, 0.6, 0.6, 0.6, 0.6,
))) )))
.active_color(Color::from_rgb(0.0, 0.95, 0.0)), .active_color(Color::from_rgb(0.0, 0.95, 0.0))
.height(Length::Units(30)),
) )
.push(Slider::new( .push(Slider::new(
&mut self.progressbar_slider, &mut self.progress_bar_slider,
0.0..=100.0, 0.0..=100.0,
self.value, self.value,
Message::SliderChanged, Message::SliderChanged,

View File

@ -25,7 +25,7 @@ pub mod checkbox;
pub mod column; pub mod column;
pub mod container; pub mod container;
pub mod image; pub mod image;
pub mod progressbar; pub mod progress_bar;
pub mod radio; pub mod radio;
pub mod row; pub mod row;
pub mod scrollable; pub mod scrollable;
@ -46,7 +46,7 @@ pub use container::Container;
#[doc(no_inline)] #[doc(no_inline)]
pub use image::Image; pub use image::Image;
#[doc(no_inline)] #[doc(no_inline)]
pub use progressbar::Progressbar; pub use progress_bar::ProgressBar;
#[doc(no_inline)] #[doc(no_inline)]
pub use radio::Radio; pub use radio::Radio;
#[doc(no_inline)] #[doc(no_inline)]

View File

@ -1,7 +1,7 @@
//! Display a progressbar //! Display a ProgressBar
//! //!
//! //!
//! [`Progressbar`]: struct.Progressbar.html //! [`ProgressBar`]: struct.ProgressBar.html
use crate::{ use crate::{
layout, Background, Color, Element, Hasher, Layout, Length, Point, layout, Background, Color, Element, Hasher, Layout, Length, Point,
Rectangle, Size, Widget, Rectangle, Size, Widget,
@ -9,71 +9,83 @@ use crate::{
use std::{hash::Hash, ops::RangeInclusive}; use std::{hash::Hash, ops::RangeInclusive};
/// A progressbar const DEFAULT_HEIGHT: Length = Length::Units(30);
/// A ProgressBar
/// ///
/// # Example /// # Example
/// ///
/// ``` /// ```
/// # use iced_native::Progressbar; /// # use iced_native::ProgressBar;
/// ///
/// let value = 50.0; /// let value = 50.0;
/// Progressbar::new(0.0..=100.0, value); /// ProgressBar::new(0.0..=100.0, value);
/// ``` /// ```
/// ///
/// ![Default Progressbar](https://user-images.githubusercontent.com/18618951/71662391-a316c200-2d51-11ea-9cef-52758cab85e3.png) /// ![Default ProgressBar](https://user-images.githubusercontent.com/18618951/71662391-a316c200-2d51-11ea-9cef-52758cab85e3.png)
#[allow(missing_debug_implementations)] #[allow(missing_debug_implementations)]
pub struct Progressbar { pub struct ProgressBar {
range: RangeInclusive<f32>, range: RangeInclusive<f32>,
value: f32, value: f32,
width: Length, width: Length,
height: Length,
background: Option<Background>, background: Option<Background>,
active_color: Option<Color>, active_color: Option<Color>,
} }
impl Progressbar { impl ProgressBar {
/// Creates a new [`Progressbar`]. /// Creates a new [`ProgressBar`].
/// ///
/// It expects: /// It expects:
/// * an inclusive range of possible values /// * an inclusive range of possible values
/// * the current value of the [`Progressbar`] /// * the current value of the [`ProgressBar`]
/// ///
/// [`Progressbar`]: struct.Progressbar.html /// [`ProgressBar`]: struct.ProgressBar.html
pub fn new(range: RangeInclusive<f32>, value: f32) -> Self { pub fn new(range: RangeInclusive<f32>, value: f32) -> Self {
Progressbar { ProgressBar {
value: value.max(*range.start()).min(*range.end()), value: value.max(*range.start()).min(*range.end()),
range, range,
width: Length::Fill, width: Length::Fill,
height: DEFAULT_HEIGHT,
background: None, background: None,
active_color: None, active_color: None,
} }
} }
/// Sets the width of the [`Progressbar`]. /// Sets the width of the [`ProgressBar`].
/// ///
/// [`Progressbar`]: struct.Progressbar.html /// [`ProgressBar`]: struct.ProgressBar.html
pub fn width(mut self, width: Length) -> Self { pub fn width(mut self, width: Length) -> Self {
self.width = width; self.width = width;
self self
} }
/// Sets the background of the [`Progressbar`]. /// Sets the height of the [`ProgressBar`].
/// ///
/// [`Progressbar`]: struct.Progressbar.html /// [`ProgressBar`]: struct.ProgressBar.html
pub fn height(mut self, height: Length) -> Self {
self.height = height;
self
}
/// Sets the background of the [`ProgressBar`].
///
/// [`ProgressBar`]: struct.ProgressBar.html
pub fn background(mut self, background: Background) -> Self { pub fn background(mut self, background: Background) -> Self {
self.background = Some(background); self.background = Some(background);
self self
} }
/// Sets the active color of the [`Progressbar`]. /// Sets the active color of the [`ProgressBar`].
/// ///
/// [`Progressbar`]: struct.Progressbar.html /// [`ProgressBar`]: struct.ProgressBar.html
pub fn active_color(mut self, active_color: Color) -> Self { pub fn active_color(mut self, active_color: Color) -> Self {
self.active_color = Some(active_color); self.active_color = Some(active_color);
self self
} }
} }
impl<Message, Renderer> Widget<Message, Renderer> for Progressbar impl<Message, Renderer> Widget<Message, Renderer> for ProgressBar
where where
Renderer: self::Renderer, Renderer: self::Renderer,
{ {
@ -82,17 +94,15 @@ where
} }
fn height(&self) -> Length { fn height(&self) -> Length {
Length::Shrink self.height
} }
fn layout( fn layout(
&self, &self,
renderer: &Renderer, _renderer: &Renderer,
limits: &layout::Limits, limits: &layout::Limits,
) -> layout::Node { ) -> layout::Node {
let limits = limits let limits = limits.width(self.width).height(self.height);
.width(self.width)
.height(Length::Units(renderer.height() as u16));
let size = limits.resolve(Size::ZERO); let size = limits.resolve(Size::ZERO);
@ -119,30 +129,25 @@ where
} }
} }
/// The renderer of a [`Progressbar`]. /// The renderer of a [`ProgressBar`].
/// ///
/// Your [renderer] will need to implement this trait before being /// Your [renderer] will need to implement this trait before being
/// able to use a [`Progressbar`] in your user interface. /// able to use a [`ProgressBar`] in your user interface.
/// ///
/// [`Progressbar`]: struct.Progressbar.html /// [`ProgressBar`]: struct.ProgressBar.html
/// [renderer]: ../../renderer/index.html /// [renderer]: ../../renderer/index.html
pub trait Renderer: crate::Renderer { pub trait Renderer: crate::Renderer {
/// Returns the height of the [`Progressbar`]. /// Draws a [`ProgressBar`].
///
/// [`Progressbar`]: struct.Progressbar.html
fn height(&self) -> u32;
/// Draws a [`Progressbar`].
/// ///
/// It receives: /// It receives:
/// * the local state of the [`Progressbar`] /// * the local state of the [`ProgressBar`]
/// * the bounds of the [`Progressbar`] /// * the bounds of the [`ProgressBar`]
/// * the range of values of the [`Progressbar`] /// * the range of values of the [`ProgressBar`]
/// * the current value of the [`Progressbar`] /// * the current value of the [`ProgressBar`]
/// * maybe a specific background of the [`Progressbar`] /// * maybe a specific background of the [`ProgressBar`]
/// * maybe a specific active color of the [`Progressbar`] /// * maybe a specific active color of the [`ProgressBar`]
/// ///
/// [`Progressbar`]: struct.Progressbar.html /// [`ProgressBar`]: struct.ProgressBar.html
/// [`State`]: struct.State.html /// [`State`]: struct.State.html
/// [`Class`]: enum.Class.html /// [`Class`]: enum.Class.html
fn draw( fn draw(
@ -155,12 +160,12 @@ pub trait Renderer: crate::Renderer {
) -> Self::Output; ) -> Self::Output;
} }
impl<'a, Message, Renderer> From<Progressbar> for Element<'a, Message, Renderer> impl<'a, Message, Renderer> From<ProgressBar> for Element<'a, Message, Renderer>
where where
Renderer: self::Renderer, Renderer: self::Renderer,
Message: 'static, Message: 'static,
{ {
fn from(progressbar: Progressbar) -> Element<'a, Message, Renderer> { fn from(progressbar: ProgressBar) -> Element<'a, Message, Renderer> {
Element::new(progressbar) Element::new(progressbar)
} }
} }

View File

@ -2,7 +2,7 @@ mod button;
mod checkbox; mod checkbox;
mod column; mod column;
mod image; mod image;
mod progressbar; mod progress_bar;
mod radio; mod radio;
mod row; mod row;
mod scrollable; mod scrollable;

View File

@ -1,11 +1,7 @@
use crate::{Primitive, Renderer}; use crate::{Primitive, Renderer};
use iced_native::{progressbar, Background, Color, MouseCursor, Rectangle}; use iced_native::{progress_bar, Background, Color, MouseCursor, Rectangle};
impl progressbar::Renderer for Renderer {
fn height(&self) -> u32 {
30
}
impl progress_bar::Renderer for Renderer {
fn draw( fn draw(
&self, &self,
bounds: Rectangle, bounds: Rectangle,