Merge pull request #267 from robjtede/improve/canvas-cache-default

impl default for canvas cache
This commit is contained in:
Héctor Ramón 2020-04-09 00:34:37 +02:00 committed by GitHub
commit d51b501d2f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 26 additions and 9 deletions

View File

@ -29,7 +29,7 @@ impl Application for Clock {
(
Clock {
now: chrono::Local::now().into(),
clock: canvas::layer::Cache::new(),
clock: Default::default(),
},
Command::none(),
)

View File

@ -39,7 +39,7 @@ impl Application for SolarSystem {
(
SolarSystem {
state: State::new(),
solar_system: canvas::layer::Cache::new(),
solar_system: Default::default(),
},
Command::none(),
)

View File

@ -6,6 +6,19 @@ use crate::{
use iced_native::Size;
use std::{cell::RefCell, marker::PhantomData, sync::Arc};
enum State {
Empty,
Filled {
bounds: Size,
primitive: Arc<Primitive>,
},
}
impl Default for State {
fn default() -> Self {
State::Empty
}
}
/// A simple cache that stores generated geometry to avoid recomputation.
///
/// A [`Cache`] will not redraw its geometry unless the dimensions of its layer
@ -19,12 +32,16 @@ pub struct Cache<T: Drawable> {
state: RefCell<State>,
}
enum State {
Empty,
Filled {
bounds: Size,
primitive: Arc<Primitive>,
},
impl<T> Default for Cache<T>
where
T: Drawable,
{
fn default() -> Self {
Self {
input: PhantomData,
state: Default::default(),
}
}
}
impl<T> Cache<T>
@ -37,7 +54,7 @@ where
pub fn new() -> Self {
Cache {
input: PhantomData,
state: RefCell::new(State::Empty),
state: Default::default(),
}
}