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:
parent
6602c1517c
commit
9dabbf7885
11 changed files with 45 additions and 14 deletions
|
|
@ -299,6 +299,7 @@ where
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
cursor_position: Point,
|
cursor_position: Point,
|
||||||
messages: &mut Vec<B>,
|
messages: &mut Vec<B>,
|
||||||
|
renderer: &Renderer,
|
||||||
) {
|
) {
|
||||||
let mut original_messages = Vec::new();
|
let mut original_messages = Vec::new();
|
||||||
|
|
||||||
|
|
@ -307,6 +308,7 @@ where
|
||||||
layout,
|
layout,
|
||||||
cursor_position,
|
cursor_position,
|
||||||
&mut original_messages,
|
&mut original_messages,
|
||||||
|
renderer,
|
||||||
);
|
);
|
||||||
|
|
||||||
original_messages
|
original_messages
|
||||||
|
|
@ -369,10 +371,15 @@ where
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
cursor_position: Point,
|
cursor_position: Point,
|
||||||
messages: &mut Vec<Message>,
|
messages: &mut Vec<Message>,
|
||||||
|
renderer: &Renderer,
|
||||||
) {
|
) {
|
||||||
self.element
|
self.element.widget.on_event(
|
||||||
.widget
|
event,
|
||||||
.on_event(event, layout, cursor_position, messages)
|
layout,
|
||||||
|
cursor_position,
|
||||||
|
messages,
|
||||||
|
renderer,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn draw(
|
fn draw(
|
||||||
|
|
|
||||||
|
|
@ -186,7 +186,7 @@ where
|
||||||
/// );
|
/// );
|
||||||
///
|
///
|
||||||
/// // Update the user interface
|
/// // Update the user interface
|
||||||
/// let messages = user_interface.update(events.drain(..));
|
/// let messages = user_interface.update(&renderer, events.drain(..));
|
||||||
///
|
///
|
||||||
/// cache = user_interface.into_cache();
|
/// cache = user_interface.into_cache();
|
||||||
///
|
///
|
||||||
|
|
@ -198,6 +198,7 @@ where
|
||||||
/// ```
|
/// ```
|
||||||
pub fn update(
|
pub fn update(
|
||||||
&mut self,
|
&mut self,
|
||||||
|
renderer: &Renderer,
|
||||||
events: impl Iterator<Item = Event>,
|
events: impl Iterator<Item = Event>,
|
||||||
) -> Vec<Message> {
|
) -> Vec<Message> {
|
||||||
let mut messages = Vec::new();
|
let mut messages = Vec::new();
|
||||||
|
|
@ -212,6 +213,7 @@ where
|
||||||
Layout::new(&self.layout),
|
Layout::new(&self.layout),
|
||||||
self.cursor_position,
|
self.cursor_position,
|
||||||
&mut messages,
|
&mut messages,
|
||||||
|
renderer,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -281,7 +283,7 @@ where
|
||||||
/// &mut renderer,
|
/// &mut renderer,
|
||||||
/// );
|
/// );
|
||||||
///
|
///
|
||||||
/// let messages = user_interface.update(events.drain(..));
|
/// let messages = user_interface.update(&renderer, events.drain(..));
|
||||||
///
|
///
|
||||||
/// // Draw the user interface
|
/// // Draw the user interface
|
||||||
/// let mouse_cursor = user_interface.draw(&mut renderer);
|
/// let mouse_cursor = user_interface.draw(&mut renderer);
|
||||||
|
|
|
||||||
|
|
@ -117,6 +117,7 @@ where
|
||||||
_layout: Layout<'_>,
|
_layout: Layout<'_>,
|
||||||
_cursor_position: Point,
|
_cursor_position: Point,
|
||||||
_messages: &mut Vec<Message>,
|
_messages: &mut Vec<Message>,
|
||||||
|
_renderer: &Renderer,
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@ where
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
cursor_position: Point,
|
cursor_position: Point,
|
||||||
messages: &mut Vec<Message>,
|
messages: &mut Vec<Message>,
|
||||||
|
_renderer: &Renderer,
|
||||||
) {
|
) {
|
||||||
match event {
|
match event {
|
||||||
Event::Mouse(mouse::Event::Input {
|
Event::Mouse(mouse::Event::Input {
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ where
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
cursor_position: Point,
|
cursor_position: Point,
|
||||||
messages: &mut Vec<Message>,
|
messages: &mut Vec<Message>,
|
||||||
|
_renderer: &Renderer,
|
||||||
) {
|
) {
|
||||||
match event {
|
match event {
|
||||||
Event::Mouse(mouse::Event::Input {
|
Event::Mouse(mouse::Event::Input {
|
||||||
|
|
|
||||||
|
|
@ -55,12 +55,17 @@ where
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
cursor_position: Point,
|
cursor_position: Point,
|
||||||
messages: &mut Vec<Message>,
|
messages: &mut Vec<Message>,
|
||||||
|
renderer: &Renderer,
|
||||||
) {
|
) {
|
||||||
self.children.iter_mut().zip(layout.children()).for_each(
|
self.children.iter_mut().zip(layout.children()).for_each(
|
||||||
|(child, layout)| {
|
|(child, layout)| {
|
||||||
child
|
child.widget.on_event(
|
||||||
.widget
|
event,
|
||||||
.on_event(event, layout, cursor_position, messages)
|
layout,
|
||||||
|
cursor_position,
|
||||||
|
messages,
|
||||||
|
renderer,
|
||||||
|
)
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@ where
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
cursor_position: Point,
|
cursor_position: Point,
|
||||||
messages: &mut Vec<Message>,
|
messages: &mut Vec<Message>,
|
||||||
|
_renderer: &Renderer,
|
||||||
) {
|
) {
|
||||||
match event {
|
match event {
|
||||||
Event::Mouse(mouse::Event::Input {
|
Event::Mouse(mouse::Event::Input {
|
||||||
|
|
|
||||||
|
|
@ -55,12 +55,17 @@ where
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
cursor_position: Point,
|
cursor_position: Point,
|
||||||
messages: &mut Vec<Message>,
|
messages: &mut Vec<Message>,
|
||||||
|
renderer: &Renderer,
|
||||||
) {
|
) {
|
||||||
self.children.iter_mut().zip(layout.children()).for_each(
|
self.children.iter_mut().zip(layout.children()).for_each(
|
||||||
|(child, layout)| {
|
|(child, layout)| {
|
||||||
child
|
child.widget.on_event(
|
||||||
.widget
|
event,
|
||||||
.on_event(event, layout, cursor_position, messages)
|
layout,
|
||||||
|
cursor_position,
|
||||||
|
messages,
|
||||||
|
renderer,
|
||||||
|
)
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,7 @@ where
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
cursor_position: Point,
|
cursor_position: Point,
|
||||||
messages: &mut Vec<Message>,
|
messages: &mut Vec<Message>,
|
||||||
|
renderer: &Renderer,
|
||||||
) {
|
) {
|
||||||
let bounds = layout.bounds();
|
let bounds = layout.bounds();
|
||||||
let is_mouse_over = bounds.contains(cursor_position);
|
let is_mouse_over = bounds.contains(cursor_position);
|
||||||
|
|
@ -78,8 +79,13 @@ where
|
||||||
Point::new(cursor_position.x, -1.0)
|
Point::new(cursor_position.x, -1.0)
|
||||||
};
|
};
|
||||||
|
|
||||||
self.content
|
self.content.on_event(
|
||||||
.on_event(event, content, cursor_position, messages)
|
event,
|
||||||
|
content,
|
||||||
|
cursor_position,
|
||||||
|
messages,
|
||||||
|
renderer,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn draw(
|
fn draw(
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ where
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
cursor_position: Point,
|
cursor_position: Point,
|
||||||
messages: &mut Vec<Message>,
|
messages: &mut Vec<Message>,
|
||||||
|
_renderer: &Renderer,
|
||||||
) {
|
) {
|
||||||
let mut change = || {
|
let mut change = || {
|
||||||
let bounds = layout.bounds();
|
let bounds = layout.bounds();
|
||||||
|
|
|
||||||
|
|
@ -68,7 +68,8 @@ pub trait Application {
|
||||||
&renderer,
|
&renderer,
|
||||||
);
|
);
|
||||||
|
|
||||||
let messages = user_interface.update(events.drain(..));
|
let messages =
|
||||||
|
user_interface.update(&renderer, events.drain(..));
|
||||||
|
|
||||||
if messages.is_empty() {
|
if messages.is_empty() {
|
||||||
primitive = user_interface.draw(&mut renderer);
|
primitive = user_interface.draw(&mut renderer);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue