//! 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::Event), /// A touch event Touch(touch::Event), /// A platform specific event PlatformSpecific(PlatformSpecific), } /// A platform specific event #[derive(Debug, Clone, PartialEq)] pub enum PlatformSpecific { /// A MacOS specific event MacOS(MacOS), } /// Describes an event specific to MacOS #[derive(Debug, Clone, PartialEq)] 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, } } }