Add Renderer and Primitive concepts
This commit is contained in:
parent
5204cc8c8b
commit
a7d1194403
15 changed files with 227 additions and 126 deletions
|
|
@ -1,8 +1,6 @@
|
|||
use std::hash::Hash;
|
||||
|
||||
use crate::{
|
||||
Element, Event, Hasher, Layout, MouseCursor, Node, Point, Style, Widget,
|
||||
};
|
||||
use crate::{Element, Event, Hasher, Layout, Node, Point, Style, Widget};
|
||||
|
||||
/// A container that distributes its contents vertically.
|
||||
pub type Column<'a, Message, Renderer> =
|
||||
|
|
@ -10,6 +8,8 @@ pub type Column<'a, Message, Renderer> =
|
|||
|
||||
impl<'a, Message, Renderer> Widget<Message, Renderer>
|
||||
for Column<'a, Message, Renderer>
|
||||
where
|
||||
Renderer: self::Renderer,
|
||||
{
|
||||
fn node(&self, renderer: &mut Renderer) -> Node {
|
||||
let mut children: Vec<Node> = self
|
||||
|
|
@ -70,21 +70,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) {
|
||||
|
|
@ -104,10 +91,19 @@ impl<'a, Message, Renderer> Widget<Message, Renderer>
|
|||
}
|
||||
}
|
||||
|
||||
pub trait Renderer: crate::Renderer + Sized {
|
||||
fn draw<Message>(
|
||||
&mut self,
|
||||
row: &Column<'_, Message, Self>,
|
||||
layout: Layout<'_>,
|
||||
cursor_position: Point,
|
||||
) -> Self::Primitive;
|
||||
}
|
||||
|
||||
impl<'a, Message, Renderer> From<Column<'a, Message, Renderer>>
|
||||
for Element<'a, Message, Renderer>
|
||||
where
|
||||
Renderer: 'a,
|
||||
Renderer: 'a + self::Renderer,
|
||||
Message: 'static,
|
||||
{
|
||||
fn from(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue