diff options
author | 2020-03-24 19:08:21 +0100 | |
---|---|---|
committer | 2020-03-24 19:08:21 +0100 | |
commit | e77fa175aa0eaf62be4ebafbd8e0dbc5df18f006 (patch) | |
tree | 78608f77c6db3ff1e61a58008bd54d114f32352c /wgpu/src/widget/canvas/layer/cache.rs | |
parent | 7cb1452d29ddfdcd29fd7ecc7c96a79ea2681fce (diff) | |
parent | fd7d9622e333a0a2cd5c2e8e6cc38cc09d7981e4 (diff) | |
download | iced-e77fa175aa0eaf62be4ebafbd8e0dbc5df18f006.tar.gz iced-e77fa175aa0eaf62be4ebafbd8e0dbc5df18f006.tar.bz2 iced-e77fa175aa0eaf62be4ebafbd8e0dbc5df18f006.zip |
Merge branch 'master' into feature/text-selection
Diffstat (limited to 'wgpu/src/widget/canvas/layer/cache.rs')
-rw-r--r-- | wgpu/src/widget/canvas/layer/cache.rs | 34 |
1 files changed, 22 insertions, 12 deletions
diff --git a/wgpu/src/widget/canvas/layer/cache.rs b/wgpu/src/widget/canvas/layer/cache.rs index 3071cce0..f7002459 100644 --- a/wgpu/src/widget/canvas/layer/cache.rs +++ b/wgpu/src/widget/canvas/layer/cache.rs @@ -1,12 +1,10 @@ use crate::{ canvas::{Drawable, Frame, Layer}, - triangle, + Primitive, }; use iced_native::Size; -use std::cell::RefCell; -use std::marker::PhantomData; -use std::sync::Arc; +use std::{cell::RefCell, marker::PhantomData, sync::Arc}; /// A simple cache that stores generated geometry to avoid recomputation. /// @@ -21,12 +19,11 @@ pub struct Cache<T: Drawable> { state: RefCell<State>, } -#[derive(Debug)] enum State { Empty, Filled { - mesh: Arc<triangle::Mesh2D>, bounds: Size, + primitive: Arc<Primitive>, }, } @@ -75,27 +72,40 @@ impl<'a, T> Layer for Bind<'a, T> where T: Drawable + std::fmt::Debug, { - fn draw(&self, current_bounds: Size) -> Arc<triangle::Mesh2D> { + fn draw(&self, current_bounds: Size) -> Arc<Primitive> { use std::ops::Deref; - if let State::Filled { mesh, bounds } = + if let State::Filled { bounds, primitive } = self.cache.state.borrow().deref() { if *bounds == current_bounds { - return mesh.clone(); + return primitive.clone(); } } let mut frame = Frame::new(current_bounds.width, current_bounds.height); self.input.draw(&mut frame); - let mesh = Arc::new(frame.into_mesh()); + let primitive = Arc::new(frame.into_primitive()); *self.cache.state.borrow_mut() = State::Filled { - mesh: mesh.clone(), bounds: current_bounds, + primitive: primitive.clone(), }; - mesh + primitive + } +} + +impl std::fmt::Debug for State { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + State::Empty => write!(f, "Empty"), + State::Filled { primitive, bounds } => f + .debug_struct("Filled") + .field("primitive", primitive) + .field("bounds", bounds) + .finish(), + } } } |