use core::{
render::Position,
widget::{Clipboard, EventContext},
};
pub struct AppEventContext<'a, Message, C>
where
C: Clipboard,
{
invalidate_render_requested: bool,
invalidate_layout_requested: bool,
message: Option<Message>,
mouse_focus: bool,
keyboard_focus: bool,
cursor_position: Position,
clipboard: &'a mut C,
}
impl<'a, Message, C> AppEventContext<'a, Message, C>
where
C: Clipboard,
{
pub fn new(cursor_position: Position, clipboard: &'a mut C) -> Self {
Self {
invalidate_layout_requested: false,
invalidate_render_requested: false,
keyboard_focus: true,
mouse_focus: false,
message: None,
cursor_position,
clipboard,
}
}
pub fn message(self) -> Option<Message> {
self.message
}
}
impl<'a, Message, C: Clipboard> EventContext<Message> for AppEventContext<'a, Message, C> {
fn invalidate_render(&mut self) {
self.invalidate_render_requested = true;
}
fn invalidate_layout(&mut self) {
self.invalidate_layout_requested = true;
}
fn emit_message(&mut self, message: Message) {
self.message = Some(message);
}
fn cursor_position(&self) -> Position {
self.cursor_position
}
fn set_cursor_position(&mut self, value: Position) {
self.cursor_position = value;
}
fn keyboard_focus(&self) -> bool {
self.keyboard_focus
}
fn set_keyboard_focus(&mut self, value: bool) {
self.keyboard_focus = value;
}
fn mouse_focus(&self) -> bool {
self.mouse_focus
}
fn set_mouse_focus(&mut self, value: bool) {
self.mouse_focus = value;
}
fn clipboard(&self) -> &dyn Clipboard {
self.clipboard
}
fn clipboard_mut(&mut self) -> &mut dyn Clipboard {
self.clipboard
}
}