dear_imgui_rs/io/
flags.rs1use crate::sys;
2use bitflags::bitflags;
3#[cfg(feature = "serde")]
4use serde::{Deserialize, Serialize};
5
6#[cfg(feature = "serde")]
7impl Serialize for ConfigFlags {
8 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
9 where
10 S: serde::Serializer,
11 {
12 serializer.serialize_i32(self.bits())
13 }
14}
15
16#[cfg(feature = "serde")]
17impl<'de> Deserialize<'de> for ConfigFlags {
18 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
19 where
20 D: serde::Deserializer<'de>,
21 {
22 let bits = i32::deserialize(deserializer)?;
23 Ok(ConfigFlags::from_bits_retain(bits))
24 }
25}
26
27#[cfg(feature = "serde")]
28impl Serialize for BackendFlags {
29 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
30 where
31 S: serde::Serializer,
32 {
33 serializer.serialize_i32(self.bits())
34 }
35}
36
37#[cfg(feature = "serde")]
38impl<'de> Deserialize<'de> for BackendFlags {
39 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
40 where
41 D: serde::Deserializer<'de>,
42 {
43 let bits = i32::deserialize(deserializer)?;
44 Ok(BackendFlags::from_bits_retain(bits))
45 }
46}
47
48#[cfg(feature = "serde")]
49impl Serialize for ViewportFlags {
50 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
51 where
52 S: serde::Serializer,
53 {
54 serializer.serialize_i32(self.bits())
55 }
56}
57
58#[cfg(feature = "serde")]
59impl<'de> Deserialize<'de> for ViewportFlags {
60 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
61 where
62 D: serde::Deserializer<'de>,
63 {
64 let bits = i32::deserialize(deserializer)?;
65 Ok(ViewportFlags::from_bits_retain(bits))
66 }
67}
68
69#[cfg(feature = "serde")]
70impl Serialize for WindowClassViewportFlags {
71 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
72 where
73 S: serde::Serializer,
74 {
75 serializer.serialize_i32(self.bits())
76 }
77}
78
79#[cfg(feature = "serde")]
80impl<'de> Deserialize<'de> for WindowClassViewportFlags {
81 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
82 where
83 D: serde::Deserializer<'de>,
84 {
85 let bits = i32::deserialize(deserializer)?;
86 Ok(WindowClassViewportFlags::from_bits_retain(bits))
87 }
88}
89
90bitflags! {
91 #[repr(transparent)]
93 #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
94 pub struct ConfigFlags: i32 {
95 const NAV_ENABLE_KEYBOARD = sys::ImGuiConfigFlags_NavEnableKeyboard as i32;
97 const NAV_ENABLE_GAMEPAD = sys::ImGuiConfigFlags_NavEnableGamepad as i32;
99 const NO_MOUSE = sys::ImGuiConfigFlags_NoMouse as i32;
101 const NO_MOUSE_CURSOR_CHANGE = sys::ImGuiConfigFlags_NoMouseCursorChange as i32;
103 const NO_KEYBOARD = sys::ImGuiConfigFlags_NoKeyboard as i32;
105 const IS_SRGB = sys::ImGuiConfigFlags_IsSRGB as i32;
107 const IS_TOUCH_SCREEN = sys::ImGuiConfigFlags_IsTouchScreen as i32;
109
110 const DOCKING_ENABLE = sys::ImGuiConfigFlags_DockingEnable as i32;
111
112 const VIEWPORTS_ENABLE = sys::ImGuiConfigFlags_ViewportsEnable as i32;
113 }
114}
115
116bitflags! {
117 #[repr(transparent)]
122 #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
123 pub struct WindowClassViewportFlags: i32 {
124 const NO_DECORATION = sys::ImGuiViewportFlags_NoDecoration as i32;
126 const NO_TASK_BAR_ICON = sys::ImGuiViewportFlags_NoTaskBarIcon as i32;
128 const NO_FOCUS_ON_APPEARING = sys::ImGuiViewportFlags_NoFocusOnAppearing as i32;
130 const NO_FOCUS_ON_CLICK = sys::ImGuiViewportFlags_NoFocusOnClick as i32;
132 const NO_INPUTS = sys::ImGuiViewportFlags_NoInputs as i32;
134 const NO_RENDERER_CLEAR = sys::ImGuiViewportFlags_NoRendererClear as i32;
136 const NO_AUTO_MERGE = sys::ImGuiViewportFlags_NoAutoMerge as i32;
138 const TOP_MOST = sys::ImGuiViewportFlags_TopMost as i32;
140 }
141}
142
143bitflags! {
144 #[repr(transparent)]
146 #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
147 pub struct BackendFlags: i32 {
148 const HAS_GAMEPAD = sys::ImGuiBackendFlags_HasGamepad as i32;
150 const HAS_MOUSE_CURSORS = sys::ImGuiBackendFlags_HasMouseCursors as i32;
152 const HAS_SET_MOUSE_POS = sys::ImGuiBackendFlags_HasSetMousePos as i32;
154 const HAS_MOUSE_HOVERED_VIEWPORT =
156 sys::ImGuiBackendFlags_HasMouseHoveredViewport as i32;
157 const HAS_PARENT_VIEWPORT = sys::ImGuiBackendFlags_HasParentViewport as i32;
159 const RENDERER_HAS_VTX_OFFSET = sys::ImGuiBackendFlags_RendererHasVtxOffset as i32;
161 const RENDERER_HAS_TEXTURES = sys::ImGuiBackendFlags_RendererHasTextures as i32;
163
164 #[cfg(feature = "multi-viewport")]
165 const PLATFORM_HAS_VIEWPORTS = sys::ImGuiBackendFlags_PlatformHasViewports as i32;
167 #[cfg(feature = "multi-viewport")]
168 const RENDERER_HAS_VIEWPORTS = sys::ImGuiBackendFlags_RendererHasViewports as i32;
170 }
171}
172
173bitflags! {
174 #[repr(transparent)]
176 #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
177 pub struct ViewportFlags: i32 {
178 const NONE = 0;
180 const IS_PLATFORM_WINDOW = sys::ImGuiViewportFlags_IsPlatformWindow as i32;
182 const IS_PLATFORM_MONITOR = sys::ImGuiViewportFlags_IsPlatformMonitor as i32;
184 const OWNED_BY_APP = sys::ImGuiViewportFlags_OwnedByApp as i32;
186 const NO_DECORATION = sys::ImGuiViewportFlags_NoDecoration as i32;
188 const NO_TASK_BAR_ICON = sys::ImGuiViewportFlags_NoTaskBarIcon as i32;
190 const NO_FOCUS_ON_APPEARING = sys::ImGuiViewportFlags_NoFocusOnAppearing as i32;
192 const NO_FOCUS_ON_CLICK = sys::ImGuiViewportFlags_NoFocusOnClick as i32;
194 const NO_INPUTS = sys::ImGuiViewportFlags_NoInputs as i32;
196 const NO_RENDERER_CLEAR = sys::ImGuiViewportFlags_NoRendererClear as i32;
198 const NO_AUTO_MERGE = sys::ImGuiViewportFlags_NoAutoMerge as i32;
200 const TOP_MOST = sys::ImGuiViewportFlags_TopMost as i32;
202 const CAN_HOST_OTHER_WINDOWS = sys::ImGuiViewportFlags_CanHostOtherWindows as i32;
204 const IS_MINIMIZED = sys::ImGuiViewportFlags_IsMinimized as i32;
206 const IS_FOCUSED = sys::ImGuiViewportFlags_IsFocused as i32;
208 }
209}
210
211pub(crate) fn validate_config_flags(caller: &str, flags: ConfigFlags) {
212 let unsupported = flags.bits() & !ConfigFlags::all().bits();
213 assert!(
214 unsupported == 0,
215 "{caller} received unsupported ImGuiConfigFlags bits: 0x{unsupported:X}"
216 );
217}
218
219pub(crate) fn validate_backend_flags(caller: &str, flags: BackendFlags) {
220 let unsupported = flags.bits() & !BackendFlags::all().bits();
221 assert!(
222 unsupported == 0,
223 "{caller} received unsupported ImGuiBackendFlags bits: 0x{unsupported:X}"
224 );
225}