Provide Renderer to Widget::on_event

This allows us to implement configurable event processing that adapts to
different rendering strategies.
This commit is contained in:
Héctor Ramón Jiménez 2019-10-29 03:34:21 +01:00
parent 6602c1517c
commit 9dabbf7885
11 changed files with 45 additions and 14 deletions

View file

@ -31,6 +31,7 @@ where
layout: Layout<'_>,
cursor_position: Point,
messages: &mut Vec<Message>,
_renderer: &Renderer,
) {
match event {
Event::Mouse(mouse::Event::Input {

View file

@ -20,6 +20,7 @@ where
layout: Layout<'_>,
cursor_position: Point,
messages: &mut Vec<Message>,
_renderer: &Renderer,
) {
match event {
Event::Mouse(mouse::Event::Input {

View file

@ -55,12 +55,17 @@ where
layout: Layout<'_>,
cursor_position: Point,
messages: &mut Vec<Message>,
renderer: &Renderer,
) {
self.children.iter_mut().zip(layout.children()).for_each(
|(child, layout)| {
child
.widget
.on_event(event, layout, cursor_position, messages)
child.widget.on_event(
event,
layout,
cursor_position,
messages,
renderer,
)
},
);
}

View file

@ -21,6 +21,7 @@ where
layout: Layout<'_>,
cursor_position: Point,
messages: &mut Vec<Message>,
_renderer: &Renderer,
) {
match event {
Event::Mouse(mouse::Event::Input {

View file

@ -55,12 +55,17 @@ where
layout: Layout<'_>,
cursor_position: Point,
messages: &mut Vec<Message>,
renderer: &Renderer,
) {
self.children.iter_mut().zip(layout.children()).for_each(
|(child, layout)| {
child
.widget
.on_event(event, layout, cursor_position, messages)
child.widget.on_event(
event,
layout,
cursor_position,
messages,
renderer,
)
},
);
}

View file

@ -46,6 +46,7 @@ where
layout: Layout<'_>,
cursor_position: Point,
messages: &mut Vec<Message>,
renderer: &Renderer,
) {
let bounds = layout.bounds();
let is_mouse_over = bounds.contains(cursor_position);
@ -78,8 +79,13 @@ where
Point::new(cursor_position.x, -1.0)
};
self.content
.on_event(event, content, cursor_position, messages)
self.content.on_event(
event,
content,
cursor_position,
messages,
renderer,
)
}
fn draw(

View file

@ -25,6 +25,7 @@ where
layout: Layout<'_>,
cursor_position: Point,
messages: &mut Vec<Message>,
_renderer: &Renderer,
) {
let mut change = || {
let bounds = layout.bounds();