vizia_core/window/
window_event.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
use std::path::PathBuf;

use crate::{entity::Entity, environment::ThemeMode, layout::cache::GeoChanged};
use vizia_input::{Code, Key, MouseButton};
use vizia_style::CursorIcon;
use vizia_window::{WindowPosition, WindowSize};

#[derive(Debug, Clone)]
/// Data associated with a drop event.
pub enum DropData {
    /// Path to a dropped file.
    File(PathBuf),
    ///  Entity ID of a dropped entity.
    Id(Entity),
}

impl From<Entity> for DropData {
    fn from(value: Entity) -> Self {
        DropData::Id(value)
    }
}

impl From<PathBuf> for DropData {
    fn from(value: PathBuf) -> Self {
        DropData::File(value)
    }
}

/// Events generated by the application in response to OS events as well as events that can be used
/// to set properties of the window.
#[derive(Debug, Clone)]
pub enum WindowEvent {
    /// Emitted when a window is closed. Can also be emitted by a view or model to close the window.
    WindowClose,
    /// Emitted when a file is dragged and then dropped onto the window.
    Drop(DropData),
    /// Emitted when a mouse button is double clicked.
    MouseDoubleClick(MouseButton),
    /// Emitted when a mouse button is triple clicked
    MouseTripleClick(MouseButton),
    /// Emitted when a mouse button is pressed
    MouseDown(MouseButton),
    /// Emitted when a mouse button is released.
    MouseUp(MouseButton),
    /// Emitted when the primary mouse button or trigger key is pressed and then released on a view
    Press {
        /// Whether the press event was triggered by the mouse.
        mouse: bool,
    },
    /// Emitted when the primary mouse button or trigger key is pressed on a view
    PressDown {
        /// Whether the press down event was triggered by the mouse.
        mouse: bool,
    },
    /// Emitted when the mouse cursor is moved
    MouseMove(f32, f32),
    /// Emitted when the mouse scroll wheel is scrolled.
    MouseScroll(f32, f32),
    /// Emitted when the mouse cursor enters the bounding box of an entity.
    MouseOver,
    /// Emitted when the mouse cursor leaves the bounding box of an entity.
    MouseOut,
    /// Emitted when the mouse cursor enters an entity.
    MouseEnter,
    /// Emitted when the mouse cursor leaves an entity.
    MouseLeave,
    /// Emitted when an entity gains keyboard focus.
    FocusIn,
    /// Emitted when an entity loses keyboard focus.
    FocusOut,
    /// Emitted when an entity's focus visibility has changed.
    FocusVisibility(bool),
    /// Emitted when the window gains or loses focus
    WindowFocused(bool),
    /// Emitted when a character is typed.
    CharInput(char),
    /// Emitted when a keyboard key is pressed.
    KeyDown(Code, Option<Key>),
    /// Emitted when a keyboard key is released.
    KeyUp(Code, Option<Key>),
    /// Emited when the system window theme has changed.
    ThemeChanged(ThemeMode),
    /// Sets the mouse cursor icon.
    SetCursor(CursorIcon),
    /// Grabs the mouse cursor, preventing it from leaving the window.
    GrabCursor(bool),
    /// Sets the (x,y) position of the mouse cursor in window coordinates.
    SetCursorPosition(u32, u32),
    /// Sets the title of the window.
    SetTitle(String),
    /// Sets the size of the window.
    SetSize(WindowSize),
    /// Sets the position of the window.
    SetPosition(WindowPosition),
    /// Sets the maximum size of the window.
    SetMaxSize(Option<WindowSize>),
    /// Sets the minimum size of the window.
    SetMinSize(Option<WindowSize>),
    /// Sets whether the window is resizable.
    SetResizable(bool),
    /// Sets whether the window is minimized.
    SetMinimized(bool),
    /// Sets whether the window is maximized.
    SetMaximized(bool),
    /// Sets whether the window is visible.
    SetVisible(bool),
    /// Sets whether the window has decorations.
    SetDecorations(bool),
    /// Sets whether the window remains on top of other windows.
    SetAlwaysOnTop(bool),
    /// Emitted when mouse events have been captured.
    MouseCaptureEvent,
    /// Emitted when mouse events have been released.
    MouseCaptureOutEvent,
    // TODO: check if this includes margins + borders.
    /// Emitted when an entity changes position or size.
    GeometryChanged(GeoChanged),
    /// Requests a redraw of the window contents.
    Redraw,
    /// Request a restyle.
    Restyle,
    /// Requests a relayout.
    Relayout,
    /// Move keyboard focus to the next navigable view.
    FocusNext,
    /// Move keyboard focus to the previous navigable view.
    FocusPrev,
    /// Prints the debug message to the console.
    Debug(String),
    /// Represents an action requested by an accessibility technology.
    ActionRequest(accesskit::ActionRequest),
    /// Reloads all application stylesheets.
    ReloadStyles,
    /// Enables or disabled mouse and keyboard input to the window.
    SetEnabled(bool),
    /// Puts the window in a drag state.
    DragWindow,

    /// Emitted when the window is destroyed.
    Destroyed,
}