mirror of
https://github.com/eliasstepanik/imgui-rs.git
synced 2026-01-14 15:08:36 +00:00
Added basic Viewport structs and flags
This commit is contained in:
parent
24ad9d526c
commit
4b307a1bf7
@ -13,6 +13,6 @@ publish = false
|
||||
clipboard = "0.5"
|
||||
glium = { version = "0.31", default-features = true }
|
||||
image = "0.23"
|
||||
imgui = { path = "../imgui", features = ["tables-api"] }
|
||||
imgui = { path = "../imgui", features = ["tables-api", "docking"] }
|
||||
imgui-glium-renderer = { path = "../imgui-glium-renderer" }
|
||||
imgui-winit-support = { path = "../imgui-winit-support" }
|
||||
|
||||
4
imgui-examples/examples/viewports.rs
Normal file
4
imgui-examples/examples/viewports.rs
Normal file
@ -0,0 +1,4 @@
|
||||
|
||||
fn main() {
|
||||
|
||||
}
|
||||
@ -9,7 +9,7 @@ use crate::clipboard::{ClipboardBackend, ClipboardContext};
|
||||
use crate::fonts::atlas::{FontAtlas, FontId, SharedFontAtlas};
|
||||
use crate::io::Io;
|
||||
use crate::style::Style;
|
||||
use crate::{sys, DrawData};
|
||||
use crate::{sys, DrawData, PlatformIo};
|
||||
use crate::{MouseCursor, Ui};
|
||||
|
||||
/// An imgui-rs context.
|
||||
@ -479,6 +479,18 @@ impl Context {
|
||||
&mut *(sys::igGetIO() as *mut Io)
|
||||
}
|
||||
}
|
||||
pub fn platform_io(&self) -> &PlatformIo {
|
||||
unsafe {
|
||||
// safe because PlatformIo is a transparent wrapper around sys::ImGuiPlatformIO
|
||||
&*(sys::igGetPlatformIO() as *const PlatformIo)
|
||||
}
|
||||
}
|
||||
pub fn platform_io_mut(&mut self) -> &PlatformIo {
|
||||
unsafe {
|
||||
// safe because PlatformIo is a transparent wrapper around sys::ImGuiPlatformIO
|
||||
&mut *(sys::igGetPlatformIO() as *mut PlatformIo)
|
||||
}
|
||||
}
|
||||
/// Returns an immutable reference to the user interface style
|
||||
#[doc(alias = "GetStyle")]
|
||||
pub fn style(&self) -> &Style {
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
use bitflags::bitflags;
|
||||
use std::f32;
|
||||
use std::ops::{Index, IndexMut};
|
||||
use std::os::raw::{c_char, c_void};
|
||||
use std::os::raw::{c_char, c_void, c_int};
|
||||
use std::time::Duration;
|
||||
|
||||
use crate::fonts::atlas::FontAtlas;
|
||||
@ -55,6 +55,27 @@ bitflags! {
|
||||
|
||||
#[cfg(feature = "docking")]
|
||||
const DOCKING_ENABLE = sys::ImGuiConfigFlags_DockingEnable;
|
||||
|
||||
#[cfg(feature = "docking")]
|
||||
const VIEWPORTS_ENABLE = sys::ImGuiConfigFlags_ViewportsEnable;
|
||||
}
|
||||
|
||||
#[cfg(feature = "docking")]
|
||||
#[repr(transparent)]
|
||||
pub struct ViewportFlags: u32 {
|
||||
const IS_PLATFORM_WINDOW = sys::ImGuiViewportFlags_IsPlatformWindow;
|
||||
const IS_PLATFORM_MONITOR = sys::ImGuiViewportFlags_IsPlatformMonitor;
|
||||
const OWNED_BY_APP = sys::ImGuiViewportFlags_OwnedByApp;
|
||||
const NO_DECORATION = sys::ImGuiViewportFlags_NoDecoration;
|
||||
const NO_TASK_BAR_ICON = sys::ImGuiViewportFlags_NoTaskBarIcon;
|
||||
const NO_FOCUS_ON_APPEARING = sys::ImGuiViewportFlags_NoFocusOnAppearing;
|
||||
const NO_FOCUS_ON_CLICK = sys::ImGuiViewportFlags_NoFocusOnClick;
|
||||
const NO_INPUTS = sys::ImGuiViewportFlags_NoInputs;
|
||||
const NO_RENDERER_CLEAR = sys::ImGuiViewportFlags_NoRendererClear;
|
||||
const TOP_MOST = sys::ImGuiViewportFlags_TopMost;
|
||||
const MINIMIZED = sys::ImGuiViewportFlags_Minimized;
|
||||
const NO_AUTO_MERGE = sys::ImGuiViewportFlags_NoAutoMerge;
|
||||
const CAN_HOST_OTHER_WINDOWS = sys::ImGuiViewportFlags_CanHostOtherWindows;
|
||||
}
|
||||
}
|
||||
|
||||
@ -74,6 +95,11 @@ bitflags! {
|
||||
///
|
||||
/// This enables output of large meshes (64K+ vertices) while still using 16-bits indices.
|
||||
const RENDERER_HAS_VTX_OFFSET = sys::ImGuiBackendFlags_RendererHasVtxOffset;
|
||||
|
||||
#[cfg(feature = "docking")]
|
||||
const PLATFORM_HAS_VIEWPORTS = sys::ImGuiBackendFlags_PlatformHasViewports;
|
||||
#[cfg(feature = "docking")]
|
||||
const RENDERER_HAS_VIEWPORTS = sys::ImGuiBackendFlags_RendererHasViewports;
|
||||
}
|
||||
}
|
||||
|
||||
@ -132,6 +158,73 @@ fn test_nav_input_variants() {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "docking")]
|
||||
#[repr(C)]
|
||||
pub struct PlatformIo {
|
||||
pub(crate) platform_create_window: Option<unsafe extern "C" fn(*mut Viewport)>,
|
||||
pub(crate) platform_destroy_window: Option<unsafe extern "C" fn(*mut Viewport)>,
|
||||
pub(crate) platform_show_window: Option<unsafe extern "C" fn(*mut Viewport)>,
|
||||
pub(crate) platform_set_window_pos: Option<unsafe extern "C" fn(*mut Viewport, sys::ImVec2)>,
|
||||
pub(crate) platform_get_window_pos: Option<unsafe extern "C" fn(*mut Viewport) -> sys::ImVec2>,
|
||||
pub(crate) platform_set_window_size: Option<unsafe extern "C" fn(*mut Viewport, sys::ImVec2)>,
|
||||
pub(crate) platform_get_window_size: Option<unsafe extern "C" fn(*mut Viewport) -> sys::ImVec2>,
|
||||
pub(crate) platform_set_window_focus: Option<unsafe extern "C" fn(*mut Viewport)>,
|
||||
pub(crate) platform_get_window_focus: Option<unsafe extern "C" fn(*mut Viewport) -> bool>,
|
||||
pub(crate) platform_get_window_minimized: Option<unsafe extern "C" fn(*mut Viewport) -> bool>,
|
||||
pub(crate) platform_set_window_title: Option<unsafe extern "C" fn(*mut Viewport, *const c_char)>,
|
||||
pub(crate) platform_set_window_alpha: Option<unsafe extern "C" fn(*mut Viewport, f32)>,
|
||||
pub(crate) platform_update_window: Option<unsafe extern "C" fn(*mut Viewport)>,
|
||||
pub(crate) platform_render_window: Option<unsafe extern "C" fn(*mut Viewport, *mut c_void)>,
|
||||
pub(crate) platform_swap_buffers: Option<unsafe extern "C" fn(*mut Viewport, *mut c_void)>,
|
||||
pub(crate) platform_get_window_dpi_scale: Option<unsafe extern "C" fn(*mut Viewport) -> f32>,
|
||||
pub(crate) platform_on_changed_viewport: Option<unsafe extern "C" fn(*mut Viewport)>,
|
||||
pub(crate) platform_create_vk_surface: Option<unsafe extern "C" fn(*mut Viewport, u64, *const c_void, *mut u64) -> c_int>,
|
||||
|
||||
pub(crate) renderer_create_window: Option<unsafe extern "C" fn(*mut Viewport)>,
|
||||
pub(crate) renderer_destroy_window: Option<unsafe extern "C" fn(*mut Viewport)>,
|
||||
pub(crate) renderer_set_window_size: Option<unsafe extern "C" fn(*mut Viewport, sys::ImVec2)>,
|
||||
pub(crate) renderer_render_window: Option<unsafe extern "C" fn(*mut Viewport, *mut c_void)>,
|
||||
pub(crate) renderer_swap_buffers: Option<unsafe extern "C" fn(*mut Viewport, *mut c_void)>,
|
||||
|
||||
pub(crate) monitors: ImVector<PlatformMonitor>,
|
||||
|
||||
pub(crate) viewports: ImVector<*mut Viewport>,
|
||||
}
|
||||
|
||||
unsafe impl RawCast<sys::ImGuiPlatformIO> for PlatformIo {}
|
||||
|
||||
#[cfg(feature = "docking")]
|
||||
#[repr(C)]
|
||||
pub struct Viewport {
|
||||
pub(crate) id: crate::Id,
|
||||
pub(crate) flags: ViewportFlags,
|
||||
pub(crate) pos: [f32; 2],
|
||||
pub(crate) size: [f32; 2],
|
||||
pub(crate) work_pos: [f32; 2],
|
||||
pub(crate) work_size: [f32; 2],
|
||||
pub(crate) dpi_scale: f32,
|
||||
pub(crate) parent_viewport_id: crate::Id,
|
||||
pub(crate) draw_data: *mut crate::DrawData,
|
||||
|
||||
pub(crate) renderer_user_data: *mut c_void,
|
||||
pub(crate) platform_user_data: *mut c_void,
|
||||
pub(crate) platform_handle: *mut c_void,
|
||||
pub(crate) platform_handle_raw: *mut c_void,
|
||||
pub(crate) platform_request_move: bool,
|
||||
pub(crate) platform_request_resize: bool,
|
||||
pub(crate) platform_request_close: bool,
|
||||
}
|
||||
|
||||
#[cfg(feature = "docking")]
|
||||
#[repr(C)]
|
||||
pub struct PlatformMonitor {
|
||||
main_pos: [f32; 2],
|
||||
main_size: [f32; 2],
|
||||
work_pos: [f32; 2],
|
||||
work_size: [f32; 2],
|
||||
dpi_scale: f32,
|
||||
}
|
||||
|
||||
/// Settings and inputs/outputs for imgui-rs
|
||||
#[repr(C)]
|
||||
pub struct Io {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user