maolan-baseview 0.0.4

A low-level windowing system geared towards making audio plugin UIs
use std::path::PathBuf;

use keyboard_types::{KeyboardEvent, Modifiers};

use crate::{Point, WindowInfo};

#[derive(Debug, Copy, Clone, Eq, PartialEq)]
pub enum MouseButton {
    Left,
    Middle,
    Right,
    Back,
    Forward,
    Other(u8),
}

#[derive(Debug, Clone, Copy, PartialEq)]
pub enum ScrollDelta {
    Lines { x: f32, y: f32 },

    Pixels { x: f32, y: f32 },
}

#[derive(Debug, Clone, PartialEq)]
pub enum MouseEvent {
    CursorMoved { position: Point, modifiers: Modifiers },

    ButtonPressed { button: MouseButton, modifiers: Modifiers },

    ButtonReleased { button: MouseButton, modifiers: Modifiers },

    WheelScrolled { delta: ScrollDelta, modifiers: Modifiers },

    CursorEntered,

    CursorLeft,

    DragEntered { position: Point, modifiers: Modifiers, data: DropData },

    DragMoved { position: Point, modifiers: Modifiers, data: DropData },

    DragLeft,

    DragDropped { position: Point, modifiers: Modifiers, data: DropData },
}

#[derive(Debug, Clone)]
pub enum WindowEvent {
    Resized(WindowInfo),
    Focused,
    Unfocused,
    WillClose,
}

#[derive(Debug, Clone)]
pub enum Event {
    Mouse(MouseEvent),
    Keyboard(KeyboardEvent),
    Window(WindowEvent),
}

#[derive(Debug, Clone, Copy, PartialEq)]
pub enum DropEffect {
    Copy,
    Move,
    Link,
    Scroll,
}

#[derive(Debug, Clone, PartialEq)]
pub enum DropData {
    None,
    Files(Vec<PathBuf>),
}

#[derive(Debug, Clone, Copy, PartialEq)]
pub enum EventStatus {
    Captured,

    Ignored,

    AcceptDrop(DropEffect),
}