rsgt 0.3.0

Rust simple GUI Toolkit
//========================================================================
// RSGT | lib.rs - https://overtimecoder.github.io
//------------------------------------------------------------------------
// Lib
//------------------------------------------------------------------------
//
// Author LatteS
//
// File was created in 2022/12/31
//
//========================================================================
//! # RSGT : Rust simple GUI Toolkit
//! # Event handling
//! RSGT's event handling is based on Swing (Java) event handling.
//! [Event Listener](event/trait.EventListener.html)

use std::fmt;
use std::fmt::Debug;
use winit::dpi::PhysicalSize;

pub mod error;
pub mod event;
pub mod graphic;
pub mod msgbox;
pub mod os;
pub mod rframe;

// Modules
pub mod widget;
pub mod theme;
pub mod wgpu;

/// Message Box Results
/// Enumerator for 'match' in message box result
pub enum ResponseType {
    /// If nothing has changed
    None,
    /// When OK is pressed
    Ok,
    /// When Yes is pressed
    Yes,
    /// When No is pressed
    No,
    /// When Cancel is pressed
    Cancel,
    /// When Close is pressed
    Close,
}

/// Cursor icon for Window or Widget
pub enum CursorIcon {
    Arrow,
    ScrollAll,
    CrossHair,
    Help,
    Hand,
    NotAllowed,
    Progress
}


/// Window buttons
/// Enumerator for specifying window buttons
pub enum WindowButton {
    /// Close button
    Close,
    /// Maximize button
    Maximize,
    /// Minimize button
    Minimize,
}



pub struct RSGTError {
    error: _RSGTError
}

impl RSGTError {
    pub fn illegal_argument(str:&'static str) -> Self {
        Self {
            error: _RSGTError::IllegalArgument(str)
        }
    }
}

enum _RSGTError {
    IllegalArgument(&'static str)
}

impl _RSGTError {
    pub fn description(&self) -> &'static str {
        match self {
            _RSGTError::IllegalArgument(s) => {s}
        }
    }
}

impl fmt::Display for RSGTError {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        match &self.error {
            _RSGTError::IllegalArgument(s) => f.write_str(s),
        }
    }
}

impl Debug for RSGTError {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        use std::f64::consts::PI;
        f.write_fmt(format_args!("{}", self.error.description()))
    }
}

pub struct Size<T>(pub T,pub T);

impl From<Size<u32>> for PhysicalSize<u32> {
    fn from(value: Size<u32>) -> Self {
        Self {
            width: value.0,
            height: value.1,
        }
    }
}