#![allow(
clippy::cast_possible_truncation,
clippy::cast_sign_loss,
clippy::as_conversions
)]
use bitflags::bitflags;
use crate::sys;
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
use std::cell::UnsafeCell;
use std::ffi::{CStr, c_void};
#[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_truncate(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_truncate(bits))
}
}
#[cfg(all(feature = "serde", feature = "multi-viewport"))]
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(all(feature = "serde", feature = "multi-viewport"))]
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_truncate(bits))
}
}
bitflags! {
#[repr(transparent)]
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 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)]
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 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;
}
}
#[cfg(feature = "multi-viewport")]
bitflags! {
#[repr(transparent)]
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;
}
}
#[repr(transparent)]
pub struct Io(UnsafeCell<sys::ImGuiIO>);
const _: [(); std::mem::size_of::<sys::ImGuiIO>()] = [(); std::mem::size_of::<Io>()];
const _: [(); std::mem::align_of::<sys::ImGuiIO>()] = [(); std::mem::align_of::<Io>()];
impl Io {
#[inline]
fn inner(&self) -> &sys::ImGuiIO {
unsafe { &*self.0.get() }
}
#[inline]
fn inner_mut(&mut self) -> &mut sys::ImGuiIO {
unsafe { &mut *self.0.get() }
}
pub fn display_size(&self) -> [f32; 2] {
[self.inner().DisplaySize.x, self.inner().DisplaySize.y]
}
pub fn set_display_size(&mut self, size: [f32; 2]) {
self.inner_mut().DisplaySize.x = size[0];
self.inner_mut().DisplaySize.y = size[1];
}
pub fn delta_time(&self) -> f32 {
self.inner().DeltaTime
}
pub fn set_delta_time(&mut self, delta_time: f32) {
self.inner_mut().DeltaTime = delta_time;
}
#[doc(alias = "IniSavingRate")]
pub fn ini_saving_rate(&self) -> f32 {
self.inner().IniSavingRate
}
#[doc(alias = "IniSavingRate")]
pub fn set_ini_saving_rate(&mut self, seconds: f32) {
self.inner_mut().IniSavingRate = seconds;
}
#[doc(alias = "IniFilename")]
pub fn ini_filename(&self) -> Option<&CStr> {
let ptr = self.inner().IniFilename;
unsafe { (!ptr.is_null()).then(|| CStr::from_ptr(ptr)) }
}
#[doc(alias = "LogFilename")]
pub fn log_filename(&self) -> Option<&CStr> {
let ptr = self.inner().LogFilename;
unsafe { (!ptr.is_null()).then(|| CStr::from_ptr(ptr)) }
}
#[doc(alias = "UserData")]
pub fn user_data(&self) -> *mut c_void {
self.inner().UserData
}
#[doc(alias = "UserData")]
pub fn set_user_data(&mut self, user_data: *mut c_void) {
self.inner_mut().UserData = user_data;
}
#[doc(alias = "FontAllowUserScaling")]
pub fn font_allow_user_scaling(&self) -> bool {
self.inner().FontAllowUserScaling
}
#[doc(alias = "FontAllowUserScaling")]
pub fn set_font_allow_user_scaling(&mut self, enabled: bool) {
self.inner_mut().FontAllowUserScaling = enabled;
}
pub fn mouse_pos(&self) -> [f32; 2] {
[self.inner().MousePos.x, self.inner().MousePos.y]
}
pub fn set_mouse_pos(&mut self, pos: [f32; 2]) {
self.inner_mut().MousePos.x = pos[0];
self.inner_mut().MousePos.y = pos[1];
}
pub fn mouse_wheel(&self) -> f32 {
self.inner().MouseWheel
}
pub fn set_mouse_wheel(&mut self, wheel: f32) {
self.inner_mut().MouseWheel = wheel;
}
pub fn mouse_wheel_h(&self) -> f32 {
self.inner().MouseWheelH
}
pub fn set_mouse_wheel_h(&mut self, wheel_h: f32) {
self.inner_mut().MouseWheelH = wheel_h;
}
pub fn mouse_down(&self, button: usize) -> bool {
if button < 5 {
self.inner().MouseDown[button]
} else {
false
}
}
pub fn mouse_down_button(&self, button: crate::input::MouseButton) -> bool {
self.mouse_down(button as i32 as usize)
}
pub fn set_mouse_down(&mut self, button: usize, down: bool) {
if button < 5 {
self.inner_mut().MouseDown[button] = down;
}
}
pub fn set_mouse_down_button(&mut self, button: crate::input::MouseButton, down: bool) {
self.set_mouse_down(button as i32 as usize, down);
}
pub fn want_capture_mouse(&self) -> bool {
self.inner().WantCaptureMouse
}
#[doc(alias = "WantCaptureMouseUnlessPopupClose")]
pub fn want_capture_mouse_unless_popup_close(&self) -> bool {
self.inner().WantCaptureMouseUnlessPopupClose
}
pub fn want_capture_keyboard(&self) -> bool {
self.inner().WantCaptureKeyboard
}
pub fn want_text_input(&self) -> bool {
self.inner().WantTextInput
}
pub fn want_set_mouse_pos(&self) -> bool {
self.inner().WantSetMousePos
}
pub fn mouse_draw_cursor(&self) -> bool {
self.inner().MouseDrawCursor
}
pub fn set_mouse_draw_cursor(&mut self, draw: bool) {
self.inner_mut().MouseDrawCursor = draw;
}
pub fn want_save_ini_settings(&self) -> bool {
self.inner().WantSaveIniSettings
}
pub fn framerate(&self) -> f32 {
self.inner().Framerate
}
pub fn metrics_render_vertices(&self) -> i32 {
self.inner().MetricsRenderVertices
}
pub fn metrics_render_indices(&self) -> i32 {
self.inner().MetricsRenderIndices
}
pub fn metrics_render_windows(&self) -> i32 {
self.inner().MetricsRenderWindows
}
pub fn metrics_active_windows(&self) -> i32 {
self.inner().MetricsActiveWindows
}
pub fn config_flags(&self) -> ConfigFlags {
ConfigFlags::from_bits_truncate(self.inner().ConfigFlags)
}
pub fn set_config_flags(&mut self, flags: ConfigFlags) {
self.inner_mut().ConfigFlags = flags.bits();
}
#[doc(alias = "ConfigNavSwapGamepadButtons")]
pub fn config_nav_swap_gamepad_buttons(&self) -> bool {
self.inner().ConfigNavSwapGamepadButtons
}
#[doc(alias = "ConfigNavSwapGamepadButtons")]
pub fn set_config_nav_swap_gamepad_buttons(&mut self, enabled: bool) {
self.inner_mut().ConfigNavSwapGamepadButtons = enabled;
}
#[doc(alias = "ConfigNavMoveSetMousePos")]
pub fn config_nav_move_set_mouse_pos(&self) -> bool {
self.inner().ConfigNavMoveSetMousePos
}
#[doc(alias = "ConfigNavMoveSetMousePos")]
pub fn set_config_nav_move_set_mouse_pos(&mut self, enabled: bool) {
self.inner_mut().ConfigNavMoveSetMousePos = enabled;
}
#[doc(alias = "ConfigNavCaptureKeyboard")]
pub fn config_nav_capture_keyboard(&self) -> bool {
self.inner().ConfigNavCaptureKeyboard
}
#[doc(alias = "ConfigNavCaptureKeyboard")]
pub fn set_config_nav_capture_keyboard(&mut self, enabled: bool) {
self.inner_mut().ConfigNavCaptureKeyboard = enabled;
}
#[doc(alias = "ConfigNavEscapeClearFocusItem")]
pub fn config_nav_escape_clear_focus_item(&self) -> bool {
self.inner().ConfigNavEscapeClearFocusItem
}
#[doc(alias = "ConfigNavEscapeClearFocusItem")]
pub fn set_config_nav_escape_clear_focus_item(&mut self, enabled: bool) {
self.inner_mut().ConfigNavEscapeClearFocusItem = enabled;
}
#[doc(alias = "ConfigNavEscapeClearFocusWindow")]
pub fn config_nav_escape_clear_focus_window(&self) -> bool {
self.inner().ConfigNavEscapeClearFocusWindow
}
#[doc(alias = "ConfigNavEscapeClearFocusWindow")]
pub fn set_config_nav_escape_clear_focus_window(&mut self, enabled: bool) {
self.inner_mut().ConfigNavEscapeClearFocusWindow = enabled;
}
#[doc(alias = "ConfigNavCursorVisibleAuto")]
pub fn config_nav_cursor_visible_auto(&self) -> bool {
self.inner().ConfigNavCursorVisibleAuto
}
#[doc(alias = "ConfigNavCursorVisibleAuto")]
pub fn set_config_nav_cursor_visible_auto(&mut self, enabled: bool) {
self.inner_mut().ConfigNavCursorVisibleAuto = enabled;
}
#[doc(alias = "ConfigNavCursorVisibleAlways")]
pub fn config_nav_cursor_visible_always(&self) -> bool {
self.inner().ConfigNavCursorVisibleAlways
}
#[doc(alias = "ConfigNavCursorVisibleAlways")]
pub fn set_config_nav_cursor_visible_always(&mut self, enabled: bool) {
self.inner_mut().ConfigNavCursorVisibleAlways = enabled;
}
#[doc(alias = "ConfigDockingNoSplit")]
pub fn config_docking_no_split(&self) -> bool {
self.inner().ConfigDockingNoSplit
}
#[doc(alias = "ConfigDockingNoSplit")]
pub fn set_config_docking_no_split(&mut self, enabled: bool) {
self.inner_mut().ConfigDockingNoSplit = enabled;
}
#[doc(alias = "ConfigDockingNoDockingOver")]
pub fn config_docking_no_docking_over(&self) -> bool {
self.inner().ConfigDockingNoDockingOver
}
#[doc(alias = "ConfigDockingNoDockingOver")]
pub fn set_config_docking_no_docking_over(&mut self, enabled: bool) {
self.inner_mut().ConfigDockingNoDockingOver = enabled;
}
#[doc(alias = "ConfigDockingWithShift")]
pub fn config_docking_with_shift(&self) -> bool {
self.inner().ConfigDockingWithShift
}
#[doc(alias = "ConfigDockingWithShift")]
pub fn set_config_docking_with_shift(&mut self, enabled: bool) {
self.inner_mut().ConfigDockingWithShift = enabled;
}
#[doc(alias = "ConfigDockingAlwaysTabBar")]
pub fn config_docking_always_tab_bar(&self) -> bool {
self.inner().ConfigDockingAlwaysTabBar
}
#[doc(alias = "ConfigDockingAlwaysTabBar")]
pub fn set_config_docking_always_tab_bar(&mut self, enabled: bool) {
self.inner_mut().ConfigDockingAlwaysTabBar = enabled;
}
#[doc(alias = "ConfigDockingTransparentPayload")]
pub fn config_docking_transparent_payload(&self) -> bool {
self.inner().ConfigDockingTransparentPayload
}
#[doc(alias = "ConfigDockingTransparentPayload")]
pub fn set_config_docking_transparent_payload(&mut self, enabled: bool) {
self.inner_mut().ConfigDockingTransparentPayload = enabled;
}
#[doc(alias = "ConfigViewportsNoAutoMerge")]
pub fn config_viewports_no_auto_merge(&self) -> bool {
self.inner().ConfigViewportsNoAutoMerge
}
#[doc(alias = "ConfigViewportsNoAutoMerge")]
pub fn set_config_viewports_no_auto_merge(&mut self, enabled: bool) {
self.inner_mut().ConfigViewportsNoAutoMerge = enabled;
}
#[doc(alias = "ConfigViewportsNoTaskBarIcon")]
pub fn config_viewports_no_task_bar_icon(&self) -> bool {
self.inner().ConfigViewportsNoTaskBarIcon
}
#[doc(alias = "ConfigViewportsNoTaskBarIcon")]
pub fn set_config_viewports_no_task_bar_icon(&mut self, enabled: bool) {
self.inner_mut().ConfigViewportsNoTaskBarIcon = enabled;
}
#[doc(alias = "ConfigViewportsNoDecoration")]
pub fn config_viewports_no_decoration(&self) -> bool {
self.inner().ConfigViewportsNoDecoration
}
#[doc(alias = "ConfigViewportsNoDecoration")]
pub fn set_config_viewports_no_decoration(&mut self, enabled: bool) {
self.inner_mut().ConfigViewportsNoDecoration = enabled;
}
#[doc(alias = "ConfigViewportsNoDefaultParent")]
pub fn config_viewports_no_default_parent(&self) -> bool {
self.inner().ConfigViewportsNoDefaultParent
}
#[doc(alias = "ConfigViewportsNoDefaultParent")]
pub fn set_config_viewports_no_default_parent(&mut self, enabled: bool) {
self.inner_mut().ConfigViewportsNoDefaultParent = enabled;
}
#[doc(alias = "ConfigViewportsPlatformFocusSetsImGuiFocus")]
pub fn config_viewports_platform_focus_sets_imgui_focus(&self) -> bool {
self.inner().ConfigViewportsPlatformFocusSetsImGuiFocus
}
#[doc(alias = "ConfigViewportsPlatformFocusSetsImGuiFocus")]
pub fn set_config_viewports_platform_focus_sets_imgui_focus(&mut self, enabled: bool) {
self.inner_mut().ConfigViewportsPlatformFocusSetsImGuiFocus = enabled;
}
#[doc(alias = "ConfigDpiScaleFonts")]
pub fn config_dpi_scale_fonts(&self) -> bool {
self.inner().ConfigDpiScaleFonts
}
#[doc(alias = "ConfigDpiScaleFonts")]
pub fn set_config_dpi_scale_fonts(&mut self, enabled: bool) {
self.inner_mut().ConfigDpiScaleFonts = enabled;
}
#[doc(alias = "ConfigDpiScaleViewports")]
pub fn config_dpi_scale_viewports(&self) -> bool {
self.inner().ConfigDpiScaleViewports
}
#[doc(alias = "ConfigDpiScaleViewports")]
pub fn set_config_dpi_scale_viewports(&mut self, enabled: bool) {
self.inner_mut().ConfigDpiScaleViewports = enabled;
}
#[doc(alias = "ConfigMacOSXBehaviors")]
pub fn config_macosx_behaviors(&self) -> bool {
self.inner().ConfigMacOSXBehaviors
}
#[doc(alias = "ConfigMacOSXBehaviors")]
pub fn set_config_macosx_behaviors(&mut self, enabled: bool) {
self.inner_mut().ConfigMacOSXBehaviors = enabled;
}
#[doc(alias = "ConfigInputTrickleEventQueue")]
pub fn config_input_trickle_event_queue(&self) -> bool {
self.inner().ConfigInputTrickleEventQueue
}
#[doc(alias = "ConfigInputTrickleEventQueue")]
pub fn set_config_input_trickle_event_queue(&mut self, enabled: bool) {
self.inner_mut().ConfigInputTrickleEventQueue = enabled;
}
#[doc(alias = "ConfigInputTextCursorBlink")]
pub fn config_input_text_cursor_blink(&self) -> bool {
self.inner().ConfigInputTextCursorBlink
}
#[doc(alias = "ConfigInputTextCursorBlink")]
pub fn set_config_input_text_cursor_blink(&mut self, enabled: bool) {
self.inner_mut().ConfigInputTextCursorBlink = enabled;
}
#[doc(alias = "ConfigInputTextEnterKeepActive")]
pub fn config_input_text_enter_keep_active(&self) -> bool {
self.inner().ConfigInputTextEnterKeepActive
}
#[doc(alias = "ConfigInputTextEnterKeepActive")]
pub fn set_config_input_text_enter_keep_active(&mut self, enabled: bool) {
self.inner_mut().ConfigInputTextEnterKeepActive = enabled;
}
#[doc(alias = "ConfigDragClickToInputText")]
pub fn config_drag_click_to_input_text(&self) -> bool {
self.inner().ConfigDragClickToInputText
}
#[doc(alias = "ConfigDragClickToInputText")]
pub fn set_config_drag_click_to_input_text(&mut self, enabled: bool) {
self.inner_mut().ConfigDragClickToInputText = enabled;
}
#[doc(alias = "ConfigWindowsMoveFromTitleBarOnly")]
pub fn config_windows_move_from_title_bar_only(&self) -> bool {
self.inner().ConfigWindowsMoveFromTitleBarOnly
}
#[doc(alias = "ConfigWindowsMoveFromTitleBarOnly")]
pub fn set_config_windows_move_from_title_bar_only(&mut self, enabled: bool) {
self.inner_mut().ConfigWindowsMoveFromTitleBarOnly = enabled;
}
#[doc(alias = "ConfigWindowsResizeFromEdges")]
pub fn config_windows_resize_from_edges(&self) -> bool {
self.inner().ConfigWindowsResizeFromEdges
}
#[doc(alias = "ConfigWindowsResizeFromEdges")]
pub fn set_config_windows_resize_from_edges(&mut self, enabled: bool) {
self.inner_mut().ConfigWindowsResizeFromEdges = enabled;
}
#[doc(alias = "ConfigWindowsCopyContentsWithCtrlC")]
pub fn config_windows_copy_contents_with_ctrl_c(&self) -> bool {
self.inner().ConfigWindowsCopyContentsWithCtrlC
}
#[doc(alias = "ConfigWindowsCopyContentsWithCtrlC")]
pub fn set_config_windows_copy_contents_with_ctrl_c(&mut self, enabled: bool) {
self.inner_mut().ConfigWindowsCopyContentsWithCtrlC = enabled;
}
#[doc(alias = "ConfigScrollbarScrollByPage")]
pub fn config_scrollbar_scroll_by_page(&self) -> bool {
self.inner().ConfigScrollbarScrollByPage
}
#[doc(alias = "ConfigScrollbarScrollByPage")]
pub fn set_config_scrollbar_scroll_by_page(&mut self, enabled: bool) {
self.inner_mut().ConfigScrollbarScrollByPage = enabled;
}
#[doc(alias = "ConfigMemoryCompactTimer")]
pub fn config_memory_compact_timer(&self) -> f32 {
self.inner().ConfigMemoryCompactTimer
}
#[doc(alias = "ConfigMemoryCompactTimer")]
pub fn set_config_memory_compact_timer(&mut self, seconds: f32) {
self.inner_mut().ConfigMemoryCompactTimer = seconds;
}
#[doc(alias = "MouseDoubleClickTime")]
pub fn mouse_double_click_time(&self) -> f32 {
self.inner().MouseDoubleClickTime
}
#[doc(alias = "MouseDoubleClickTime")]
pub fn set_mouse_double_click_time(&mut self, seconds: f32) {
self.inner_mut().MouseDoubleClickTime = seconds;
}
#[doc(alias = "MouseDoubleClickMaxDist")]
pub fn mouse_double_click_max_dist(&self) -> f32 {
self.inner().MouseDoubleClickMaxDist
}
#[doc(alias = "MouseDoubleClickMaxDist")]
pub fn set_mouse_double_click_max_dist(&mut self, pixels: f32) {
self.inner_mut().MouseDoubleClickMaxDist = pixels;
}
#[doc(alias = "MouseDragThreshold")]
pub fn mouse_drag_threshold(&self) -> f32 {
self.inner().MouseDragThreshold
}
#[doc(alias = "MouseDragThreshold")]
pub fn set_mouse_drag_threshold(&mut self, pixels: f32) {
self.inner_mut().MouseDragThreshold = pixels;
}
#[doc(alias = "KeyRepeatDelay")]
pub fn key_repeat_delay(&self) -> f32 {
self.inner().KeyRepeatDelay
}
#[doc(alias = "KeyRepeatDelay")]
pub fn set_key_repeat_delay(&mut self, seconds: f32) {
self.inner_mut().KeyRepeatDelay = seconds;
}
#[doc(alias = "KeyRepeatRate")]
pub fn key_repeat_rate(&self) -> f32 {
self.inner().KeyRepeatRate
}
#[doc(alias = "KeyRepeatRate")]
pub fn set_key_repeat_rate(&mut self, seconds: f32) {
self.inner_mut().KeyRepeatRate = seconds;
}
#[doc(alias = "ConfigErrorRecovery")]
pub fn config_error_recovery(&self) -> bool {
self.inner().ConfigErrorRecovery
}
#[doc(alias = "ConfigErrorRecovery")]
pub fn set_config_error_recovery(&mut self, enabled: bool) {
self.inner_mut().ConfigErrorRecovery = enabled;
}
#[doc(alias = "ConfigErrorRecoveryEnableAssert")]
pub fn config_error_recovery_enable_assert(&self) -> bool {
self.inner().ConfigErrorRecoveryEnableAssert
}
#[doc(alias = "ConfigErrorRecoveryEnableAssert")]
pub fn set_config_error_recovery_enable_assert(&mut self, enabled: bool) {
self.inner_mut().ConfigErrorRecoveryEnableAssert = enabled;
}
#[doc(alias = "ConfigErrorRecoveryEnableDebugLog")]
pub fn config_error_recovery_enable_debug_log(&self) -> bool {
self.inner().ConfigErrorRecoveryEnableDebugLog
}
#[doc(alias = "ConfigErrorRecoveryEnableDebugLog")]
pub fn set_config_error_recovery_enable_debug_log(&mut self, enabled: bool) {
self.inner_mut().ConfigErrorRecoveryEnableDebugLog = enabled;
}
#[doc(alias = "ConfigErrorRecoveryEnableTooltip")]
pub fn config_error_recovery_enable_tooltip(&self) -> bool {
self.inner().ConfigErrorRecoveryEnableTooltip
}
#[doc(alias = "ConfigErrorRecoveryEnableTooltip")]
pub fn set_config_error_recovery_enable_tooltip(&mut self, enabled: bool) {
self.inner_mut().ConfigErrorRecoveryEnableTooltip = enabled;
}
#[doc(alias = "ConfigDebugIsDebuggerPresent")]
pub fn config_debug_is_debugger_present(&self) -> bool {
self.inner().ConfigDebugIsDebuggerPresent
}
#[doc(alias = "ConfigDebugIsDebuggerPresent")]
pub fn set_config_debug_is_debugger_present(&mut self, enabled: bool) {
self.inner_mut().ConfigDebugIsDebuggerPresent = enabled;
}
#[doc(alias = "ConfigDebugHighlightIdConflicts")]
pub fn config_debug_highlight_id_conflicts(&self) -> bool {
self.inner().ConfigDebugHighlightIdConflicts
}
#[doc(alias = "ConfigDebugHighlightIdConflicts")]
pub fn set_config_debug_highlight_id_conflicts(&mut self, enabled: bool) {
self.inner_mut().ConfigDebugHighlightIdConflicts = enabled;
}
#[doc(alias = "ConfigDebugHighlightIdConflictsShowItemPicker")]
pub fn config_debug_highlight_id_conflicts_show_item_picker(&self) -> bool {
self.inner().ConfigDebugHighlightIdConflictsShowItemPicker
}
#[doc(alias = "ConfigDebugHighlightIdConflictsShowItemPicker")]
pub fn set_config_debug_highlight_id_conflicts_show_item_picker(&mut self, enabled: bool) {
self.inner_mut()
.ConfigDebugHighlightIdConflictsShowItemPicker = enabled;
}
#[doc(alias = "ConfigDebugBeginReturnValueOnce")]
pub fn config_debug_begin_return_value_once(&self) -> bool {
self.inner().ConfigDebugBeginReturnValueOnce
}
#[doc(alias = "ConfigDebugBeginReturnValueOnce")]
pub fn set_config_debug_begin_return_value_once(&mut self, enabled: bool) {
self.inner_mut().ConfigDebugBeginReturnValueOnce = enabled;
}
#[doc(alias = "ConfigDebugBeginReturnValueLoop")]
pub fn config_debug_begin_return_value_loop(&self) -> bool {
self.inner().ConfigDebugBeginReturnValueLoop
}
#[doc(alias = "ConfigDebugBeginReturnValueLoop")]
pub fn set_config_debug_begin_return_value_loop(&mut self, enabled: bool) {
self.inner_mut().ConfigDebugBeginReturnValueLoop = enabled;
}
#[doc(alias = "ConfigDebugIgnoreFocusLoss")]
pub fn config_debug_ignore_focus_loss(&self) -> bool {
self.inner().ConfigDebugIgnoreFocusLoss
}
#[doc(alias = "ConfigDebugIgnoreFocusLoss")]
pub fn set_config_debug_ignore_focus_loss(&mut self, enabled: bool) {
self.inner_mut().ConfigDebugIgnoreFocusLoss = enabled;
}
#[doc(alias = "ConfigDebugIniSettings")]
pub fn config_debug_ini_settings(&self) -> bool {
self.inner().ConfigDebugIniSettings
}
#[doc(alias = "ConfigDebugIniSettings")]
pub fn set_config_debug_ini_settings(&mut self, enabled: bool) {
self.inner_mut().ConfigDebugIniSettings = enabled;
}
#[doc(alias = "BackendPlatformName")]
pub fn backend_platform_name(&self) -> Option<&CStr> {
let ptr = self.inner().BackendPlatformName;
unsafe { (!ptr.is_null()).then(|| CStr::from_ptr(ptr)) }
}
#[doc(alias = "BackendRendererName")]
pub fn backend_renderer_name(&self) -> Option<&CStr> {
let ptr = self.inner().BackendRendererName;
unsafe { (!ptr.is_null()).then(|| CStr::from_ptr(ptr)) }
}
#[doc(alias = "BackendPlatformUserData")]
pub fn backend_platform_user_data(&self) -> *mut c_void {
self.inner().BackendPlatformUserData
}
#[doc(alias = "BackendPlatformUserData")]
pub fn set_backend_platform_user_data(&mut self, user_data: *mut c_void) {
self.inner_mut().BackendPlatformUserData = user_data;
}
#[doc(alias = "BackendRendererUserData")]
pub fn backend_renderer_user_data(&self) -> *mut c_void {
self.inner().BackendRendererUserData
}
#[doc(alias = "BackendRendererUserData")]
pub fn set_backend_renderer_user_data(&mut self, user_data: *mut c_void) {
self.inner_mut().BackendRendererUserData = user_data;
}
#[doc(alias = "BackendLanguageUserData")]
pub fn backend_language_user_data(&self) -> *mut c_void {
self.inner().BackendLanguageUserData
}
#[doc(alias = "BackendLanguageUserData")]
pub fn set_backend_language_user_data(&mut self, user_data: *mut c_void) {
self.inner_mut().BackendLanguageUserData = user_data;
}
pub fn backend_flags(&self) -> BackendFlags {
BackendFlags::from_bits_truncate(self.inner().BackendFlags)
}
pub fn set_backend_flags(&mut self, flags: BackendFlags) {
self.inner_mut().BackendFlags = flags.bits();
}
pub fn add_key_event(&mut self, key: crate::Key, down: bool) {
unsafe {
sys::ImGuiIO_AddKeyEvent(self.inner_mut() as *mut _, key.into(), down);
}
}
pub fn add_input_character(&mut self, character: char) {
unsafe {
sys::ImGuiIO_AddInputCharacter(self.inner_mut() as *mut _, character as u32);
}
}
pub fn add_mouse_pos_event(&mut self, pos: [f32; 2]) {
unsafe {
sys::ImGuiIO_AddMousePosEvent(self.inner_mut() as *mut _, pos[0], pos[1]);
}
}
pub fn add_mouse_button_event(&mut self, button: crate::input::MouseButton, down: bool) {
unsafe {
sys::ImGuiIO_AddMouseButtonEvent(self.inner_mut() as *mut _, button.into(), down);
}
}
pub fn add_mouse_wheel_event(&mut self, wheel: [f32; 2]) {
unsafe {
sys::ImGuiIO_AddMouseWheelEvent(self.inner_mut() as *mut _, wheel[0], wheel[1]);
}
}
pub fn add_mouse_source_event(&mut self, source: crate::input::MouseSource) {
unsafe {
sys::ImGuiIO_AddMouseSourceEvent(self.inner_mut() as *mut _, source.into());
}
}
pub fn add_mouse_viewport_event(&mut self, viewport_id: crate::Id) {
unsafe {
sys::ImGuiIO_AddMouseViewportEvent(self.inner_mut() as *mut _, viewport_id.raw());
}
}
pub fn add_focus_event(&mut self, focused: bool) {
unsafe {
sys::ImGuiIO_AddFocusEvent(self.inner_mut() as *mut _, focused);
}
}
pub fn font_global_scale(&self) -> f32 {
unsafe { (*sys::igGetStyle()).FontScaleMain }
}
pub fn set_font_global_scale(&mut self, _scale: f32) {
unsafe {
(*sys::igGetStyle()).FontScaleMain = _scale;
}
}
pub fn display_framebuffer_scale(&self) -> [f32; 2] {
let scale = self.inner().DisplayFramebufferScale;
[scale.x, scale.y]
}
#[doc(alias = "MouseDelta")]
pub fn mouse_delta(&self) -> [f32; 2] {
let delta = self.inner().MouseDelta;
[delta.x, delta.y]
}
#[doc(alias = "KeyCtrl")]
pub fn key_ctrl(&self) -> bool {
self.inner().KeyCtrl
}
#[doc(alias = "KeyShift")]
pub fn key_shift(&self) -> bool {
self.inner().KeyShift
}
#[doc(alias = "KeyAlt")]
pub fn key_alt(&self) -> bool {
self.inner().KeyAlt
}
#[doc(alias = "KeySuper")]
pub fn key_super(&self) -> bool {
self.inner().KeySuper
}
#[doc(alias = "MouseSource")]
pub fn mouse_source(&self) -> crate::input::MouseSource {
match self.inner().MouseSource {
sys::ImGuiMouseSource_Mouse => crate::input::MouseSource::Mouse,
sys::ImGuiMouseSource_TouchScreen => crate::input::MouseSource::TouchScreen,
sys::ImGuiMouseSource_Pen => crate::input::MouseSource::Pen,
_ => crate::input::MouseSource::Mouse,
}
}
#[doc(alias = "MouseHoveredViewport")]
pub fn mouse_hovered_viewport(&self) -> crate::Id {
crate::Id::from(self.inner().MouseHoveredViewport)
}
#[doc(alias = "MouseCtrlLeftAsRightClick")]
pub fn mouse_ctrl_left_as_right_click(&self) -> bool {
self.inner().MouseCtrlLeftAsRightClick
}
#[doc(alias = "MouseCtrlLeftAsRightClick")]
pub fn set_mouse_ctrl_left_as_right_click(&mut self, enabled: bool) {
self.inner_mut().MouseCtrlLeftAsRightClick = enabled;
}
pub fn set_display_framebuffer_scale(&mut self, scale: [f32; 2]) {
self.inner_mut().DisplayFramebufferScale.x = scale[0];
self.inner_mut().DisplayFramebufferScale.y = scale[1];
}
}