From 897188317b5875cc00a0f1c797790df8ac13687f Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Fri, 11 Feb 2022 17:50:12 +0700 Subject: Rename `iced_virtual` to `iced_pure` `virtual` is a reserved keyword in Rust :grimacing: --- pure/src/widget.rs | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 pure/src/widget.rs (limited to 'pure/src/widget.rs') diff --git a/pure/src/widget.rs b/pure/src/widget.rs new file mode 100644 index 00000000..bf63b999 --- /dev/null +++ b/pure/src/widget.rs @@ -0,0 +1,73 @@ +mod button; +mod column; +mod element; +mod text; +mod tree; + +pub use button::Button; +pub use column::Column; +pub use element::Element; +pub use text::Text; +pub use tree::Tree; + +use iced_native::event::{self, Event}; +use iced_native::layout::{self, Layout}; +use iced_native::mouse; +use iced_native::renderer; +use iced_native::{Clipboard, Hasher, Length, Point, Rectangle, Shell}; + +use std::any::{self, Any}; + +pub trait Widget { + fn tag(&self) -> any::TypeId; + + fn state(&self) -> Box; + + fn children(&self) -> &[Element]; + + fn width(&self) -> Length; + + fn height(&self) -> Length; + + fn hash_layout(&self, state: &mut Hasher); + + fn layout( + &self, + renderer: &Renderer, + limits: &layout::Limits, + ) -> layout::Node; + + fn draw( + &self, + state: &Tree, + renderer: &mut Renderer, + style: &renderer::Style, + layout: Layout<'_>, + cursor_position: Point, + viewport: &Rectangle, + ); + + fn mouse_interaction( + &self, + _state: &Tree, + _layout: Layout<'_>, + _cursor_position: Point, + _viewport: &Rectangle, + _renderer: &Renderer, + ) -> mouse::Interaction { + mouse::Interaction::Idle + } + + fn on_event( + &mut self, + _state: &mut Tree, + _event: Event, + _layout: Layout<'_>, + _cursor_position: Point, + _renderer: &Renderer, + _clipboard: &mut dyn Clipboard, + _shell: &mut Shell<'_, Message>, + ) -> event::Status { + event::Status::Ignored + } +} -- cgit From 43a7ad72ef070929278e6d03d98077ac267fe2a6 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Fri, 11 Feb 2022 18:42:15 +0700 Subject: Expose function helpers to build widgets in `pure::widget` `button("Hello")` is easier to write and read than `Button::new("Hello")`. --- pure/src/widget.rs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'pure/src/widget.rs') diff --git a/pure/src/widget.rs b/pure/src/widget.rs index bf63b999..7215e99e 100644 --- a/pure/src/widget.rs +++ b/pure/src/widget.rs @@ -71,3 +71,20 @@ pub trait Widget { event::Status::Ignored } } + +pub fn column() -> Column { + Column::new() +} + +pub fn button( + content: impl Into>, +) -> Button { + Button::new(content) +} + +pub fn text(text: impl ToString) -> Text +where + Renderer: iced_native::text::Renderer, +{ + Text::new(text) +} -- cgit From 01c5004959c9b11f2580840f4553ad7d706f4564 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Fri, 11 Feb 2022 22:07:21 +0700 Subject: Allow pure widgets to borrow from `Application` data :tada: --- pure/src/widget.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'pure/src/widget.rs') diff --git a/pure/src/widget.rs b/pure/src/widget.rs index 7215e99e..9a4dffe3 100644 --- a/pure/src/widget.rs +++ b/pure/src/widget.rs @@ -39,7 +39,7 @@ pub trait Widget { fn draw( &self, - state: &Tree, + state: &Tree, renderer: &mut Renderer, style: &renderer::Style, layout: Layout<'_>, @@ -49,7 +49,7 @@ pub trait Widget { fn mouse_interaction( &self, - _state: &Tree, + _state: &Tree, _layout: Layout<'_>, _cursor_position: Point, _viewport: &Rectangle, @@ -60,7 +60,7 @@ pub trait Widget { fn on_event( &mut self, - _state: &mut Tree, + _state: &mut Tree, _event: Event, _layout: Layout<'_>, _cursor_position: Point, @@ -72,13 +72,13 @@ pub trait Widget { } } -pub fn column() -> Column { +pub fn column<'a, Message, Renderer>() -> Column<'a, Message, Renderer> { Column::new() } -pub fn button( - content: impl Into>, -) -> Button { +pub fn button<'a, Message, Renderer>( + content: impl Into>, +) -> Button<'a, Message, Renderer> { Button::new(content) } -- cgit From af122265f6663e429a3732ecdbbf2356688702b5 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Fri, 11 Feb 2022 23:39:41 +0700 Subject: Implement `Row` in `iced_pure` --- pure/src/widget.rs | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'pure/src/widget.rs') diff --git a/pure/src/widget.rs b/pure/src/widget.rs index 9a4dffe3..1cbd3b78 100644 --- a/pure/src/widget.rs +++ b/pure/src/widget.rs @@ -1,12 +1,14 @@ mod button; mod column; mod element; +mod row; mod text; mod tree; pub use button::Button; pub use column::Column; pub use element::Element; +pub use row::Row; pub use text::Text; pub use tree::Tree; @@ -76,6 +78,10 @@ pub fn column<'a, Message, Renderer>() -> Column<'a, Message, Renderer> { Column::new() } +pub fn row<'a, Message, Renderer>() -> Row<'a, Message, Renderer> { + Row::new() +} + pub fn button<'a, Message, Renderer>( content: impl Into>, ) -> Button<'a, Message, Renderer> { -- cgit From 182fb9446c577a6be988052a5103010e1a79addd Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sat, 12 Feb 2022 14:07:04 +0700 Subject: Implement `Container` widget in `iced_pure` --- pure/src/widget.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'pure/src/widget.rs') diff --git a/pure/src/widget.rs b/pure/src/widget.rs index 1cbd3b78..3bf6a5aa 100644 --- a/pure/src/widget.rs +++ b/pure/src/widget.rs @@ -1,5 +1,6 @@ mod button; mod column; +mod container; mod element; mod row; mod text; @@ -7,6 +8,7 @@ mod tree; pub use button::Button; pub use column::Column; +pub use container::Container; pub use element::Element; pub use row::Row; pub use text::Text; @@ -74,6 +76,15 @@ pub trait Widget { } } +pub fn container<'a, Message, Renderer>( + content: impl Into>, +) -> Container<'a, Message, Renderer> +where + Renderer: iced_native::Renderer, +{ + Container::new(content) +} + pub fn column<'a, Message, Renderer>() -> Column<'a, Message, Renderer> { Column::new() } -- cgit From dee3dba632709f57b5573dbe28827ad481287648 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sat, 12 Feb 2022 14:22:17 +0700 Subject: Reuse `Text` widget from `iced_native` in `iced_pure` --- pure/src/widget.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'pure/src/widget.rs') diff --git a/pure/src/widget.rs b/pure/src/widget.rs index 3bf6a5aa..9ab65614 100644 --- a/pure/src/widget.rs +++ b/pure/src/widget.rs @@ -99,7 +99,7 @@ pub fn button<'a, Message, Renderer>( Button::new(content) } -pub fn text(text: impl ToString) -> Text +pub fn text(text: impl Into) -> Text where Renderer: iced_native::text::Renderer, { -- cgit From 178914ec23a107cb7fa38c39be30a35d235248ab Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sat, 12 Feb 2022 14:26:17 +0700 Subject: Implement `Checkbox` in `iced_pure` --- pure/src/widget.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'pure/src/widget.rs') diff --git a/pure/src/widget.rs b/pure/src/widget.rs index 9ab65614..3488f99d 100644 --- a/pure/src/widget.rs +++ b/pure/src/widget.rs @@ -1,4 +1,5 @@ mod button; +mod checkbox; mod column; mod container; mod element; @@ -7,6 +8,7 @@ mod text; mod tree; pub use button::Button; +pub use checkbox::Checkbox; pub use column::Column; pub use container::Container; pub use element::Element; @@ -105,3 +107,14 @@ where { Text::new(text) } + +pub fn checkbox<'a, Message, Renderer>( + label: impl Into, + is_checked: bool, + f: impl Fn(bool) -> Message + 'a, +) -> Checkbox<'a, Message, Renderer> +where + Renderer: iced_native::text::Renderer, +{ + Checkbox::new(is_checked, label, f) +} -- cgit From b2670e8752eb96a4018f93b9cb8945da81a7ebff Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sat, 12 Feb 2022 15:17:44 +0700 Subject: Implement `Scrollable` in `iced_pure` --- pure/src/widget.rs | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'pure/src/widget.rs') diff --git a/pure/src/widget.rs b/pure/src/widget.rs index 3488f99d..02bf3a85 100644 --- a/pure/src/widget.rs +++ b/pure/src/widget.rs @@ -4,6 +4,7 @@ mod column; mod container; mod element; mod row; +mod scrollable; mod text; mod tree; @@ -13,6 +14,7 @@ pub use column::Column; pub use container::Container; pub use element::Element; pub use row::Row; +pub use scrollable::Scrollable; pub use text::Text; pub use tree::Tree; @@ -95,6 +97,13 @@ pub fn row<'a, Message, Renderer>() -> Row<'a, Message, Renderer> { Row::new() } +pub fn scrollable<'a, Message, Renderer>() -> Scrollable<'a, Message, Renderer> +where + Renderer: iced_native::Renderer, +{ + Scrollable::new() +} + pub fn button<'a, Message, Renderer>( content: impl Into>, ) -> Button<'a, Message, Renderer> { -- cgit From e3108494e5886c34312184292ec05dddeb8bf3ca Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sat, 12 Feb 2022 16:11:22 +0700 Subject: Implement `TextInput` in `iced_pure` --- pure/src/widget.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'pure/src/widget.rs') diff --git a/pure/src/widget.rs b/pure/src/widget.rs index 02bf3a85..8df64426 100644 --- a/pure/src/widget.rs +++ b/pure/src/widget.rs @@ -6,6 +6,7 @@ mod element; mod row; mod scrollable; mod text; +mod text_input; mod tree; pub use button::Button; @@ -16,6 +17,7 @@ pub use element::Element; pub use row::Row; pub use scrollable::Scrollable; pub use text::Text; +pub use text_input::TextInput; pub use tree::Tree; use iced_native::event::{self, Event}; @@ -127,3 +129,15 @@ where { Checkbox::new(is_checked, label, f) } + +pub fn text_input<'a, Message, Renderer>( + placeholder: &str, + value: &str, + on_change: impl Fn(String) -> Message + 'a, +) -> TextInput<'a, Message, Renderer> +where + Message: Clone, + Renderer: iced_native::text::Renderer, +{ + TextInput::new(placeholder, value, on_change) +} -- cgit From bd22cc0bc0f7551d29cf2acd22520f4a906f253c Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sat, 12 Feb 2022 17:21:28 +0700 Subject: Implement pure version of `todos` example :tada: The `Widget` trait in `iced_pure` needed to change a bit to make the implementation of `Element::map` possible. Specifically, the `children` method has been split into `diff` and `children_state`. --- pure/src/widget.rs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'pure/src/widget.rs') diff --git a/pure/src/widget.rs b/pure/src/widget.rs index 8df64426..302a057a 100644 --- a/pure/src/widget.rs +++ b/pure/src/widget.rs @@ -33,7 +33,9 @@ pub trait Widget { fn state(&self) -> Box; - fn children(&self) -> &[Element]; + fn diff(&self, tree: &mut Tree); + + fn children_state(&self) -> Vec; fn width(&self) -> Length; @@ -99,11 +101,13 @@ pub fn row<'a, Message, Renderer>() -> Row<'a, Message, Renderer> { Row::new() } -pub fn scrollable<'a, Message, Renderer>() -> Scrollable<'a, Message, Renderer> +pub fn scrollable<'a, Message, Renderer>( + content: impl Into>, +) -> Scrollable<'a, Message, Renderer> where Renderer: iced_native::Renderer, { - Scrollable::new() + Scrollable::new(content) } pub fn button<'a, Message, Renderer>( -- cgit From 45455be45000c0d41d18eced1b62eab049c5e9c0 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sun, 13 Feb 2022 16:51:31 +0700 Subject: Implement `Image` in `iced_pure` --- pure/src/widget.rs | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'pure/src/widget.rs') diff --git a/pure/src/widget.rs b/pure/src/widget.rs index 302a057a..93298c61 100644 --- a/pure/src/widget.rs +++ b/pure/src/widget.rs @@ -1,3 +1,5 @@ +pub mod image; + mod button; mod checkbox; mod column; @@ -14,6 +16,7 @@ pub use checkbox::Checkbox; pub use column::Column; pub use container::Container; pub use element::Element; +pub use image::Image; pub use row::Row; pub use scrollable::Scrollable; pub use text::Text; @@ -145,3 +148,7 @@ where { TextInput::new(placeholder, value, on_change) } + +pub fn image(handle: Handle) -> Image { + Image::new(handle) +} -- cgit From 3f1a45ca47dc086a5c4e45867d3f9c63a4e7ba19 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sun, 13 Feb 2022 17:20:10 +0700 Subject: Implement `Slider` in `iced_pure` --- pure/src/widget.rs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'pure/src/widget.rs') diff --git a/pure/src/widget.rs b/pure/src/widget.rs index 93298c61..009741a8 100644 --- a/pure/src/widget.rs +++ b/pure/src/widget.rs @@ -7,6 +7,7 @@ mod container; mod element; mod row; mod scrollable; +mod slider; mod text; mod text_input; mod tree; @@ -19,6 +20,7 @@ pub use element::Element; pub use image::Image; pub use row::Row; pub use scrollable::Scrollable; +pub use slider::Slider; pub use text::Text; pub use text_input::TextInput; pub use tree::Tree; @@ -36,8 +38,6 @@ pub trait Widget { fn state(&self) -> Box; - fn diff(&self, tree: &mut Tree); - fn children_state(&self) -> Vec; fn width(&self) -> Length; @@ -62,6 +62,8 @@ pub trait Widget { viewport: &Rectangle, ); + fn diff(&self, _tree: &mut Tree) {} + fn mouse_interaction( &self, _state: &Tree, @@ -149,6 +151,19 @@ where TextInput::new(placeholder, value, on_change) } +pub fn slider<'a, Message, Renderer, T>( + range: std::ops::RangeInclusive, + value: T, + on_change: impl Fn(T) -> Message + 'a, +) -> Slider<'a, T, Message> +where + Message: Clone, + Renderer: iced_native::Renderer, + T: Copy + From + std::cmp::PartialOrd, +{ + Slider::new(range, value, on_change) +} + pub fn image(handle: Handle) -> Image { Image::new(handle) } -- cgit From 0fec0a2b77b6b9447117f2fea81c700a25fbca6d Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sun, 13 Feb 2022 19:01:09 +0700 Subject: Implement `Toggler` in `iced_pure` --- pure/src/widget.rs | 2 ++ 1 file changed, 2 insertions(+) (limited to 'pure/src/widget.rs') diff --git a/pure/src/widget.rs b/pure/src/widget.rs index 009741a8..1c0633a6 100644 --- a/pure/src/widget.rs +++ b/pure/src/widget.rs @@ -10,6 +10,7 @@ mod scrollable; mod slider; mod text; mod text_input; +mod toggler; mod tree; pub use button::Button; @@ -23,6 +24,7 @@ pub use scrollable::Scrollable; pub use slider::Slider; pub use text::Text; pub use text_input::TextInput; +pub use toggler::Toggler; pub use tree::Tree; use iced_native::event::{self, Event}; -- cgit From e50e639b0edc6eee41754e6faee45936fedeebd8 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sun, 13 Feb 2022 19:23:51 +0700 Subject: Expose additional helpers in `iced::pure` --- pure/src/widget.rs | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'pure/src/widget.rs') diff --git a/pure/src/widget.rs b/pure/src/widget.rs index 1c0633a6..fc86e1c2 100644 --- a/pure/src/widget.rs +++ b/pure/src/widget.rs @@ -141,6 +141,17 @@ where Checkbox::new(is_checked, label, f) } +pub fn toggler<'a, Message, Renderer>( + label: impl Into>, + is_checked: bool, + f: impl Fn(bool) -> Message + 'a, +) -> Toggler<'a, Message, Renderer> +where + Renderer: iced_native::text::Renderer, +{ + Toggler::new(is_checked, label, f) +} + pub fn text_input<'a, Message, Renderer>( placeholder: &str, value: &str, @@ -153,19 +164,18 @@ where TextInput::new(placeholder, value, on_change) } -pub fn slider<'a, Message, Renderer, T>( +pub fn slider<'a, Message, T>( range: std::ops::RangeInclusive, value: T, on_change: impl Fn(T) -> Message + 'a, ) -> Slider<'a, T, Message> where Message: Clone, - Renderer: iced_native::Renderer, T: Copy + From + std::cmp::PartialOrd, { Slider::new(range, value, on_change) } -pub fn image(handle: Handle) -> Image { - Image::new(handle) +pub fn image(handle: impl Into) -> Image { + Image::new(handle.into()) } -- cgit From 53f382043235d7ab9eae9b0882de3e8c77cc0d40 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sun, 13 Feb 2022 22:13:47 +0700 Subject: Implement `Radio` in `iced_pure` --- pure/src/widget.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'pure/src/widget.rs') diff --git a/pure/src/widget.rs b/pure/src/widget.rs index fc86e1c2..7b5fc0bc 100644 --- a/pure/src/widget.rs +++ b/pure/src/widget.rs @@ -5,6 +5,7 @@ mod checkbox; mod column; mod container; mod element; +mod radio; mod row; mod scrollable; mod slider; @@ -19,6 +20,7 @@ pub use column::Column; pub use container::Container; pub use element::Element; pub use image::Image; +pub use radio::Radio; pub use row::Row; pub use scrollable::Scrollable; pub use slider::Slider; @@ -141,6 +143,20 @@ where Checkbox::new(is_checked, label, f) } +pub fn radio<'a, Message, Renderer, V>( + label: impl Into, + value: V, + selected: Option, + on_click: impl FnOnce(V) -> Message, +) -> Radio<'a, Message, Renderer> +where + Message: Clone, + Renderer: iced_native::text::Renderer, + V: Copy + Eq, +{ + Radio::new(value, label, selected, on_click) +} + pub fn toggler<'a, Message, Renderer>( label: impl Into>, is_checked: bool, -- cgit From 6689ede6d8ce0d65ec3ce29fd863ec7f26052621 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sun, 13 Feb 2022 22:18:21 +0700 Subject: Implement `Space` in `iced_pure` --- pure/src/widget.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'pure/src/widget.rs') diff --git a/pure/src/widget.rs b/pure/src/widget.rs index 7b5fc0bc..9112dd9a 100644 --- a/pure/src/widget.rs +++ b/pure/src/widget.rs @@ -9,6 +9,7 @@ mod radio; mod row; mod scrollable; mod slider; +mod space; mod text; mod text_input; mod toggler; @@ -24,6 +25,7 @@ pub use radio::Radio; pub use row::Row; pub use scrollable::Scrollable; pub use slider::Slider; +pub use space::Space; pub use text::Text; pub use text_input::TextInput; pub use toggler::Toggler; @@ -195,3 +197,11 @@ where pub fn image(handle: impl Into) -> Image { Image::new(handle.into()) } + +pub fn horizontal_space(width: Length) -> Space { + Space::with_width(width) +} + +pub fn vertical_space(height: Length) -> Space { + Space::with_height(height) +} -- cgit From 35e9b75e415ef3b9124051696b60628ef56afe47 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Wed, 16 Feb 2022 15:44:50 +0700 Subject: Introduce `Tag` and `State` opaque types in `iced_pure::widget::tree` --- pure/src/widget.rs | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'pure/src/widget.rs') diff --git a/pure/src/widget.rs b/pure/src/widget.rs index 9112dd9a..03b668d3 100644 --- a/pure/src/widget.rs +++ b/pure/src/widget.rs @@ -37,15 +37,7 @@ use iced_native::mouse; use iced_native::renderer; use iced_native::{Clipboard, Hasher, Length, Point, Rectangle, Shell}; -use std::any::{self, Any}; - pub trait Widget { - fn tag(&self) -> any::TypeId; - - fn state(&self) -> Box; - - fn children_state(&self) -> Vec; - fn width(&self) -> Length; fn height(&self) -> Length; @@ -68,6 +60,18 @@ pub trait Widget { viewport: &Rectangle, ); + fn tag(&self) -> tree::Tag { + tree::Tag::stateless() + } + + fn state(&self) -> tree::State { + tree::State::None + } + + fn children(&self) -> Vec { + Vec::new() + } + fn diff(&self, _tree: &mut Tree) {} fn mouse_interaction( -- cgit From 019af8ddbf96680ffcee2b3407819e90575760cb Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Wed, 16 Feb 2022 17:07:25 +0700 Subject: Add `overlay` support in `iced_pure` and port `PickList` :tada: --- pure/src/widget.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'pure/src/widget.rs') diff --git a/pure/src/widget.rs b/pure/src/widget.rs index 03b668d3..6dda653d 100644 --- a/pure/src/widget.rs +++ b/pure/src/widget.rs @@ -5,6 +5,7 @@ mod checkbox; mod column; mod container; mod element; +mod pick_list; mod radio; mod row; mod scrollable; @@ -21,6 +22,7 @@ pub use column::Column; pub use container::Container; pub use element::Element; pub use image::Image; +pub use pick_list::PickList; pub use radio::Radio; pub use row::Row; pub use scrollable::Scrollable; @@ -34,6 +36,7 @@ pub use tree::Tree; use iced_native::event::{self, Event}; use iced_native::layout::{self, Layout}; use iced_native::mouse; +use iced_native::overlay; use iced_native::renderer; use iced_native::{Clipboard, Hasher, Length, Point, Rectangle, Shell}; @@ -97,6 +100,15 @@ pub trait Widget { ) -> event::Status { event::Status::Ignored } + + fn overlay<'a>( + &'a mut self, + _state: &'a mut Tree, + _layout: Layout<'_>, + _renderer: &Renderer, + ) -> Option> { + None + } } pub fn container<'a, Message, Renderer>( -- cgit From 6e242fe0e506f8086371a24f03e7fbe3a10ca2ae Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Wed, 16 Feb 2022 17:15:43 +0700 Subject: Add `pick_list` function helper in `iced_pure::widget` --- pure/src/widget.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'pure/src/widget.rs') diff --git a/pure/src/widget.rs b/pure/src/widget.rs index 6dda653d..62f9d95b 100644 --- a/pure/src/widget.rs +++ b/pure/src/widget.rs @@ -40,6 +40,8 @@ use iced_native::overlay; use iced_native::renderer; use iced_native::{Clipboard, Hasher, Length, Point, Rectangle, Shell}; +use std::borrow::Cow; + pub trait Widget { fn width(&self) -> Length; @@ -210,6 +212,19 @@ where Slider::new(range, value, on_change) } +pub fn pick_list<'a, Message, Renderer, T>( + options: impl Into>, + selected: Option, + on_selected: impl Fn(T) -> Message + 'a, +) -> PickList<'a, T, Message, Renderer> +where + T: ToString + Eq + 'static, + [T]: ToOwned>, + Renderer: iced_native::text::Renderer, +{ + PickList::new(options, selected, on_selected) +} + pub fn image(handle: impl Into) -> Image { Image::new(handle.into()) } -- cgit From da45b6c1627935bff5334d213096c4e78972af46 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Thu, 17 Feb 2022 19:08:54 +0700 Subject: Implement `pure::Component` in `iced_lazy` --- pure/src/widget.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'pure/src/widget.rs') diff --git a/pure/src/widget.rs b/pure/src/widget.rs index 62f9d95b..a12d6fad 100644 --- a/pure/src/widget.rs +++ b/pure/src/widget.rs @@ -1,4 +1,5 @@ pub mod image; +pub mod tree; mod button; mod checkbox; @@ -14,7 +15,6 @@ mod space; mod text; mod text_input; mod toggler; -mod tree; pub use button::Button; pub use checkbox::Checkbox; @@ -104,7 +104,7 @@ pub trait Widget { } fn overlay<'a>( - &'a mut self, + &'a self, _state: &'a mut Tree, _layout: Layout<'_>, _renderer: &Renderer, -- cgit From 0fbd1d98b5534a85eaa8bff40f5fa1d395edc977 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Thu, 10 Mar 2022 16:58:55 +0700 Subject: Implement `pure` version of `Rule` widget --- pure/src/widget.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'pure/src/widget.rs') diff --git a/pure/src/widget.rs b/pure/src/widget.rs index c516c1f2..bee21633 100644 --- a/pure/src/widget.rs +++ b/pure/src/widget.rs @@ -1,4 +1,5 @@ pub mod image; +pub mod rule; pub mod tree; mod button; @@ -25,6 +26,7 @@ pub use image::Image; pub use pick_list::PickList; pub use radio::Radio; pub use row::Row; +pub use rule::Rule; pub use scrollable::Scrollable; pub use slider::Slider; pub use space::Space; @@ -234,3 +236,13 @@ pub fn horizontal_space(width: Length) -> Space { pub fn vertical_space(height: Length) -> Space { Space::with_height(height) } + +/// Creates a horizontal [`Rule`] with the given height. +pub fn horizontal_rule<'a>(height: u16) -> Rule<'a> { + Rule::horizontal(height) +} + +/// Creates a vertical [`Rule`] with the given width. +pub fn vertical_rule<'a>(width: u16) -> Rule<'a> { + Rule::horizontal(width) +} -- cgit From 3efb59dea3d206a9d627ce5a7a7a93c00d769ba8 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Thu, 10 Mar 2022 17:01:57 +0700 Subject: Implement `pure` version of `ProgressBar` widget --- pure/src/widget.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'pure/src/widget.rs') diff --git a/pure/src/widget.rs b/pure/src/widget.rs index bee21633..8f2cf920 100644 --- a/pure/src/widget.rs +++ b/pure/src/widget.rs @@ -1,4 +1,5 @@ pub mod image; +pub mod progress_bar; pub mod rule; pub mod tree; @@ -24,6 +25,7 @@ pub use container::Container; pub use element::Element; pub use image::Image; pub use pick_list::PickList; +pub use progress_bar::ProgressBar; pub use radio::Radio; pub use row::Row; pub use rule::Rule; @@ -43,6 +45,7 @@ use iced_native::renderer; use iced_native::{Clipboard, Length, Point, Rectangle, Shell}; use std::borrow::Cow; +use std::ops::RangeInclusive; pub trait Widget { fn width(&self) -> Length; @@ -246,3 +249,15 @@ pub fn horizontal_rule<'a>(height: u16) -> Rule<'a> { pub fn vertical_rule<'a>(width: u16) -> Rule<'a> { Rule::horizontal(width) } + +/// Creates a new [`ProgressBar`]. +/// +/// It expects: +/// * an inclusive range of possible values +/// * the current value of the [`ProgressBar`] +pub fn progress_bar<'a>( + range: RangeInclusive, + value: f32, +) -> ProgressBar<'a> { + ProgressBar::new(range, value) +} -- cgit From 6dd187ff0822230f084e43636b1aabeb1baf06f6 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Thu, 10 Mar 2022 19:25:57 +0700 Subject: Implement `pure` version of `PaneGrid` widget --- pure/src/widget.rs | 2 ++ 1 file changed, 2 insertions(+) (limited to 'pure/src/widget.rs') diff --git a/pure/src/widget.rs b/pure/src/widget.rs index 8f2cf920..564f0583 100644 --- a/pure/src/widget.rs +++ b/pure/src/widget.rs @@ -1,4 +1,5 @@ pub mod image; +pub mod pane_grid; pub mod progress_bar; pub mod rule; pub mod tree; @@ -24,6 +25,7 @@ pub use column::Column; pub use container::Container; pub use element::Element; pub use image::Image; +pub use pane_grid::PaneGrid; pub use pick_list::PickList; pub use progress_bar::ProgressBar; pub use radio::Radio; -- cgit From d7100fd2597da82d97eaf196d50573ea64f3f8ff Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Wed, 16 Mar 2022 17:37:19 +0700 Subject: Export widget modules in `iced_pure` ... and fix collisions with the new `helpers` --- pure/src/widget.rs | 169 +++-------------------------------------------------- 1 file changed, 9 insertions(+), 160 deletions(-) (limited to 'pure/src/widget.rs') diff --git a/pure/src/widget.rs b/pure/src/widget.rs index 564f0583..be73c5fa 100644 --- a/pure/src/widget.rs +++ b/pure/src/widget.rs @@ -1,29 +1,27 @@ +pub mod button; +pub mod checkbox; +pub mod container; pub mod image; pub mod pane_grid; +pub mod pick_list; pub mod progress_bar; +pub mod radio; pub mod rule; +pub mod scrollable; +pub mod slider; +pub mod text_input; +pub mod toggler; pub mod tree; -mod button; -mod checkbox; mod column; -mod container; -mod element; -mod pick_list; -mod radio; mod row; -mod scrollable; -mod slider; mod space; mod text; -mod text_input; -mod toggler; pub use button::Button; pub use checkbox::Checkbox; pub use column::Column; pub use container::Container; -pub use element::Element; pub use image::Image; pub use pane_grid::PaneGrid; pub use pick_list::PickList; @@ -46,9 +44,6 @@ use iced_native::overlay; use iced_native::renderer; use iced_native::{Clipboard, Length, Point, Rectangle, Shell}; -use std::borrow::Cow; -use std::ops::RangeInclusive; - pub trait Widget { fn width(&self) -> Length; @@ -117,149 +112,3 @@ pub trait Widget { None } } - -pub fn container<'a, Message, Renderer>( - content: impl Into>, -) -> Container<'a, Message, Renderer> -where - Renderer: iced_native::Renderer, -{ - Container::new(content) -} - -pub fn column<'a, Message, Renderer>() -> Column<'a, Message, Renderer> { - Column::new() -} - -pub fn row<'a, Message, Renderer>() -> Row<'a, Message, Renderer> { - Row::new() -} - -pub fn scrollable<'a, Message, Renderer>( - content: impl Into>, -) -> Scrollable<'a, Message, Renderer> -where - Renderer: iced_native::Renderer, -{ - Scrollable::new(content) -} - -pub fn button<'a, Message, Renderer>( - content: impl Into>, -) -> Button<'a, Message, Renderer> { - Button::new(content) -} - -pub fn text(text: impl Into) -> Text -where - Renderer: iced_native::text::Renderer, -{ - Text::new(text) -} - -pub fn checkbox<'a, Message, Renderer>( - label: impl Into, - is_checked: bool, - f: impl Fn(bool) -> Message + 'a, -) -> Checkbox<'a, Message, Renderer> -where - Renderer: iced_native::text::Renderer, -{ - Checkbox::new(is_checked, label, f) -} - -pub fn radio<'a, Message, Renderer, V>( - label: impl Into, - value: V, - selected: Option, - on_click: impl FnOnce(V) -> Message, -) -> Radio<'a, Message, Renderer> -where - Message: Clone, - Renderer: iced_native::text::Renderer, - V: Copy + Eq, -{ - Radio::new(value, label, selected, on_click) -} - -pub fn toggler<'a, Message, Renderer>( - label: impl Into>, - is_checked: bool, - f: impl Fn(bool) -> Message + 'a, -) -> Toggler<'a, Message, Renderer> -where - Renderer: iced_native::text::Renderer, -{ - Toggler::new(is_checked, label, f) -} - -pub fn text_input<'a, Message, Renderer>( - placeholder: &str, - value: &str, - on_change: impl Fn(String) -> Message + 'a, -) -> TextInput<'a, Message, Renderer> -where - Message: Clone, - Renderer: iced_native::text::Renderer, -{ - TextInput::new(placeholder, value, on_change) -} - -pub fn slider<'a, Message, T>( - range: std::ops::RangeInclusive, - value: T, - on_change: impl Fn(T) -> Message + 'a, -) -> Slider<'a, T, Message> -where - Message: Clone, - T: Copy + From + std::cmp::PartialOrd, -{ - Slider::new(range, value, on_change) -} - -pub fn pick_list<'a, Message, Renderer, T>( - options: impl Into>, - selected: Option, - on_selected: impl Fn(T) -> Message + 'a, -) -> PickList<'a, T, Message, Renderer> -where - T: ToString + Eq + 'static, - [T]: ToOwned>, - Renderer: iced_native::text::Renderer, -{ - PickList::new(options, selected, on_selected) -} - -pub fn image(handle: impl Into) -> Image { - Image::new(handle.into()) -} - -pub fn horizontal_space(width: Length) -> Space { - Space::with_width(width) -} - -pub fn vertical_space(height: Length) -> Space { - Space::with_height(height) -} - -/// Creates a horizontal [`Rule`] with the given height. -pub fn horizontal_rule<'a>(height: u16) -> Rule<'a> { - Rule::horizontal(height) -} - -/// Creates a vertical [`Rule`] with the given width. -pub fn vertical_rule<'a>(width: u16) -> Rule<'a> { - Rule::horizontal(width) -} - -/// Creates a new [`ProgressBar`]. -/// -/// It expects: -/// * an inclusive range of possible values -/// * the current value of the [`ProgressBar`] -pub fn progress_bar<'a>( - range: RangeInclusive, - value: f32, -) -> ProgressBar<'a> { - ProgressBar::new(range, value) -} -- cgit From ef4c79ea23e86fec9a8ad0fb27463296c14400e5 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Tue, 22 Mar 2022 23:40:08 +0700 Subject: Implement `pure` version of `Svg` widget --- pure/src/widget.rs | 2 ++ 1 file changed, 2 insertions(+) (limited to 'pure/src/widget.rs') diff --git a/pure/src/widget.rs b/pure/src/widget.rs index be73c5fa..8200f9a7 100644 --- a/pure/src/widget.rs +++ b/pure/src/widget.rs @@ -9,6 +9,7 @@ pub mod radio; pub mod rule; pub mod scrollable; pub mod slider; +pub mod svg; pub mod text_input; pub mod toggler; pub mod tree; @@ -32,6 +33,7 @@ pub use rule::Rule; pub use scrollable::Scrollable; pub use slider::Slider; pub use space::Space; +pub use svg::Svg; pub use text::Text; pub use text_input::TextInput; pub use toggler::Toggler; -- cgit