egui-raylib 0.1.2

Egui bindings for Raylib
Documentation
use egui::{CursorIcon, OutputCommand, PlatformOutput};
use raylib::prelude::*;

fn map_cursor(cursor: CursorIcon) -> Option<MouseCursor> {
    match cursor {
        CursorIcon::None => None,

        CursorIcon::Default
        | CursorIcon::Progress
        | CursorIcon::Wait
        | CursorIcon::Help
        | CursorIcon::Alias
        | CursorIcon::Copy => Some(MouseCursor::MOUSE_CURSOR_DEFAULT),

        CursorIcon::Text | CursorIcon::VerticalText => Some(MouseCursor::MOUSE_CURSOR_IBEAM),

        CursorIcon::Crosshair | CursorIcon::Cell | CursorIcon::ZoomIn | CursorIcon::ZoomOut => {
            Some(MouseCursor::MOUSE_CURSOR_CROSSHAIR)
        }

        CursorIcon::PointingHand
        | CursorIcon::ContextMenu
        | CursorIcon::Grab
        | CursorIcon::Grabbing => Some(MouseCursor::MOUSE_CURSOR_POINTING_HAND),

        CursorIcon::ResizeHorizontal
        | CursorIcon::ResizeColumn
        | CursorIcon::ResizeEast
        | CursorIcon::ResizeWest => Some(MouseCursor::MOUSE_CURSOR_RESIZE_EW),

        CursorIcon::ResizeVertical
        | CursorIcon::ResizeRow
        | CursorIcon::ResizeNorth
        | CursorIcon::ResizeSouth => Some(MouseCursor::MOUSE_CURSOR_RESIZE_NS),

        CursorIcon::ResizeNwSe | CursorIcon::ResizeNorthWest | CursorIcon::ResizeSouthEast => {
            Some(MouseCursor::MOUSE_CURSOR_RESIZE_NWSE)
        }

        CursorIcon::ResizeNeSw | CursorIcon::ResizeNorthEast | CursorIcon::ResizeSouthWest => {
            Some(MouseCursor::MOUSE_CURSOR_RESIZE_NESW)
        }

        CursorIcon::Move | CursorIcon::AllScroll => Some(MouseCursor::MOUSE_CURSOR_RESIZE_ALL),

        CursorIcon::NoDrop | CursorIcon::NotAllowed => Some(MouseCursor::MOUSE_CURSOR_NOT_ALLOWED),
    }
}

pub(crate) fn handle_platform_output(rl: &mut RaylibHandle, output: PlatformOutput) {
    for command in output.commands {
        match command {
            OutputCommand::CopyText(text) => rl.set_clipboard_text(&text).unwrap_or_default(),
            OutputCommand::CopyImage(_color_image) => (),
            OutputCommand::OpenUrl(_open_url) => (),
        }
    }

    match map_cursor(output.cursor_icon) {
        Some(cursor) => {
            rl.set_mouse_cursor(cursor);
            rl.show_cursor();
        }
        None => {
            rl.hide_cursor();
        }
    };
}