Merge branch 'master' into dev/system-information

This commit is contained in:
Richard 2022-05-10 09:50:17 -03:00
commit b440df9afb
7 changed files with 49 additions and 19 deletions

View file

@ -57,10 +57,13 @@ body:
id: version id: version
attributes: attributes:
label: Version label: Version
description: What version of iced are you using? description: |
We only offer support for the `0.4` release on crates.io and the `master` branch on this repository. Which version are you using? Please make sure you are using the latest patch available (e.g. run `cargo update`).
If you are using an older release, please upgrade to `0.4` before filing an issue.
options: options:
- master - master
- 0.3.0 - 0.4
validations: validations:
required: true required: true
- type: dropdown - type: dropdown

View file

@ -69,6 +69,9 @@ Add `iced` as a dependency in your `Cargo.toml`:
iced = "0.4" iced = "0.4"
``` ```
If your project is using a Rust edition older than 2021, then you will need to
set `resolver = "2"` in the `[package]` section as well.
__Iced moves fast and the `master` branch can contain breaking changes!__ If __Iced moves fast and the `master` branch can contain breaking changes!__ If
you want to learn about a specific release, check out [the release list]. you want to learn about a specific release, check out [the release list].

View file

@ -1,6 +1,6 @@
[package] [package]
name = "iced_pure" name = "iced_pure"
version = "0.2.0" version = "0.2.1"
edition = "2021" edition = "2021"
description = "Pure widgets for Iced" description = "Pure widgets for Iced"
license = "MIT" license = "MIT"

View file

@ -8,6 +8,8 @@ use iced_native::mouse;
use iced_native::renderer; use iced_native::renderer;
use iced_native::{Clipboard, Length, Point, Rectangle, Shell}; use iced_native::{Clipboard, Length, Point, Rectangle, Shell};
use std::borrow::Borrow;
/// A generic [`Widget`]. /// A generic [`Widget`].
/// ///
/// It is useful to build composable user interfaces that do not leak /// It is useful to build composable user interfaces that do not leak
@ -321,3 +323,19 @@ where
.map(move |overlay| overlay.map(mapper)) .map(move |overlay| overlay.map(mapper))
} }
} }
impl<'a, Message, Renderer> Borrow<dyn Widget<Message, Renderer> + 'a>
for Element<'a, Message, Renderer>
{
fn borrow(&self) -> &(dyn Widget<Message, Renderer> + 'a) {
self.widget.borrow()
}
}
impl<'a, Message, Renderer> Borrow<dyn Widget<Message, Renderer> + 'a>
for &Element<'a, Message, Renderer>
{
fn borrow(&self) -> &(dyn Widget<Message, Renderer> + 'a) {
self.widget.borrow()
}
}

View file

@ -202,7 +202,7 @@ pub fn horizontal_rule<'a>(height: u16) -> widget::Rule<'a> {
/// ///
/// [`Rule`]: widget::Rule /// [`Rule`]: widget::Rule
pub fn vertical_rule<'a>(width: u16) -> widget::Rule<'a> { pub fn vertical_rule<'a>(width: u16) -> widget::Rule<'a> {
widget::Rule::horizontal(width) widget::Rule::vertical(width)
} }
/// Creates a new [`ProgressBar`]. /// Creates a new [`ProgressBar`].

View file

@ -87,12 +87,11 @@
#![forbid(unsafe_code)] #![forbid(unsafe_code)]
#![forbid(rust_2018_idioms)] #![forbid(rust_2018_idioms)]
pub mod flex;
pub mod helpers; pub mod helpers;
pub mod overlay; pub mod overlay;
pub mod widget; pub mod widget;
pub(crate) mod flex;
mod element; mod element;
pub use element::Element; pub use element::Element;

View file

@ -1,7 +1,8 @@
//! Store internal widget state in a state tree to ensure continuity. //! Store internal widget state in a state tree to ensure continuity.
use crate::Element; use crate::Widget;
use std::any::{self, Any}; use std::any::{self, Any};
use std::borrow::Borrow;
/// A persistent state widget tree. /// A persistent state widget tree.
/// ///
@ -28,13 +29,15 @@ impl Tree {
} }
/// Creates a new [`Tree`] for the provided [`Element`]. /// Creates a new [`Tree`] for the provided [`Element`].
pub fn new<Message, Renderer>( pub fn new<'a, Message, Renderer>(
element: &Element<'_, Message, Renderer>, widget: impl Borrow<dyn Widget<Message, Renderer> + 'a>,
) -> Self { ) -> Self {
let widget = widget.borrow();
Self { Self {
tag: element.as_widget().tag(), tag: widget.tag(),
state: element.as_widget().state(), state: widget.state(),
children: element.as_widget().children(), children: widget.children(),
} }
} }
@ -46,23 +49,27 @@ impl Tree {
/// Otherwise, the whole [`Tree`] is recreated. /// Otherwise, the whole [`Tree`] is recreated.
/// ///
/// [`Widget::diff`]: crate::Widget::diff /// [`Widget::diff`]: crate::Widget::diff
pub fn diff<Message, Renderer>( pub fn diff<'a, Message, Renderer>(
&mut self, &mut self,
new: &Element<'_, Message, Renderer>, new: impl Borrow<dyn Widget<Message, Renderer> + 'a>,
) { ) {
if self.tag == new.as_widget().tag() { if self.tag == new.borrow().tag() {
new.as_widget().diff(self) new.borrow().diff(self)
} else { } else {
*self = Self::new(new); *self = Self::new(new);
} }
} }
/// Reconciliates the children of the tree with the provided list of [`Element`]. /// Reconciliates the children of the tree with the provided list of [`Element`].
pub fn diff_children<Message, Renderer>( pub fn diff_children<'a, Message, Renderer>(
&mut self, &mut self,
new_children: &[Element<'_, Message, Renderer>], new_children: &[impl Borrow<dyn Widget<Message, Renderer> + 'a>],
) { ) {
self.diff_children_custom(new_children, Self::diff, Self::new) self.diff_children_custom(
new_children,
|tree, widget| tree.diff(widget.borrow()),
|widget| Self::new(widget.borrow()),
)
} }
/// Reconciliates the children of the tree with the provided list of [`Element`] using custom /// Reconciliates the children of the tree with the provided list of [`Element`] using custom