Use Borrow instead of AsRef to allow easier casting
This commit is contained in:
parent
f1c1d519c5
commit
59aeb20600
2 changed files with 22 additions and 11 deletions
|
|
@ -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
|
||||||
|
|
@ -322,10 +324,18 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, Message, Renderer> AsRef<dyn Widget<Message, Renderer> + 'a>
|
impl<'a, Message, Renderer> Borrow<dyn Widget<Message, Renderer> + 'a>
|
||||||
for Element<'a, Message, Renderer>
|
for Element<'a, Message, Renderer>
|
||||||
{
|
{
|
||||||
fn as_ref(&self) -> &(dyn Widget<Message, Renderer> + 'a) {
|
fn borrow(&self) -> &(dyn Widget<Message, Renderer> + 'a) {
|
||||||
self.widget.as_ref()
|
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()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
use crate::Widget;
|
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.
|
||||||
///
|
///
|
||||||
|
|
@ -29,9 +30,9 @@ impl Tree {
|
||||||
|
|
||||||
/// Creates a new [`Tree`] for the provided [`Element`].
|
/// Creates a new [`Tree`] for the provided [`Element`].
|
||||||
pub fn new<'a, Message, Renderer>(
|
pub fn new<'a, Message, Renderer>(
|
||||||
widget: impl AsRef<dyn Widget<Message, Renderer> + 'a>,
|
widget: impl Borrow<dyn Widget<Message, Renderer> + 'a>,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let widget = widget.as_ref();
|
let widget = widget.borrow();
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
tag: widget.tag(),
|
tag: widget.tag(),
|
||||||
|
|
@ -50,10 +51,10 @@ impl Tree {
|
||||||
/// [`Widget::diff`]: crate::Widget::diff
|
/// [`Widget::diff`]: crate::Widget::diff
|
||||||
pub fn diff<'a, Message, Renderer>(
|
pub fn diff<'a, Message, Renderer>(
|
||||||
&mut self,
|
&mut self,
|
||||||
new: impl AsRef<dyn Widget<Message, Renderer> + 'a>,
|
new: impl Borrow<dyn Widget<Message, Renderer> + 'a>,
|
||||||
) {
|
) {
|
||||||
if self.tag == new.as_ref().tag() {
|
if self.tag == new.borrow().tag() {
|
||||||
new.as_ref().diff(self)
|
new.borrow().diff(self)
|
||||||
} else {
|
} else {
|
||||||
*self = Self::new(new);
|
*self = Self::new(new);
|
||||||
}
|
}
|
||||||
|
|
@ -62,12 +63,12 @@ impl Tree {
|
||||||
/// 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<'a, Message, Renderer>(
|
pub fn diff_children<'a, Message, Renderer>(
|
||||||
&mut self,
|
&mut self,
|
||||||
new_children: &[impl AsRef<dyn Widget<Message, Renderer> + 'a>],
|
new_children: &[impl Borrow<dyn Widget<Message, Renderer> + 'a>],
|
||||||
) {
|
) {
|
||||||
self.diff_children_custom(
|
self.diff_children_custom(
|
||||||
new_children,
|
new_children,
|
||||||
|tree, widget| Self::diff(tree, widget),
|
|tree, widget| tree.diff(widget.borrow()),
|
||||||
|widget| Self::new(widget),
|
|widget| Self::new(widget.borrow()),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue