iced-core-kora 0.15.0

The essential ideas of iced (Playtron's Kora fork of iced_core)
//! Handle events of a user interface.
use crate::adaptive_foreground;
use crate::auto_hide;
use crate::clipboard;
use crate::dismiss;
use crate::dnd;
use crate::focus;
use crate::input_method;
use crate::keyboard;
use crate::mouse;
use crate::special_action;
use crate::surface_visibility;
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),

    /// An input method event
    InputMethod(input_method::Event),

    /// The device's special key was used while this surface was the receiver
    SpecialAction(special_action::Event),

    /// An auto-hide visibility event from the compositor
    AutoHide(auto_hide::Event),

    /// A backdrop luminance event from the compositor
    AdaptiveForeground(adaptive_foreground::Event),

    /// A dismiss event from the compositor
    Dismiss(dismiss::Event),

    /// A surface visibility event from the layer-surface-visibility protocol
    SurfaceVisibility(surface_visibility::Event),

    /// A clipboard event
    Clipboard(clipboard::Event),

    /// A drag-and-drop event from the Wayland compositor.
    Dnd(dnd::Event),

    /// A focus change event.
    Focus(focus::Event),
}

/// 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_core::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,
        }
    }
}