diff options
author | 2019-11-11 06:07:31 +0100 | |
---|---|---|
committer | 2019-11-11 06:07:31 +0100 | |
commit | 860a6923bbed57a21ce4b2cae331f6a3a51ca3fe (patch) | |
tree | b179c26278ef95b6aa2520c1cef69b5fa264ebcf /native | |
parent | d4d14b68f47e9527554a728ebbba9b840832626a (diff) | |
download | iced-860a6923bbed57a21ce4b2cae331f6a3a51ca3fe.tar.gz iced-860a6923bbed57a21ce4b2cae331f6a3a51ca3fe.tar.bz2 iced-860a6923bbed57a21ce4b2cae331f6a3a51ca3fe.zip |
Split text measurements cache from rendering cache
This speeds up layouting in the most common scenario considerably!
:tada:
Diffstat (limited to 'native')
-rw-r--r-- | native/src/renderer.rs | 11 | ||||
-rw-r--r-- | native/src/user_interface.rs | 4 |
2 files changed, 12 insertions, 3 deletions
diff --git a/native/src/renderer.rs b/native/src/renderer.rs index 5963d577..833de571 100644 --- a/native/src/renderer.rs +++ b/native/src/renderer.rs @@ -26,6 +26,15 @@ mod windowed; pub use debugger::Debugger; pub use windowed::{Target, Windowed}; -pub trait Renderer { +use crate::{layout, Element}; + +pub trait Renderer: Sized { type Output; + + fn layout<'a, Message>( + &mut self, + element: &Element<'a, Message, Self>, + ) -> layout::Node { + element.layout(self, &layout::Limits::NONE) + } } diff --git a/native/src/user_interface.rs b/native/src/user_interface.rs index 4343086b..f031b090 100644 --- a/native/src/user_interface.rs +++ b/native/src/user_interface.rs @@ -97,7 +97,7 @@ where pub fn build<E: Into<Element<'a, Message, Renderer>>>( root: E, cache: Cache, - renderer: &Renderer, + renderer: &mut Renderer, ) -> Self { let root = root.into(); @@ -110,7 +110,7 @@ where cache.layout } else { let layout_start = std::time::Instant::now(); - let layout = root.layout(renderer, &layout::Limits::NONE); + let layout = renderer.layout(&root); dbg!(std::time::Instant::now() - layout_start); layout |