Rename iced_lazy::Cached to Lazy 🎉
This commit is contained in:
parent
adf541d432
commit
1cdc1fcd06
3 changed files with 50 additions and 40 deletions
|
|
@ -3,7 +3,7 @@ use iced::widget::{
|
||||||
button, column, horizontal_space, row, scrollable, text, text_input,
|
button, column, horizontal_space, row, scrollable, text, text_input,
|
||||||
};
|
};
|
||||||
use iced::{Element, Length, Sandbox, Settings};
|
use iced::{Element, Length, Sandbox, Settings};
|
||||||
use iced_lazy::Cached;
|
use iced_lazy::lazy;
|
||||||
|
|
||||||
use std::collections::HashSet;
|
use std::collections::HashSet;
|
||||||
|
|
||||||
|
|
@ -71,39 +71,36 @@ impl Sandbox for App {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn view(&self) -> Element<Message> {
|
fn view(&self) -> Element<Message> {
|
||||||
let options =
|
let options = lazy((&self.sort_order, self.options.len()), || {
|
||||||
Cached::new((&self.sort_order, self.options.len()), || {
|
let mut options: Vec<_> = self.options.iter().collect();
|
||||||
let mut options: Vec<_> = self.options.iter().collect();
|
|
||||||
|
|
||||||
options.sort_by(|a, b| match self.sort_order {
|
options.sort_by(|a, b| match self.sort_order {
|
||||||
SortOrder::Ascending => {
|
SortOrder::Ascending => a.to_lowercase().cmp(&b.to_lowercase()),
|
||||||
a.to_lowercase().cmp(&b.to_lowercase())
|
SortOrder::Descending => {
|
||||||
}
|
b.to_lowercase().cmp(&a.to_lowercase())
|
||||||
SortOrder::Descending => {
|
}
|
||||||
b.to_lowercase().cmp(&a.to_lowercase())
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
column(
|
|
||||||
options
|
|
||||||
.into_iter()
|
|
||||||
.map(|option| {
|
|
||||||
row![
|
|
||||||
text(option),
|
|
||||||
horizontal_space(Length::Fill),
|
|
||||||
button("Delete")
|
|
||||||
.on_press(Message::DeleteOption(
|
|
||||||
option.to_string(),
|
|
||||||
),)
|
|
||||||
.style(theme::Button::Destructive)
|
|
||||||
]
|
|
||||||
.into()
|
|
||||||
})
|
|
||||||
.collect(),
|
|
||||||
)
|
|
||||||
.spacing(10)
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
column(
|
||||||
|
options
|
||||||
|
.into_iter()
|
||||||
|
.map(|option| {
|
||||||
|
row![
|
||||||
|
text(option),
|
||||||
|
horizontal_space(Length::Fill),
|
||||||
|
button("Delete")
|
||||||
|
.on_press(Message::DeleteOption(
|
||||||
|
option.to_string(),
|
||||||
|
),)
|
||||||
|
.style(theme::Button::Destructive)
|
||||||
|
]
|
||||||
|
.into()
|
||||||
|
})
|
||||||
|
.collect(),
|
||||||
|
)
|
||||||
|
.spacing(10)
|
||||||
|
});
|
||||||
|
|
||||||
column![
|
column![
|
||||||
scrollable(options).height(Length::Fill),
|
scrollable(options).height(Length::Fill),
|
||||||
row![
|
row![
|
||||||
|
|
|
||||||
|
|
@ -15,14 +15,14 @@ use std::marker::PhantomData;
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
|
|
||||||
#[allow(missing_debug_implementations)]
|
#[allow(missing_debug_implementations)]
|
||||||
pub struct Cached<'a, Message, Renderer, Dependency, View> {
|
pub struct Lazy<'a, Message, Renderer, Dependency, View> {
|
||||||
dependency: Dependency,
|
dependency: Dependency,
|
||||||
view: Box<dyn Fn() -> View + 'a>,
|
view: Box<dyn Fn() -> View + 'a>,
|
||||||
element: RefCell<Option<Rc<RefCell<Element<'static, Message, Renderer>>>>>,
|
element: RefCell<Option<Rc<RefCell<Element<'static, Message, Renderer>>>>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, Message, Renderer, Dependency, View>
|
impl<'a, Message, Renderer, Dependency, View>
|
||||||
Cached<'a, Message, Renderer, Dependency, View>
|
Lazy<'a, Message, Renderer, Dependency, View>
|
||||||
where
|
where
|
||||||
Dependency: Hash + 'a,
|
Dependency: Hash + 'a,
|
||||||
View: Into<Element<'static, Message, Renderer>>,
|
View: Into<Element<'static, Message, Renderer>>,
|
||||||
|
|
@ -56,7 +56,7 @@ struct Internal<Message, Renderer> {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, Message, Renderer, Dependency, View> Widget<Message, Renderer>
|
impl<'a, Message, Renderer, Dependency, View> Widget<Message, Renderer>
|
||||||
for Cached<'a, Message, Renderer, Dependency, View>
|
for Lazy<'a, Message, Renderer, Dependency, View>
|
||||||
where
|
where
|
||||||
View: Into<Element<'static, Message, Renderer>> + 'static,
|
View: Into<Element<'static, Message, Renderer>> + 'static,
|
||||||
Dependency: Hash + 'a,
|
Dependency: Hash + 'a,
|
||||||
|
|
@ -237,7 +237,7 @@ where
|
||||||
|
|
||||||
#[self_referencing]
|
#[self_referencing]
|
||||||
struct Overlay<'a, 'b, Message, Renderer, Dependency, View> {
|
struct Overlay<'a, 'b, Message, Renderer, Dependency, View> {
|
||||||
cached: &'a Cached<'b, Message, Renderer, Dependency, View>,
|
cached: &'a Lazy<'b, Message, Renderer, Dependency, View>,
|
||||||
tree: &'a mut Tree,
|
tree: &'a mut Tree,
|
||||||
types: PhantomData<(Message, Dependency, View)>,
|
types: PhantomData<(Message, Dependency, View)>,
|
||||||
|
|
||||||
|
|
@ -348,7 +348,7 @@ where
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, Message, Renderer, Dependency, View>
|
impl<'a, Message, Renderer, Dependency, View>
|
||||||
From<Cached<'a, Message, Renderer, Dependency, View>>
|
From<Lazy<'a, Message, Renderer, Dependency, View>>
|
||||||
for Element<'a, Message, Renderer>
|
for Element<'a, Message, Renderer>
|
||||||
where
|
where
|
||||||
View: Into<Element<'static, Message, Renderer>> + 'static,
|
View: Into<Element<'static, Message, Renderer>> + 'static,
|
||||||
|
|
@ -356,7 +356,7 @@ where
|
||||||
Message: 'static,
|
Message: 'static,
|
||||||
Dependency: Hash + 'a,
|
Dependency: Hash + 'a,
|
||||||
{
|
{
|
||||||
fn from(cached: Cached<'a, Message, Renderer, Dependency, View>) -> Self {
|
fn from(lazy: Lazy<'a, Message, Renderer, Dependency, View>) -> Self {
|
||||||
Self::new(cached)
|
Self::new(lazy)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -17,17 +17,30 @@
|
||||||
clippy::type_complexity
|
clippy::type_complexity
|
||||||
)]
|
)]
|
||||||
#![cfg_attr(docsrs, feature(doc_cfg))]
|
#![cfg_attr(docsrs, feature(doc_cfg))]
|
||||||
pub mod cached;
|
mod lazy;
|
||||||
|
|
||||||
pub mod component;
|
pub mod component;
|
||||||
pub mod responsive;
|
pub mod responsive;
|
||||||
|
|
||||||
pub use cached::Cached;
|
|
||||||
pub use component::Component;
|
pub use component::Component;
|
||||||
|
pub use lazy::Lazy;
|
||||||
pub use responsive::Responsive;
|
pub use responsive::Responsive;
|
||||||
|
|
||||||
mod cache;
|
mod cache;
|
||||||
|
|
||||||
use iced_native::{Element, Size};
|
use iced_native::{Element, Size};
|
||||||
|
use std::hash::Hash;
|
||||||
|
|
||||||
|
pub fn lazy<'a, Message, Renderer, Dependency, View>(
|
||||||
|
dependency: Dependency,
|
||||||
|
view: impl Fn() -> View + 'a,
|
||||||
|
) -> Lazy<'a, Message, Renderer, Dependency, View>
|
||||||
|
where
|
||||||
|
Dependency: Hash + 'a,
|
||||||
|
View: Into<Element<'static, Message, Renderer>>,
|
||||||
|
{
|
||||||
|
Lazy::new(dependency, view)
|
||||||
|
}
|
||||||
|
|
||||||
/// Turns an implementor of [`Component`] into an [`Element`] that can be
|
/// Turns an implementor of [`Component`] into an [`Element`] that can be
|
||||||
/// embedded in any application.
|
/// embedded in any application.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue