termrs_runtime 0.3.0

Runtime for termrs applications
Documentation
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
    }
}