use crate::sys;
use bitflags::bitflags;
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
#[cfg(feature = "serde")]
impl Serialize for ConfigFlags {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
serializer.serialize_i32(self.bits())
}
}
#[cfg(feature = "serde")]
impl<'de> Deserialize<'de> for ConfigFlags {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
let bits = i32::deserialize(deserializer)?;
Ok(ConfigFlags::from_bits_retain(bits))
}
}
#[cfg(feature = "serde")]
impl Serialize for BackendFlags {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
serializer.serialize_i32(self.bits())
}
}
#[cfg(feature = "serde")]
impl<'de> Deserialize<'de> for BackendFlags {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
let bits = i32::deserialize(deserializer)?;
Ok(BackendFlags::from_bits_retain(bits))
}
}
#[cfg(feature = "serde")]
impl Serialize for ViewportFlags {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
serializer.serialize_i32(self.bits())
}
}
#[cfg(feature = "serde")]
impl<'de> Deserialize<'de> for ViewportFlags {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
let bits = i32::deserialize(deserializer)?;
Ok(ViewportFlags::from_bits_retain(bits))
}
}
bitflags! {
#[repr(transparent)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct ConfigFlags: i32 {
const NAV_ENABLE_KEYBOARD = sys::ImGuiConfigFlags_NavEnableKeyboard as i32;
const NAV_ENABLE_GAMEPAD = sys::ImGuiConfigFlags_NavEnableGamepad as i32;
const NO_MOUSE = sys::ImGuiConfigFlags_NoMouse as i32;
const NO_MOUSE_CURSOR_CHANGE = sys::ImGuiConfigFlags_NoMouseCursorChange as i32;
const NO_KEYBOARD = sys::ImGuiConfigFlags_NoKeyboard as i32;
const IS_SRGB = sys::ImGuiConfigFlags_IsSRGB as i32;
const IS_TOUCH_SCREEN = sys::ImGuiConfigFlags_IsTouchScreen as i32;
const DOCKING_ENABLE = sys::ImGuiConfigFlags_DockingEnable as i32;
const VIEWPORTS_ENABLE = sys::ImGuiConfigFlags_ViewportsEnable as i32;
}
}
bitflags! {
#[repr(transparent)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct BackendFlags: i32 {
const HAS_GAMEPAD = sys::ImGuiBackendFlags_HasGamepad as i32;
const HAS_MOUSE_CURSORS = sys::ImGuiBackendFlags_HasMouseCursors as i32;
const HAS_SET_MOUSE_POS = sys::ImGuiBackendFlags_HasSetMousePos as i32;
const HAS_MOUSE_HOVERED_VIEWPORT =
sys::ImGuiBackendFlags_HasMouseHoveredViewport as i32;
const HAS_PARENT_VIEWPORT = sys::ImGuiBackendFlags_HasParentViewport as i32;
const RENDERER_HAS_VTX_OFFSET = sys::ImGuiBackendFlags_RendererHasVtxOffset as i32;
const RENDERER_HAS_TEXTURES = sys::ImGuiBackendFlags_RendererHasTextures as i32;
#[cfg(feature = "multi-viewport")]
const PLATFORM_HAS_VIEWPORTS = sys::ImGuiBackendFlags_PlatformHasViewports as i32;
#[cfg(feature = "multi-viewport")]
const RENDERER_HAS_VIEWPORTS = sys::ImGuiBackendFlags_RendererHasViewports as i32;
}
}
bitflags! {
#[repr(transparent)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct ViewportFlags: i32 {
const NONE = 0;
const IS_PLATFORM_WINDOW = sys::ImGuiViewportFlags_IsPlatformWindow as i32;
const IS_PLATFORM_MONITOR = sys::ImGuiViewportFlags_IsPlatformMonitor as i32;
const OWNED_BY_APP = sys::ImGuiViewportFlags_OwnedByApp as i32;
const NO_DECORATION = sys::ImGuiViewportFlags_NoDecoration as i32;
const NO_TASK_BAR_ICON = sys::ImGuiViewportFlags_NoTaskBarIcon as i32;
const NO_FOCUS_ON_APPEARING = sys::ImGuiViewportFlags_NoFocusOnAppearing as i32;
const NO_FOCUS_ON_CLICK = sys::ImGuiViewportFlags_NoFocusOnClick as i32;
const NO_INPUTS = sys::ImGuiViewportFlags_NoInputs as i32;
const NO_RENDERER_CLEAR = sys::ImGuiViewportFlags_NoRendererClear as i32;
const NO_AUTO_MERGE = sys::ImGuiViewportFlags_NoAutoMerge as i32;
const TOP_MOST = sys::ImGuiViewportFlags_TopMost as i32;
const CAN_HOST_OTHER_WINDOWS = sys::ImGuiViewportFlags_CanHostOtherWindows as i32;
const IS_MINIMIZED = sys::ImGuiViewportFlags_IsMinimized as i32;
const IS_FOCUSED = sys::ImGuiViewportFlags_IsFocused as i32;
}
}
pub(crate) fn validate_config_flags(caller: &str, flags: ConfigFlags) {
let unsupported = flags.bits() & !ConfigFlags::all().bits();
assert!(
unsupported == 0,
"{caller} received unsupported ImGuiConfigFlags bits: 0x{unsupported:X}"
);
}
pub(crate) fn validate_backend_flags(caller: &str, flags: BackendFlags) {
let unsupported = flags.bits() & !BackendFlags::all().bits();
assert!(
unsupported == 0,
"{caller} received unsupported ImGuiBackendFlags bits: 0x{unsupported:X}"
);
}
pub(crate) fn validate_viewport_flags(caller: &str, flags: ViewportFlags) {
let unsupported = flags.bits() & !ViewportFlags::all().bits();
assert!(
unsupported == 0,
"{caller} received unsupported ImGuiViewportFlags bits: 0x{unsupported:X}"
);
}