use crate::sys;
fn assert_supported_bits(caller: &str, ty: &str, bits: i32, supported: i32) {
let unsupported = bits & !supported;
assert!(
unsupported == 0,
"{caller} received unsupported {ty} bits: 0x{unsupported:X}"
);
}
pub(super) fn validate_popup_open_flags(caller: &str, flags: PopupOpenFlags) {
assert_supported_bits(
caller,
"PopupOpenFlags",
flags.bits(),
PopupOpenFlags::all().bits(),
);
}
pub(super) fn validate_popup_context_flags(caller: &str, flags: PopupContextFlags) {
assert_supported_bits(
caller,
"PopupContextFlags",
flags.bits(),
PopupContextFlags::all().bits(),
);
}
pub(super) fn validate_popup_query_flags(caller: &str, flags: PopupQueryFlags) {
assert_supported_bits(
caller,
"PopupQueryFlags",
flags.bits(),
PopupQueryFlags::all().bits(),
);
assert!(
!flags.contains(PopupQueryFlags::ANY_POPUP_LEVEL)
|| flags.contains(PopupQueryFlags::ANY_POPUP_ID),
"{caller} requires ANY_POPUP_ID when using ANY_POPUP_LEVEL with a string id"
);
}
macro_rules! impl_popup_flag_raw {
($ty:ident) => {
impl $ty {
#[inline]
pub(crate) fn raw(self) -> i32 {
self.bits()
}
}
};
}
bitflags::bitflags! {
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub struct PopupOpenFlags: i32 {
const NONE = sys::ImGuiPopupFlags_None as i32;
const NO_REOPEN = sys::ImGuiPopupFlags_NoReopen as i32;
const NO_OPEN_OVER_EXISTING_POPUP = sys::ImGuiPopupFlags_NoOpenOverExistingPopup as i32;
}
}
bitflags::bitflags! {
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub struct PopupContextFlags: i32 {
const NONE = sys::ImGuiPopupFlags_None as i32;
const NO_REOPEN = sys::ImGuiPopupFlags_NoReopen as i32;
const NO_OPEN_OVER_EXISTING_POPUP = sys::ImGuiPopupFlags_NoOpenOverExistingPopup as i32;
const NO_OPEN_OVER_ITEMS = sys::ImGuiPopupFlags_NoOpenOverItems as i32;
}
}
bitflags::bitflags! {
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub struct PopupQueryFlags: i32 {
const NONE = sys::ImGuiPopupFlags_None as i32;
const ANY_POPUP_ID = sys::ImGuiPopupFlags_AnyPopupId as i32;
const ANY_POPUP_LEVEL = sys::ImGuiPopupFlags_AnyPopupLevel as i32;
const ANY_POPUP = Self::ANY_POPUP_ID.bits() | Self::ANY_POPUP_LEVEL.bits();
}
}
impl_popup_flag_raw!(PopupOpenFlags);
impl_popup_flag_raw!(PopupContextFlags);
impl_popup_flag_raw!(PopupQueryFlags);