Added basic Viewport structs and flags

This commit is contained in:
Robin Quint 2022-02-22 16:07:58 +01:00
parent 24ad9d526c
commit 4b307a1bf7
4 changed files with 112 additions and 3 deletions

View File

@ -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" }

View File

@ -0,0 +1,4 @@
fn main() {
}

View File

@ -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 {

View File

@ -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 {