From 66d69b5c9a183091e05e82bbe21b3203f75c1b18 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Fri, 11 Feb 2022 17:51:33 +0700 Subject: Expose `iced_pure` through a `pure` feature in `iced` Besides exposing the `iced_pure` crate, enabling the `pure` feature also provides pure versions of both the `Application` and `Sandbox` traits! :tada: --- src/pure.rs | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/pure.rs (limited to 'src/pure.rs') diff --git a/src/pure.rs b/src/pure.rs new file mode 100644 index 00000000..94d0d2a0 --- /dev/null +++ b/src/pure.rs @@ -0,0 +1,29 @@ +//! Leverage pure, virtual widgets in your application. +//! +//! The widgets found in this module are completely stateless versions of +//! [the original widgets]. +//! +//! Effectively, this means that, as a user of the library, you do not need to +//! keep track of the local state of each widget (e.g. [`button::State`]). +//! Instead, the runtime will keep track of everything for you! +//! +//! You can embed pure widgets anywhere in your [impure `Application`] using the +//! [`Pure`] widget and some [`State`]. +//! +//! In case you want to only use pure widgets in your application, this module +//! offers an alternate [`Application`] trait with a completely pure `view` +//! method. +//! +//! [the original widgets]: crate::widget +//! [`button::State`]: crate::widget::button::State +//! [impure `Application`]: crate::Application +pub use iced_pure::{Element as _, *}; + +/// A generic, pure [`Widget`]. +pub type Element = iced_pure::Element; + +mod application; +mod sandbox; + +pub use application::Application; +pub use sandbox::Sandbox; -- 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: --- src/pure.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/pure.rs') diff --git a/src/pure.rs b/src/pure.rs index 94d0d2a0..7fe2bc59 100644 --- a/src/pure.rs +++ b/src/pure.rs @@ -20,7 +20,8 @@ pub use iced_pure::{Element as _, *}; /// A generic, pure [`Widget`]. -pub type Element = iced_pure::Element; +pub type Element<'a, Message> = + iced_pure::Element<'a, Message, crate::Renderer>; mod application; mod sandbox; -- 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`. --- src/pure.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/pure.rs') diff --git a/src/pure.rs b/src/pure.rs index 7fe2bc59..29495c07 100644 --- a/src/pure.rs +++ b/src/pure.rs @@ -17,12 +17,15 @@ //! [the original widgets]: crate::widget //! [`button::State`]: crate::widget::button::State //! [impure `Application`]: crate::Application -pub use iced_pure::{Element as _, *}; +pub use iced_pure::{Element as _, Text as _, *}; /// A generic, pure [`Widget`]. pub type Element<'a, Message> = iced_pure::Element<'a, Message, crate::Renderer>; +/// A pure text widget. +pub type Text = iced_pure::Text; + mod application; mod sandbox; -- 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` --- src/pure.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/pure.rs') diff --git a/src/pure.rs b/src/pure.rs index 29495c07..712bd31f 100644 --- a/src/pure.rs +++ b/src/pure.rs @@ -17,7 +17,7 @@ //! [the original widgets]: crate::widget //! [`button::State`]: crate::widget::button::State //! [impure `Application`]: crate::Application -pub use iced_pure::{Element as _, Text as _, *}; +pub use iced_pure::{Element as _, Image as _, Text as _, *}; /// A generic, pure [`Widget`]. pub type Element<'a, Message> = @@ -26,6 +26,9 @@ pub type Element<'a, Message> = /// A pure text widget. pub type Text = iced_pure::Text; +/// A pure image widget. +pub type Image = iced_pure::Image; + mod application; mod sandbox; -- 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` --- src/pure.rs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'src/pure.rs') diff --git a/src/pure.rs b/src/pure.rs index 712bd31f..5cab5fd9 100644 --- a/src/pure.rs +++ b/src/pure.rs @@ -17,12 +17,27 @@ //! [the original widgets]: crate::widget //! [`button::State`]: crate::widget::button::State //! [impure `Application`]: crate::Application -pub use iced_pure::{Element as _, Image as _, Text as _, *}; +pub use iced_pure::{ + Button as _, Column as _, Element as _, Image as _, Row as _, Text as _, *, +}; /// A generic, pure [`Widget`]. pub type Element<'a, Message> = iced_pure::Element<'a, Message, crate::Renderer>; +/// A pure container widget. +pub type Container<'a, Message> = + iced_pure::Container<'a, Message, crate::Renderer>; + +/// A pure column widget. +pub type Column<'a, Message> = iced_pure::Column<'a, Message, crate::Renderer>; + +/// A pure row widget. +pub type Row<'a, Message> = iced_pure::Row<'a, Message, crate::Renderer>; + +/// A pure button widget. +pub type Button<'a, Message> = iced_pure::Button<'a, Message, crate::Renderer>; + /// A pure text widget. pub type Text = iced_pure::Text; -- cgit From 12c1a3f829c801022d45f1a294d8fc7fa10606e5 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Wed, 9 Mar 2022 14:10:15 +0700 Subject: Remove redundant `widget` modules in subcrates Instead, we can define the type aliases just once in the root crate! --- src/pure.rs | 1 + 1 file changed, 1 insertion(+) (limited to 'src/pure.rs') diff --git a/src/pure.rs b/src/pure.rs index 5cab5fd9..2a2984db 100644 --- a/src/pure.rs +++ b/src/pure.rs @@ -41,6 +41,7 @@ pub type Button<'a, Message> = iced_pure::Button<'a, Message, crate::Renderer>; /// A pure text widget. pub type Text = iced_pure::Text; +#[cfg(feature = "image")] /// A pure image widget. pub type Image = iced_pure::Image; -- cgit From 0cddb3c1b55017cda29d32924514e917a389f11b Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Wed, 9 Mar 2022 18:59:40 +0700 Subject: Implement `pure` version of `Canvas` widget --- src/pure.rs | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src/pure.rs') diff --git a/src/pure.rs b/src/pure.rs index 2a2984db..0fc02528 100644 --- a/src/pure.rs +++ b/src/pure.rs @@ -48,5 +48,11 @@ pub type Image = iced_pure::Image; mod application; mod sandbox; +#[cfg(feature = "canvas")] +pub use iced_graphics::widget::pure::canvas; + +#[cfg(feature = "canvas")] +pub use canvas::Canvas; + pub use application::Application; pub use sandbox::Sandbox; -- cgit From 7d7064a44dcda8251bd5ef53765ba025159a0bba Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Wed, 9 Mar 2022 19:09:40 +0700 Subject: Implement `pure` version of `game_of_life` example :tada: --- src/pure.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/pure.rs') diff --git a/src/pure.rs b/src/pure.rs index 0fc02528..f3f73bba 100644 --- a/src/pure.rs +++ b/src/pure.rs @@ -48,11 +48,11 @@ pub type Image = iced_pure::Image; mod application; mod sandbox; +pub use application::Application; +pub use sandbox::Sandbox; + #[cfg(feature = "canvas")] pub use iced_graphics::widget::pure::canvas; #[cfg(feature = "canvas")] pub use canvas::Canvas; - -pub use application::Application; -pub use sandbox::Sandbox; -- 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` --- src/pure.rs | 37 ++++++------------------------------- 1 file changed, 6 insertions(+), 31 deletions(-) (limited to 'src/pure.rs') diff --git a/src/pure.rs b/src/pure.rs index f3f73bba..948183f1 100644 --- a/src/pure.rs +++ b/src/pure.rs @@ -17,33 +17,7 @@ //! [the original widgets]: crate::widget //! [`button::State`]: crate::widget::button::State //! [impure `Application`]: crate::Application -pub use iced_pure::{ - Button as _, Column as _, Element as _, Image as _, Row as _, Text as _, *, -}; - -/// A generic, pure [`Widget`]. -pub type Element<'a, Message> = - iced_pure::Element<'a, Message, crate::Renderer>; - -/// A pure container widget. -pub type Container<'a, Message> = - iced_pure::Container<'a, Message, crate::Renderer>; - -/// A pure column widget. -pub type Column<'a, Message> = iced_pure::Column<'a, Message, crate::Renderer>; - -/// A pure row widget. -pub type Row<'a, Message> = iced_pure::Row<'a, Message, crate::Renderer>; - -/// A pure button widget. -pub type Button<'a, Message> = iced_pure::Button<'a, Message, crate::Renderer>; - -/// A pure text widget. -pub type Text = iced_pure::Text; - -#[cfg(feature = "image")] -/// A pure image widget. -pub type Image = iced_pure::Image; +pub mod widget; mod application; mod sandbox; @@ -51,8 +25,9 @@ mod sandbox; pub use application::Application; pub use sandbox::Sandbox; -#[cfg(feature = "canvas")] -pub use iced_graphics::widget::pure::canvas; +pub use iced_pure::helpers::*; +pub use iced_pure::{Pure, State}; -#[cfg(feature = "canvas")] -pub use canvas::Canvas; +/// A generic, pure [`Widget`]. +pub type Element<'a, Message> = + iced_pure::Element<'a, Message, crate::Renderer>; -- cgit