78 lines
2.2 KiB
Rust
78 lines
2.2 KiB
Rust
//! Handle events of a user interface.
|
|
use crate::keyboard;
|
|
use crate::mouse;
|
|
use crate::touch;
|
|
use crate::window;
|
|
|
|
/// A user interface event.
|
|
///
|
|
/// _**Note:** This type is largely incomplete! If you need to track
|
|
/// additional events, feel free to [open an issue] and share your use case!_
|
|
///
|
|
/// [open an issue]: https://github.com/iced-rs/iced/issues
|
|
#[derive(Debug, Clone, PartialEq)]
|
|
pub enum Event {
|
|
/// A keyboard event
|
|
Keyboard(keyboard::Event),
|
|
|
|
/// A mouse event
|
|
Mouse(mouse::Event),
|
|
|
|
/// A window event
|
|
Window(window::Id, window::Event),
|
|
|
|
/// A touch event
|
|
Touch(touch::Event),
|
|
|
|
/// A platform specific event
|
|
PlatformSpecific(PlatformSpecific),
|
|
}
|
|
|
|
/// A platform specific event
|
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
|
pub enum PlatformSpecific {
|
|
/// A MacOS specific event
|
|
MacOS(MacOS),
|
|
}
|
|
|
|
/// Describes an event specific to MacOS
|
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
|
pub enum MacOS {
|
|
/// Triggered when the app receives an URL from the system
|
|
///
|
|
/// _**Note:** For this event to be triggered, the executable needs to be properly [bundled]!_
|
|
///
|
|
/// [bundled]: https://developer.apple.com/library/archive/documentation/CoreFoundation/Conceptual/CFBundles/BundleTypes/BundleTypes.html#//apple_ref/doc/uid/10000123i-CH101-SW19
|
|
ReceivedUrl(String),
|
|
}
|
|
|
|
/// The status of an [`Event`] after being processed.
|
|
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
|
pub enum Status {
|
|
/// The [`Event`] was **NOT** handled by any widget.
|
|
Ignored,
|
|
|
|
/// The [`Event`] was handled and processed by a widget.
|
|
Captured,
|
|
}
|
|
|
|
impl Status {
|
|
/// Merges two [`Status`] into one.
|
|
///
|
|
/// `Captured` takes precedence over `Ignored`:
|
|
///
|
|
/// ```
|
|
/// use iced_native::event::Status;
|
|
///
|
|
/// assert_eq!(Status::Ignored.merge(Status::Ignored), Status::Ignored);
|
|
/// assert_eq!(Status::Ignored.merge(Status::Captured), Status::Captured);
|
|
/// assert_eq!(Status::Captured.merge(Status::Ignored), Status::Captured);
|
|
/// assert_eq!(Status::Captured.merge(Status::Captured), Status::Captured);
|
|
/// ```
|
|
pub fn merge(self, b: Self) -> Self {
|
|
match self {
|
|
Status::Ignored => b,
|
|
Status::Captured => Status::Captured,
|
|
}
|
|
}
|
|
}
|