baseview 0.4.2

Low-level windowing system geared towards making audio plugin UIs.
Documentation
use super::*;
use crate::wrappers::xlib::XLibError;

use std::fmt::{Display, Formatter};
use std::num::TryFromIntError;
use x11_dl::error::OpenError;
use x11rb::protocol::xproto::Visualid;

#[derive(Debug)]
pub enum GlCreationFailedError {
    NoValidFBConfig,
    NoVisual,
    GetProcAddressFailed,
    MakeCurrentFailed,
    ContextCreationFailed,
    X11Error(XLibError),
    OpenError(OpenError),
    EGLLoadError(libloading::Error),
    EGLMissingSymbol(MissingSymbolError),
    Egl(EglError),
    EglNoDisplay,
    EglUnsupportedVersion(EglVersion),
    EglUnknownVisualId(Visualid),
    EglInvalidVisualId(i32, TryFromIntError),
}

use GlCreationFailedError::*;

impl Display for GlCreationFailedError {
    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
        match self {
            NoValidFBConfig => f.write_str("Could not find a valid Framebuffer configuration"),
            NoVisual => f.write_str("Could not find a matching visual configuration"),
            GetProcAddressFailed => f.write_str("GetProcAddress failed"),
            MakeCurrentFailed => f.write_str("MakeCurrent failed"),
            ContextCreationFailed => f.write_str("Failed to create GL context"),
            X11Error(e) => e.fmt(f),
            OpenError(e) => e.fmt(f),
            EGLLoadError(e) => {
                write!(f, "Could not load EGL library: {e}, {:?}", e.source())
            }
            EGLMissingSymbol(e) => e.fmt(f),
            Egl(e) => e.fmt(f),
            EglNoDisplay => f.write_str("EGL returned no valid display"),
            EglUnsupportedVersion(e) => {
                write!(f, "Unsupported EGL version: {}.{} (EGL 1.5 is required)", e.major, e.minor)
            }
            EglInvalidVisualId(id, e) => {
                write!(f, "Invalid Visual ID ({id}) returned by EGL: {e}")
            }
            EglUnknownVisualId(id) => {
                write!(f, "Unknown Visual ID returned by EGL: {id}")
            }
        }
    }
}

impl From<EglError> for GlCreationFailedError {
    fn from(err: EglError) -> Self {
        Egl(err)
    }
}