// This file was generated by gir (https://github.com/gtk-rs/gir)
// from gir-files (https://github.com/gtk-rs/gir-files)
// DO NOT EDIT

use glib::translate::*;
use glib::value::FromValue;
use glib::value::FromValueOptional;
use glib::value::SetValue;
use glib::value::Value;
use glib::StaticType;
use glib::Type;
use gobject_sys;
use gst_gl_sys;

bitflags! {
    pub struct GLAPI: u32 {
        const OPENGL = 1;
        const OPENGL3 = 2;
        const GLES1 = 32768;
        const GLES2 = 65536;
    }
}

#[doc(hidden)]
impl ToGlib for GLAPI {
    type GlibType = gst_gl_sys::GstGLAPI;

    fn to_glib(&self) -> gst_gl_sys::GstGLAPI {
        self.bits()
    }
}

#[doc(hidden)]
impl FromGlib<gst_gl_sys::GstGLAPI> for GLAPI {
    fn from_glib(value: gst_gl_sys::GstGLAPI) -> GLAPI {
        skip_assert_initialized!();
        GLAPI::from_bits_truncate(value)
    }
}

impl StaticType for GLAPI {
    fn static_type() -> Type {
        unsafe { from_glib(gst_gl_sys::gst_gl_api_get_type()) }
    }
}

impl<'a> FromValueOptional<'a> for GLAPI {
    unsafe fn from_value_optional(value: &Value) -> Option<Self> {
        Some(FromValue::from_value(value))
    }
}

impl<'a> FromValue<'a> for GLAPI {
    unsafe fn from_value(value: &Value) -> Self {
        from_glib(gobject_sys::g_value_get_flags(value.to_glib_none().0))
    }
}

impl SetValue for GLAPI {
    unsafe fn set_value(value: &mut Value, this: &Self) {
        gobject_sys::g_value_set_flags(value.to_glib_none_mut().0, this.to_glib())
    }
}

bitflags! {
    pub struct GLDisplayType: u32 {
        const X11 = 1;
        const WAYLAND = 2;
        const COCOA = 4;
        const WIN32 = 8;
        const DISPMANX = 16;
        const EGL = 32;
        const VIV_FB = 64;
        const GBM = 128;
        #[cfg(any(feature = "v1_18", feature = "dox"))]
        const EGL_DEVICE = 256;
    }
}

#[doc(hidden)]
impl ToGlib for GLDisplayType {
    type GlibType = gst_gl_sys::GstGLDisplayType;

    fn to_glib(&self) -> gst_gl_sys::GstGLDisplayType {
        self.bits()
    }
}

#[doc(hidden)]
impl FromGlib<gst_gl_sys::GstGLDisplayType> for GLDisplayType {
    fn from_glib(value: gst_gl_sys::GstGLDisplayType) -> GLDisplayType {
        skip_assert_initialized!();
        GLDisplayType::from_bits_truncate(value)
    }
}

impl StaticType for GLDisplayType {
    fn static_type() -> Type {
        unsafe { from_glib(gst_gl_sys::gst_gl_display_type_get_type()) }
    }
}

impl<'a> FromValueOptional<'a> for GLDisplayType {
    unsafe fn from_value_optional(value: &Value) -> Option<Self> {
        Some(FromValue::from_value(value))
    }
}

impl<'a> FromValue<'a> for GLDisplayType {
    unsafe fn from_value(value: &Value) -> Self {
        from_glib(gobject_sys::g_value_get_flags(value.to_glib_none().0))
    }
}

impl SetValue for GLDisplayType {
    unsafe fn set_value(value: &mut Value, this: &Self) {
        gobject_sys::g_value_set_flags(value.to_glib_none_mut().0, this.to_glib())
    }
}

bitflags! {
    pub struct GLPlatform: u32 {
        const EGL = 1;
        const GLX = 2;
        const WGL = 4;
        const CGL = 8;
        const EAGL = 16;
    }
}

#[doc(hidden)]
impl ToGlib for GLPlatform {
    type GlibType = gst_gl_sys::GstGLPlatform;

    fn to_glib(&self) -> gst_gl_sys::GstGLPlatform {
        self.bits()
    }
}

#[doc(hidden)]
impl FromGlib<gst_gl_sys::GstGLPlatform> for GLPlatform {
    fn from_glib(value: gst_gl_sys::GstGLPlatform) -> GLPlatform {
        skip_assert_initialized!();
        GLPlatform::from_bits_truncate(value)
    }
}

impl StaticType for GLPlatform {
    fn static_type() -> Type {
        unsafe { from_glib(gst_gl_sys::gst_gl_platform_get_type()) }
    }
}

impl<'a> FromValueOptional<'a> for GLPlatform {
    unsafe fn from_value_optional(value: &Value) -> Option<Self> {
        Some(FromValue::from_value(value))
    }
}

impl<'a> FromValue<'a> for GLPlatform {
    unsafe fn from_value(value: &Value) -> Self {
        from_glib(gobject_sys::g_value_get_flags(value.to_glib_none().0))
    }
}

impl SetValue for GLPlatform {
    unsafe fn set_value(value: &mut Value, this: &Self) {
        gobject_sys::g_value_set_flags(value.to_glib_none_mut().0, this.to_glib())
    }
}

bitflags! {
    pub struct GLSLProfile: u32 {
        const ES = 1;
        const CORE = 2;
        const COMPATIBILITY = 4;
    }
}

#[doc(hidden)]
impl ToGlib for GLSLProfile {
    type GlibType = gst_gl_sys::GstGLSLProfile;

    fn to_glib(&self) -> gst_gl_sys::GstGLSLProfile {
        self.bits()
    }
}

#[doc(hidden)]
impl FromGlib<gst_gl_sys::GstGLSLProfile> for GLSLProfile {
    fn from_glib(value: gst_gl_sys::GstGLSLProfile) -> GLSLProfile {
        skip_assert_initialized!();
        GLSLProfile::from_bits_truncate(value)
    }
}

impl StaticType for GLSLProfile {
    fn static_type() -> Type {
        unsafe { from_glib(gst_gl_sys::gst_glsl_profile_get_type()) }
    }
}

impl<'a> FromValueOptional<'a> for GLSLProfile {
    unsafe fn from_value_optional(value: &Value) -> Option<Self> {
        Some(FromValue::from_value(value))
    }
}

impl<'a> FromValue<'a> for GLSLProfile {
    unsafe fn from_value(value: &Value) -> Self {
        from_glib(gobject_sys::g_value_get_flags(value.to_glib_none().0))
    }
}

impl SetValue for GLSLProfile {
    unsafe fn set_value(value: &mut Value, this: &Self) {
        gobject_sys::g_value_set_flags(value.to_glib_none_mut().0, this.to_glib())
    }
}
