summaryrefslogtreecommitdiffstats
path: root/native
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2019-11-11 06:07:31 +0100
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2019-11-11 06:07:31 +0100
commit860a6923bbed57a21ce4b2cae331f6a3a51ca3fe (patch)
treeb179c26278ef95b6aa2520c1cef69b5fa264ebcf /native
parentd4d14b68f47e9527554a728ebbba9b840832626a (diff)
downloadiced-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.rs11
-rw-r--r--native/src/user_interface.rs4
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