freya_core/
event_loop_messages.rs

1use torin::prelude::{
2    Area,
3    CursorPoint,
4};
5use uuid::Uuid;
6use winit::window::{
7    CursorIcon,
8    Window,
9};
10
11use crate::{
12    accessibility::AccessibilityFocusStrategy,
13    events::PlatformEvent,
14};
15
16pub struct TextGroupMeasurement {
17    pub text_id: Uuid,
18    pub cursor_id: usize,
19    pub cursor_position: Option<CursorPoint>,
20    pub cursor_selection: Option<(CursorPoint, CursorPoint)>,
21}
22
23/// Custom EventLoop messages
24pub enum EventLoopMessage {
25    /// Poll the VirtualDOM
26    PollVDOM,
27    /// Request a rerender
28    RequestRerender,
29    /// Request a full rerender
30    RequestFullRerender,
31    /// Invalidate a certain drawing area
32    InvalidateArea(Area),
33    /// Remeasure a text elements group
34    RemeasureTextGroup(TextGroupMeasurement),
35    /// Change the cursor icon
36    SetCursorIcon(CursorIcon),
37    /// Accessibility Window Event
38    Accessibility(accesskit_winit::WindowEvent),
39    /// Focus with the given strategy
40    FocusAccessibilityNode(AccessibilityFocusStrategy),
41    /// Close the whole app
42    ExitApp,
43    /// Callback to access the Window.
44    WithWindow(Box<dyn FnOnce(&Window) + Send + Sync>),
45    /// Raw platform event, this are low level events.
46    PlatformEvent(PlatformEvent),
47}
48
49impl From<accesskit_winit::Event> for EventLoopMessage {
50    fn from(value: accesskit_winit::Event) -> Self {
51        Self::Accessibility(value.window_event)
52    }
53}