imgui-rs/src/child_frame.rs
Joonas Javanainen eca0ad9ec0
Hide all builder "new" functions
These are very unsafe when used outside the Ui::* functions.
2017-07-12 23:39:09 +03:00

122 lines
3.7 KiB
Rust

use imgui_sys;
use ImStr;
use ImVec2;
use ImGuiWindowFlags;
use super::{ImGuiWindowFlags_NoMove, ImGuiWindowFlags_NoScrollbar, ImGuiWindowFlags_NoScrollWithMouse,
ImGuiWindowFlags_NoCollapse, ImGuiWindowFlags_AlwaysAutoResize,
ImGuiWindowFlags_ShowBorders, ImGuiWindowFlags_NoInputs, ImGuiWindowFlags_MenuBar,
ImGuiWindowFlags_HorizontalScrollbar, ImGuiWindowFlags_NoFocusOnAppearing,
ImGuiWindowFlags_NoBringToFrontOnFocus, ImGuiWindowFlags_AlwaysVerticalScrollbar,
ImGuiWindowFlags_AlwaysHorizontalScrollbar, ImGuiWindowFlags_AlwaysUseWindowPadding};
#[must_use]
pub struct ChildFrame<'p> {
name: &'p ImStr,
size: ImVec2,
flags: ImGuiWindowFlags,
}
impl<'p> ChildFrame<'p> {
pub(crate) fn new<S: Into<ImVec2>>(name: &'p ImStr, size: S) -> ChildFrame<'p> {
ChildFrame {
name,
size: size.into(),
flags: ImGuiWindowFlags::empty(),
}
}
#[inline]
pub fn movable(mut self, value: bool) -> Self {
self.flags.set(ImGuiWindowFlags_NoMove, !value);
self
}
#[inline]
pub fn show_scrollbar(mut self, value: bool) -> Self {
self.flags.set(ImGuiWindowFlags_NoScrollbar, !value);
self
}
#[inline]
pub fn show_scrollbar_with_mouse(mut self, value: bool) -> Self {
self.flags.set(ImGuiWindowFlags_NoScrollWithMouse, !value);
self
}
#[inline]
pub fn collapsible(mut self, value: bool) -> Self {
self.flags.set(ImGuiWindowFlags_NoCollapse, !value);
self
}
#[inline]
pub fn always_resizable(mut self, value: bool) -> Self {
self.flags.set(ImGuiWindowFlags_AlwaysAutoResize, value);
self
}
#[inline]
pub fn show_borders(mut self, value: bool) -> Self {
self.flags.set(ImGuiWindowFlags_ShowBorders, value);
self
}
#[inline]
pub fn input_allow(mut self, value: bool) -> Self {
self.flags.set(ImGuiWindowFlags_NoInputs, !value);
self
}
#[inline]
pub fn show_menu(mut self, value: bool) -> Self {
self.flags.set(ImGuiWindowFlags_MenuBar, value);
self
}
#[inline]
pub fn scrollbar_horizontal(mut self, value: bool) -> Self {
self.flags.set(ImGuiWindowFlags_HorizontalScrollbar, value);
self
}
#[inline]
pub fn focus_on_appearing(mut self, value: bool) -> Self {
self.flags.set(ImGuiWindowFlags_NoFocusOnAppearing, !value);
self
}
#[inline]
pub fn bring_to_front_on_focus(mut self, value: bool) -> Self {
self.flags.set(
ImGuiWindowFlags_NoBringToFrontOnFocus,
!value,
);
self
}
#[inline]
pub fn always_show_vertical_scroll_bar(mut self, value: bool) -> Self {
self.flags.set(
ImGuiWindowFlags_AlwaysVerticalScrollbar,
value,
);
self
}
#[inline]
pub fn always_show_horizontal_scroll_bar(mut self, value: bool) -> Self {
self.flags.set(
ImGuiWindowFlags_AlwaysHorizontalScrollbar,
value,
);
self
}
#[inline]
pub fn always_use_window_padding(mut self, value: bool) -> Self {
self.flags.set(
ImGuiWindowFlags_AlwaysUseWindowPadding,
value,
);
self
}
pub fn build<F: FnOnce()>(self, f: F) {
// See issue for history.
// https://github.com/Gekkio/imgui-rs/pull/58
let show_border = false;
let render_child_frame = unsafe { imgui_sys::igBeginChild(self.name.as_ptr(), self.size, show_border, self.flags) };
if render_child_frame {
f();
}
unsafe { imgui_sys::igEndChild() };
}
}