From bf74e6e7d47a012a9c592a9da044f8d3bf9efbce Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Mon, 30 Dec 2019 19:16:46 +0100 Subject: Implement `Default` for `MouseCursor` --- native/src/mouse_cursor.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/native/src/mouse_cursor.rs b/native/src/mouse_cursor.rs index a4740a27..c7297e0e 100644 --- a/native/src/mouse_cursor.rs +++ b/native/src/mouse_cursor.rs @@ -22,3 +22,9 @@ pub enum MouseCursor { /// The cursor is over a text widget. Text, } + +impl Default for MouseCursor { + fn default() -> MouseCursor { + MouseCursor::OutOfBounds + } +} -- cgit From 7163e1d8b669b61d6fba6528c2a28fde3bfb72a0 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Mon, 30 Dec 2019 19:17:00 +0100 Subject: Implement `Default` for `iced_wgpu::Primitive` --- wgpu/src/primitive.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/wgpu/src/primitive.rs b/wgpu/src/primitive.rs index 958cc17f..6c61f800 100644 --- a/wgpu/src/primitive.rs +++ b/wgpu/src/primitive.rs @@ -64,3 +64,9 @@ pub enum Primitive { content: Box, }, } + +impl Default for Primitive { + fn default() -> Primitive { + Primitive::None + } +} -- cgit From 8426bf953cb50f3b7fcb1e0ec8c2fdf22d2b01af Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Mon, 30 Dec 2019 19:20:59 +0100 Subject: Implement `Empty` widget It can be useful if you want to fill some space with nothing. --- examples/tour.rs | 4 +- native/src/widget.rs | 3 ++ native/src/widget/empty.rs | 103 ++++++++++++++++++++++++++++++++++++++ src/native.rs | 4 +- web/src/widget.rs | 2 + web/src/widget/empty.rs | 70 ++++++++++++++++++++++++++ wgpu/src/renderer/widget.rs | 1 + wgpu/src/renderer/widget/empty.rs | 8 +++ 8 files changed, 191 insertions(+), 4 deletions(-) create mode 100644 native/src/widget/empty.rs create mode 100644 web/src/widget/empty.rs create mode 100644 wgpu/src/renderer/widget/empty.rs diff --git a/examples/tour.rs b/examples/tour.rs index da05b396..fcace9c3 100644 --- a/examples/tour.rs +++ b/examples/tour.rs @@ -1,6 +1,6 @@ use iced::{ button, scrollable, slider, text_input, Button, Checkbox, Color, Column, - Container, Element, HorizontalAlignment, Image, Length, Radio, Row, + Container, Element, Empty, HorizontalAlignment, Image, Length, Radio, Row, Sandbox, Scrollable, Settings, Slider, Text, TextInput, }; @@ -67,7 +67,7 @@ impl Sandbox for Tour { ); } - controls = controls.push(Column::new()); + controls = controls.push(Empty::new().width(Length::Fill)); if steps.can_continue() { controls = controls.push( diff --git a/native/src/widget.rs b/native/src/widget.rs index 26889280..b73f229e 100644 --- a/native/src/widget.rs +++ b/native/src/widget.rs @@ -24,6 +24,7 @@ pub mod button; pub mod checkbox; pub mod column; pub mod container; +pub mod empty; pub mod image; pub mod radio; pub mod row; @@ -42,6 +43,8 @@ pub use column::Column; #[doc(no_inline)] pub use container::Container; #[doc(no_inline)] +pub use empty::Empty; +#[doc(no_inline)] pub use image::Image; #[doc(no_inline)] pub use radio::Radio; diff --git a/native/src/widget/empty.rs b/native/src/widget/empty.rs new file mode 100644 index 00000000..f670048f --- /dev/null +++ b/native/src/widget/empty.rs @@ -0,0 +1,103 @@ +//! Distribute content vertically. +use std::hash::Hash; + +use crate::{ + layout, Element, Hasher, Layout, Length, Point, Rectangle, Size, Widget, +}; + +/// An amount of empty space. +/// +/// It can be useful if you want to fill some space with nothing. +/// +/// [`Empty`]: struct.Empty.html +#[derive(Debug)] +pub struct Empty { + width: Length, + height: Length, +} + +impl Empty { + /// Creates an amount of [`Empty`] space. + /// + /// [`Empty`]: struct.Empty.html + pub fn new() -> Self { + Empty { + width: Length::Shrink, + height: Length::Shrink, + } + } + + /// Sets the width of the [`Empty`] space. + /// + /// [`Empty`]: struct..html + pub fn width(mut self, width: Length) -> Self { + self.width = width; + self + } + + /// Sets the height of the [`Empty`] space. + /// + /// [`Empty`]: struct.Column.html + pub fn height(mut self, height: Length) -> Self { + self.height = height; + self + } +} + +impl<'a, Message, Renderer> Widget for Empty +where + Renderer: self::Renderer, +{ + fn width(&self) -> Length { + self.width + } + + fn height(&self) -> Length { + self.height + } + + fn layout( + &self, + _renderer: &Renderer, + limits: &layout::Limits, + ) -> layout::Node { + let limits = limits.width(self.width).height(self.height); + + layout::Node::new(limits.resolve(Size::ZERO)) + } + + fn draw( + &self, + renderer: &mut Renderer, + layout: Layout<'_>, + _cursor_position: Point, + ) -> Renderer::Output { + renderer.draw(layout.bounds()) + } + + fn hash_layout(&self, state: &mut Hasher) { + std::any::TypeId::of::().hash(state); + self.width.hash(state); + self.height.hash(state); + } +} + +/// The renderer of an amount of [`Empty`] space. +/// +/// [`Empty`]: struct.Empty.html +pub trait Renderer: crate::Renderer { + /// Draws an amount of [`Empty`] space. + /// + /// You should most likely return an empty primitive here. + fn draw(&mut self, bounds: Rectangle) -> Self::Output; +} + +impl<'a, Message, Renderer> From for Element<'a, Message, Renderer> +where + Renderer: self::Renderer, + Message: 'static, +{ + fn from(empty: Empty) -> Element<'a, Message, Renderer> { + Element::new(empty) + } +} diff --git a/src/native.rs b/src/native.rs index f06f1c99..8a04b7c3 100644 --- a/src/native.rs +++ b/src/native.rs @@ -1,6 +1,6 @@ pub use iced_winit::{ - Align, Background, Color, Command, Font, HorizontalAlignment, Length, - Subscription, VerticalAlignment, + Align, Background, Color, Command, Empty, Font, HorizontalAlignment, + Length, Subscription, VerticalAlignment, }; pub mod widget { diff --git a/web/src/widget.rs b/web/src/widget.rs index b0e16692..5cf0238a 100644 --- a/web/src/widget.rs +++ b/web/src/widget.rs @@ -25,6 +25,7 @@ pub mod text_input; mod checkbox; mod column; mod container; +mod empty; mod image; mod radio; mod row; @@ -44,6 +45,7 @@ pub use text_input::TextInput; pub use checkbox::Checkbox; pub use column::Column; pub use container::Container; +pub use empty::Empty; pub use image::Image; pub use radio::Radio; pub use row::Row; diff --git a/web/src/widget/empty.rs b/web/src/widget/empty.rs new file mode 100644 index 00000000..dda17efe --- /dev/null +++ b/web/src/widget/empty.rs @@ -0,0 +1,70 @@ +use crate::{style, Bus, Element, Length, Widget}; +use dodrio::bumpalo; + +/// An amount of empty space. +/// +/// It can be useful if you want to fill some space with nothing. +/// +/// [`Empty`]: struct.Empty.html +#[derive(Debug)] +pub struct Empty { + width: Length, + height: Length, +} + +impl Empty { + /// Creates an amount of [`Empty`] space. + /// + /// [`Empty`]: struct.Empty.html + pub fn new() -> Self { + Empty { + width: Length::Shrink, + height: Length::Shrink, + } + } + + /// Sets the width of the [`Empty`] space. + /// + /// [`Empty`]: struct..html + pub fn width(mut self, width: Length) -> Self { + self.width = width; + self + } + + /// Sets the height of the [`Empty`] space. + /// + /// [`Empty`]: struct.Column.html + pub fn height(mut self, height: Length) -> Self { + self.height = height; + self + } +} + +impl<'a, Message> Widget for Empty { + fn node<'b>( + &self, + bump: &'b bumpalo::Bump, + _publish: &Bus, + _style_sheet: &mut style::Sheet<'b>, + ) -> dodrio::Node<'b> { + use dodrio::builder::*; + + let width = style::length(self.width); + let height = style::length(self.height); + + let style = bumpalo::format!( + in bump, + "width: {}; height: {};", + width, + height + ); + + div(bump).attr("style", style.into_bump_str()).finish() + } +} + +impl<'a, Message> From for Element<'a, Message> { + fn from(empty: Empty) -> Element<'a, Message> { + Element::new(empty) + } +} diff --git a/wgpu/src/renderer/widget.rs b/wgpu/src/renderer/widget.rs index 91f107e8..f2d443fb 100644 --- a/wgpu/src/renderer/widget.rs +++ b/wgpu/src/renderer/widget.rs @@ -1,6 +1,7 @@ mod button; mod checkbox; mod column; +mod empty; mod image; mod radio; mod row; diff --git a/wgpu/src/renderer/widget/empty.rs b/wgpu/src/renderer/widget/empty.rs new file mode 100644 index 00000000..26ee74b4 --- /dev/null +++ b/wgpu/src/renderer/widget/empty.rs @@ -0,0 +1,8 @@ +use crate::{Primitive, Renderer}; +use iced_native::{empty, MouseCursor, Rectangle}; + +impl empty::Renderer for Renderer { + fn draw(&mut self, _bounds: Rectangle) -> Self::Output { + (Primitive::None, MouseCursor::OutOfBounds) + } +} -- cgit From 3a327e08e96d9588d145c32afe4f04f37a8f0f0f Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Mon, 30 Dec 2019 21:32:21 +0100 Subject: Rename `Empty` widget to `Space` --- examples/tour.rs | 6 +-- native/src/widget.rs | 6 +-- native/src/widget/empty.rs | 103 ------------------------------------- native/src/widget/space.rs | 104 ++++++++++++++++++++++++++++++++++++++ src/native.rs | 4 +- web/src/widget.rs | 4 +- web/src/widget/empty.rs | 70 ------------------------- web/src/widget/space.rs | 69 +++++++++++++++++++++++++ wgpu/src/renderer/widget.rs | 2 +- wgpu/src/renderer/widget/empty.rs | 8 --- wgpu/src/renderer/widget/space.rs | 8 +++ 11 files changed, 192 insertions(+), 192 deletions(-) delete mode 100644 native/src/widget/empty.rs create mode 100644 native/src/widget/space.rs delete mode 100644 web/src/widget/empty.rs create mode 100644 web/src/widget/space.rs delete mode 100644 wgpu/src/renderer/widget/empty.rs create mode 100644 wgpu/src/renderer/widget/space.rs diff --git a/examples/tour.rs b/examples/tour.rs index fcace9c3..91b75296 100644 --- a/examples/tour.rs +++ b/examples/tour.rs @@ -1,7 +1,7 @@ use iced::{ button, scrollable, slider, text_input, Button, Checkbox, Color, Column, - Container, Element, Empty, HorizontalAlignment, Image, Length, Radio, Row, - Sandbox, Scrollable, Settings, Slider, Text, TextInput, + Container, Element, HorizontalAlignment, Image, Length, Radio, Row, + Sandbox, Scrollable, Settings, Slider, Space, Text, TextInput, }; pub fn main() { @@ -67,7 +67,7 @@ impl Sandbox for Tour { ); } - controls = controls.push(Empty::new().width(Length::Fill)); + controls = controls.push(Space::with_width(Length::Fill)); if steps.can_continue() { controls = controls.push( diff --git a/native/src/widget.rs b/native/src/widget.rs index b73f229e..dcc99645 100644 --- a/native/src/widget.rs +++ b/native/src/widget.rs @@ -24,12 +24,12 @@ pub mod button; pub mod checkbox; pub mod column; pub mod container; -pub mod empty; pub mod image; pub mod radio; pub mod row; pub mod scrollable; pub mod slider; +pub mod space; pub mod svg; pub mod text; pub mod text_input; @@ -43,8 +43,6 @@ pub use column::Column; #[doc(no_inline)] pub use container::Container; #[doc(no_inline)] -pub use empty::Empty; -#[doc(no_inline)] pub use image::Image; #[doc(no_inline)] pub use radio::Radio; @@ -55,6 +53,8 @@ pub use scrollable::Scrollable; #[doc(no_inline)] pub use slider::Slider; #[doc(no_inline)] +pub use space::Space; +#[doc(no_inline)] pub use svg::Svg; #[doc(no_inline)] pub use text::Text; diff --git a/native/src/widget/empty.rs b/native/src/widget/empty.rs deleted file mode 100644 index f670048f..00000000 --- a/native/src/widget/empty.rs +++ /dev/null @@ -1,103 +0,0 @@ -//! Distribute content vertically. -use std::hash::Hash; - -use crate::{ - layout, Element, Hasher, Layout, Length, Point, Rectangle, Size, Widget, -}; - -/// An amount of empty space. -/// -/// It can be useful if you want to fill some space with nothing. -/// -/// [`Empty`]: struct.Empty.html -#[derive(Debug)] -pub struct Empty { - width: Length, - height: Length, -} - -impl Empty { - /// Creates an amount of [`Empty`] space. - /// - /// [`Empty`]: struct.Empty.html - pub fn new() -> Self { - Empty { - width: Length::Shrink, - height: Length::Shrink, - } - } - - /// Sets the width of the [`Empty`] space. - /// - /// [`Empty`]: struct..html - pub fn width(mut self, width: Length) -> Self { - self.width = width; - self - } - - /// Sets the height of the [`Empty`] space. - /// - /// [`Empty`]: struct.Column.html - pub fn height(mut self, height: Length) -> Self { - self.height = height; - self - } -} - -impl<'a, Message, Renderer> Widget for Empty -where - Renderer: self::Renderer, -{ - fn width(&self) -> Length { - self.width - } - - fn height(&self) -> Length { - self.height - } - - fn layout( - &self, - _renderer: &Renderer, - limits: &layout::Limits, - ) -> layout::Node { - let limits = limits.width(self.width).height(self.height); - - layout::Node::new(limits.resolve(Size::ZERO)) - } - - fn draw( - &self, - renderer: &mut Renderer, - layout: Layout<'_>, - _cursor_position: Point, - ) -> Renderer::Output { - renderer.draw(layout.bounds()) - } - - fn hash_layout(&self, state: &mut Hasher) { - std::any::TypeId::of::().hash(state); - self.width.hash(state); - self.height.hash(state); - } -} - -/// The renderer of an amount of [`Empty`] space. -/// -/// [`Empty`]: struct.Empty.html -pub trait Renderer: crate::Renderer { - /// Draws an amount of [`Empty`] space. - /// - /// You should most likely return an empty primitive here. - fn draw(&mut self, bounds: Rectangle) -> Self::Output; -} - -impl<'a, Message, Renderer> From for Element<'a, Message, Renderer> -where - Renderer: self::Renderer, - Message: 'static, -{ - fn from(empty: Empty) -> Element<'a, Message, Renderer> { - Element::new(empty) - } -} diff --git a/native/src/widget/space.rs b/native/src/widget/space.rs new file mode 100644 index 00000000..2029c52f --- /dev/null +++ b/native/src/widget/space.rs @@ -0,0 +1,104 @@ +//! Distribute content vertically. +use std::hash::Hash; + +use crate::{ + layout, Element, Hasher, Layout, Length, Point, Rectangle, Size, Widget, +}; + +/// An amount of empty space. +/// +/// It can be useful if you want to fill some space with nothing. +#[derive(Debug)] +pub struct Space { + width: Length, + height: Length, +} + +impl Space { + /// Creates an amount of empty [`Space`] with the given width and height. + /// + /// [`Space`]: struct.Space.html + pub fn new(width: Length, height: Length) -> Self { + Space { width, height } + } + + /// Creates an amount of horizontal [`Space`]. + /// + /// [`Space`]: struct.Space.html + pub fn with_width(width: Length) -> Self { + Space { + width, + height: Length::Shrink, + } + } + + /// Creates an amount of vertical [`Space`]. + /// + /// [`Space`]: struct.Space.html + pub fn with_height(height: Length) -> Self { + Space { + width: Length::Shrink, + height, + } + } +} + +impl<'a, Message, Renderer> Widget for Space +where + Renderer: self::Renderer, +{ + fn width(&self) -> Length { + self.width + } + + fn height(&self) -> Length { + self.height + } + + fn layout( + &self, + _renderer: &Renderer, + limits: &layout::Limits, + ) -> layout::Node { + let limits = limits.width(self.width).height(self.height); + + layout::Node::new(limits.resolve(Size::ZERO)) + } + + fn draw( + &self, + renderer: &mut Renderer, + layout: Layout<'_>, + _cursor_position: Point, + ) -> Renderer::Output { + renderer.draw(layout.bounds()) + } + + fn hash_layout(&self, state: &mut Hasher) { + std::any::TypeId::of::().hash(state); + self.width.hash(state); + self.height.hash(state); + } +} + +/// The renderer of an amount of [`Space`]. +/// +/// [`Space`]: struct.Space.html +pub trait Renderer: crate::Renderer { + /// Draws an amount of empty [`Space`]. + /// + /// You should most likely return an empty primitive here. + /// + /// [`Space`]: struct.Space.html + fn draw(&mut self, bounds: Rectangle) -> Self::Output; +} + +impl<'a, Message, Renderer> From for Element<'a, Message, Renderer> +where + Renderer: self::Renderer, + Message: 'static, +{ + fn from(space: Space) -> Element<'a, Message, Renderer> { + Element::new(space) + } +} diff --git a/src/native.rs b/src/native.rs index 8a04b7c3..cf48a391 100644 --- a/src/native.rs +++ b/src/native.rs @@ -1,6 +1,6 @@ pub use iced_winit::{ - Align, Background, Color, Command, Empty, Font, HorizontalAlignment, - Length, Subscription, VerticalAlignment, + Align, Background, Color, Command, Font, HorizontalAlignment, Length, + Space, Subscription, VerticalAlignment, }; pub mod widget { diff --git a/web/src/widget.rs b/web/src/widget.rs index 5cf0238a..0ac536bd 100644 --- a/web/src/widget.rs +++ b/web/src/widget.rs @@ -25,10 +25,10 @@ pub mod text_input; mod checkbox; mod column; mod container; -mod empty; mod image; mod radio; mod row; +mod space; mod text; #[doc(no_inline)] @@ -45,10 +45,10 @@ pub use text_input::TextInput; pub use checkbox::Checkbox; pub use column::Column; pub use container::Container; -pub use empty::Empty; pub use image::Image; pub use radio::Radio; pub use row::Row; +pub use space::Space; /// A component that displays information and allows interaction. /// diff --git a/web/src/widget/empty.rs b/web/src/widget/empty.rs deleted file mode 100644 index dda17efe..00000000 --- a/web/src/widget/empty.rs +++ /dev/null @@ -1,70 +0,0 @@ -use crate::{style, Bus, Element, Length, Widget}; -use dodrio::bumpalo; - -/// An amount of empty space. -/// -/// It can be useful if you want to fill some space with nothing. -/// -/// [`Empty`]: struct.Empty.html -#[derive(Debug)] -pub struct Empty { - width: Length, - height: Length, -} - -impl Empty { - /// Creates an amount of [`Empty`] space. - /// - /// [`Empty`]: struct.Empty.html - pub fn new() -> Self { - Empty { - width: Length::Shrink, - height: Length::Shrink, - } - } - - /// Sets the width of the [`Empty`] space. - /// - /// [`Empty`]: struct..html - pub fn width(mut self, width: Length) -> Self { - self.width = width; - self - } - - /// Sets the height of the [`Empty`] space. - /// - /// [`Empty`]: struct.Column.html - pub fn height(mut self, height: Length) -> Self { - self.height = height; - self - } -} - -impl<'a, Message> Widget for Empty { - fn node<'b>( - &self, - bump: &'b bumpalo::Bump, - _publish: &Bus, - _style_sheet: &mut style::Sheet<'b>, - ) -> dodrio::Node<'b> { - use dodrio::builder::*; - - let width = style::length(self.width); - let height = style::length(self.height); - - let style = bumpalo::format!( - in bump, - "width: {}; height: {};", - width, - height - ); - - div(bump).attr("style", style.into_bump_str()).finish() - } -} - -impl<'a, Message> From for Element<'a, Message> { - fn from(empty: Empty) -> Element<'a, Message> { - Element::new(empty) - } -} diff --git a/web/src/widget/space.rs b/web/src/widget/space.rs new file mode 100644 index 00000000..baf4c80b --- /dev/null +++ b/web/src/widget/space.rs @@ -0,0 +1,69 @@ +use crate::{style, Bus, Element, Length, Widget}; +use dodrio::bumpalo; + +/// An amount of empty space. +/// +/// It can be useful if you want to fill some space with nothing. +#[derive(Debug)] +pub struct Space { + width: Length, + height: Length, +} + +impl Space { + /// Creates an amount of empty [`Space`] with the given width and height. + /// + /// [`Space`]: struct.Space.html + pub fn new(width: Length, height: Length) -> Self { + Space { width, height } + } + + /// Creates an amount of horizontal [`Space`]. + /// + /// [`Space`]: struct.Space.html + pub fn with_width(width: Length) -> Self { + Space { + width, + height: Length::Shrink, + } + } + + /// Creates an amount of vertical [`Space`]. + /// + /// [`Space`]: struct.Space.html + pub fn with_height(height: Length) -> Self { + Space { + width: Length::Shrink, + height, + } + } +} + +impl<'a, Message> Widget for Space { + fn node<'b>( + &self, + bump: &'b bumpalo::Bump, + _publish: &Bus, + _style_sheet: &mut style::Sheet<'b>, + ) -> dodrio::Node<'b> { + use dodrio::builder::*; + + let width = style::length(self.width); + let height = style::length(self.height); + + let style = bumpalo::format!( + in bump, + "width: {}; height: {};", + width, + height + ); + + div(bump).attr("style", style.into_bump_str()).finish() + } +} + +impl<'a, Message> From for Element<'a, Message> { + fn from(space: Space) -> Element<'a, Message> { + Element::new(space) + } +} diff --git a/wgpu/src/renderer/widget.rs b/wgpu/src/renderer/widget.rs index f2d443fb..f82631d5 100644 --- a/wgpu/src/renderer/widget.rs +++ b/wgpu/src/renderer/widget.rs @@ -1,12 +1,12 @@ mod button; mod checkbox; mod column; -mod empty; mod image; mod radio; mod row; mod scrollable; mod slider; +mod space; mod text; mod text_input; diff --git a/wgpu/src/renderer/widget/empty.rs b/wgpu/src/renderer/widget/empty.rs deleted file mode 100644 index 26ee74b4..00000000 --- a/wgpu/src/renderer/widget/empty.rs +++ /dev/null @@ -1,8 +0,0 @@ -use crate::{Primitive, Renderer}; -use iced_native::{empty, MouseCursor, Rectangle}; - -impl empty::Renderer for Renderer { - fn draw(&mut self, _bounds: Rectangle) -> Self::Output { - (Primitive::None, MouseCursor::OutOfBounds) - } -} diff --git a/wgpu/src/renderer/widget/space.rs b/wgpu/src/renderer/widget/space.rs new file mode 100644 index 00000000..28e05437 --- /dev/null +++ b/wgpu/src/renderer/widget/space.rs @@ -0,0 +1,8 @@ +use crate::{Primitive, Renderer}; +use iced_native::{space, MouseCursor, Rectangle}; + +impl space::Renderer for Renderer { + fn draw(&mut self, _bounds: Rectangle) -> Self::Output { + (Primitive::None, MouseCursor::OutOfBounds) + } +} -- cgit