godoru 0.1.0

UI Framework for Rust using Godot
use super::NoAction;

#[derive(Clone, Debug, PartialEq)]
pub struct InteractionEvents<A = NoAction> {
    pub click: Option<A>,
    pub doubleClick: Option<A>,
    pub rightClick: Option<A>,
    pub hover: Option<A>,
    pub unhover: Option<A>,
    pub pointerDown: Option<A>,
    pub pointerUp: Option<A>,
    pub pointerMove: Option<A>,
    pub scroll: Option<A>,
    pub focus: Option<A>,
    pub blur: Option<A>,
    pub key: Option<A>,
}

impl<A> Default for InteractionEvents<A> {
    fn default() -> Self {
        Self {
            click: None,
            doubleClick: None,
            rightClick: None,
            hover: None,
            unhover: None,
            pointerDown: None,
            pointerUp: None,
            pointerMove: None,
            scroll: None,
            focus: None,
            blur: None,
            key: None,
        }
    }
}

impl<A> InteractionEvents<A> {
    pub fn hasLocalInput(&self) -> bool {
        self.click.is_some()
            || self.doubleClick.is_some()
            || self.rightClick.is_some()
            || self.hover.is_some()
            || self.unhover.is_some()
            || self.pointerDown.is_some()
            || self.pointerUp.is_some()
            || self.pointerMove.is_some()
            || self.scroll.is_some()
            || self.focus.is_some()
            || self.blur.is_some()
            || self.key.is_some()
    }
}

#[derive(Clone, Debug, PartialEq, Eq)]
pub enum CursorIcon {
    Default,
    Pointer,
    Text,
    Grab,
    Grabbing,
}