diff options
author | 2019-10-05 03:56:18 +0200 | |
---|---|---|
committer | 2019-10-05 03:56:18 +0200 | |
commit | a7d11944039a1b5ea5b72256e8d15367d99e6010 (patch) | |
tree | 0b90246e3bec0bb28a9a67b9c62af4bf7602cbc6 /native/src/widget/row.rs | |
parent | 5204cc8c8bc8361a11815d7c711b7da10a6ca8e5 (diff) | |
download | iced-a7d11944039a1b5ea5b72256e8d15367d99e6010.tar.gz iced-a7d11944039a1b5ea5b72256e8d15367d99e6010.tar.bz2 iced-a7d11944039a1b5ea5b72256e8d15367d99e6010.zip |
Add `Renderer` and `Primitive` concepts
Diffstat (limited to 'native/src/widget/row.rs')
-rw-r--r-- | native/src/widget/row.rs | 30 |
1 files changed, 14 insertions, 16 deletions
diff --git a/native/src/widget/row.rs b/native/src/widget/row.rs index 3cd451b7..04fc8163 100644 --- a/native/src/widget/row.rs +++ b/native/src/widget/row.rs @@ -10,6 +10,8 @@ pub type Row<'a, Message, Renderer> = impl<'a, Message, Renderer> Widget<Message, Renderer> for Row<'a, Message, Renderer> +where + Renderer: self::Renderer, { fn node(&self, renderer: &mut Renderer) -> Node { let mut children: Vec<Node> = self @@ -70,21 +72,8 @@ impl<'a, Message, Renderer> Widget<Message, Renderer> renderer: &mut Renderer, layout: Layout<'_>, cursor_position: Point, - ) -> MouseCursor { - let mut cursor = MouseCursor::OutOfBounds; - - self.children.iter().zip(layout.children()).for_each( - |(child, layout)| { - let new_cursor = - child.widget.draw(renderer, layout, cursor_position); - - if new_cursor != MouseCursor::OutOfBounds { - cursor = new_cursor; - } - }, - ); - - cursor + ) -> Renderer::Primitive { + renderer.draw(&self, layout, cursor_position) } fn hash_layout(&self, state: &mut Hasher) { @@ -105,10 +94,19 @@ impl<'a, Message, Renderer> Widget<Message, Renderer> } } +pub trait Renderer: crate::Renderer + Sized { + fn draw<Message>( + &mut self, + row: &Row<'_, Message, Self>, + layout: Layout<'_>, + cursor_position: Point, + ) -> Self::Primitive; +} + impl<'a, Message, Renderer> From<Row<'a, Message, Renderer>> for Element<'a, Message, Renderer> where - Renderer: 'a, + Renderer: 'a + self::Renderer, Message: 'static, { fn from(row: Row<'a, Message, Renderer>) -> Element<'a, Message, Renderer> { |