mirror of
https://github.com/eliasstepanik/imgui-rs.git
synced 2026-01-12 22:18:36 +00:00
Pull misc widgets from 0.1-dev
This commit is contained in:
parent
597f51410b
commit
3dbfcbd85d
63
src/lib.rs
63
src/lib.rs
@ -369,29 +369,6 @@ impl<'ui> Ui<'ui> {
|
||||
}
|
||||
}
|
||||
|
||||
// Widgets
|
||||
impl<'ui> Ui<'ui> {
|
||||
pub fn bullet(&self) {
|
||||
unsafe {
|
||||
sys::igBullet();
|
||||
}
|
||||
}
|
||||
pub fn button(&self, label: &ImStr, size: [f32; 2]) -> bool {
|
||||
unsafe { sys::igButton(label.as_ptr(), size.into()) }
|
||||
}
|
||||
pub fn small_button<'p>(&self, label: &'p ImStr) -> bool {
|
||||
unsafe { sys::igSmallButton(label.as_ptr()) }
|
||||
}
|
||||
/// Make a invisible event. Can be used to conveniently catch events when
|
||||
/// mouse hovers or click the area covered by this invisible button.
|
||||
pub fn invisible_button(&self, label: &ImStr, size: [f32; 2]) -> bool {
|
||||
unsafe { sys::igInvisibleButton(label.as_ptr(), size.into()) }
|
||||
}
|
||||
pub fn checkbox<'p>(&self, label: &'p ImStr, value: &'p mut bool) -> bool {
|
||||
unsafe { sys::igCheckbox(label.as_ptr(), value) }
|
||||
}
|
||||
}
|
||||
|
||||
// Widgets: Input
|
||||
impl<'ui> Ui<'ui> {
|
||||
pub fn input_text<'p>(&self, label: &'p ImStr, buf: &'p mut ImString) -> InputText<'ui, 'p> {
|
||||
@ -801,46 +778,6 @@ impl<'ui> Ui<'ui> {
|
||||
}
|
||||
}
|
||||
|
||||
// Widgets: Radio
|
||||
impl<'ui> Ui<'ui> {
|
||||
/// Creates a radio button for selecting an integer value.
|
||||
/// Returns true if pressed.
|
||||
///
|
||||
/// # Example
|
||||
/// ```rust,no_run
|
||||
/// # use imgui::*;
|
||||
/// # let mut imgui = Context::create();
|
||||
/// # let ui = imgui.frame();
|
||||
/// # let mut selected_radio_value = 2;
|
||||
/// ui.radio_button(im_str!("Item 1"), &mut selected_radio_value, 1);
|
||||
/// ui.radio_button(im_str!("Item 2"), &mut selected_radio_value, 2);
|
||||
/// ui.radio_button(im_str!("Item 3"), &mut selected_radio_value, 3);
|
||||
/// ```
|
||||
pub fn radio_button<'p>(&self, label: &'p ImStr, value: &'p mut i32, wanted: i32) -> bool {
|
||||
unsafe { sys::igRadioButtonIntPtr(label.as_ptr(), value, wanted) }
|
||||
}
|
||||
|
||||
/// Creates a radio button that shows as selected if the given value is true.
|
||||
/// Returns true if pressed.
|
||||
///
|
||||
/// # Example
|
||||
/// ```rust,no_run
|
||||
/// # use imgui::*;
|
||||
/// # let mut imgui = Context::create();
|
||||
/// # let ui = imgui.frame();
|
||||
/// # let mut radio_button_test = "cats".to_string();
|
||||
/// if ui.radio_button_bool(im_str!("Cats"), radio_button_test == "cats") {
|
||||
/// radio_button_test = "cats".to_string();
|
||||
/// }
|
||||
/// if ui.radio_button_bool(im_str!("Dogs"), radio_button_test == "dogs") {
|
||||
/// radio_button_test = "dogs".to_string();
|
||||
/// }
|
||||
/// ```
|
||||
pub fn radio_button_bool<'p>(&self, label: &'p ImStr, value: bool) -> bool {
|
||||
unsafe { sys::igRadioButtonBool(label.as_ptr(), value) }
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ui> Ui<'ui> {
|
||||
pub fn plot_lines<'p>(&self, label: &'p ImStr, values: &'p [f32]) -> PlotLines<'ui, 'p> {
|
||||
PlotLines::new(self, label, values)
|
||||
|
||||
80
src/widget/misc.rs
Normal file
80
src/widget/misc.rs
Normal file
@ -0,0 +1,80 @@
|
||||
use std::ops::{BitAnd, BitAndAssign, BitOrAssign, Not};
|
||||
|
||||
use crate::string::ImStr;
|
||||
use crate::sys;
|
||||
use crate::{Direction, Ui};
|
||||
|
||||
/// # Widgets: Miscellaneous
|
||||
impl<'ui> Ui<'ui> {
|
||||
/// Renders a clickable button.
|
||||
///
|
||||
/// Returns true if this button was clicked.
|
||||
pub fn button(&self, label: &ImStr, size: [f32; 2]) -> bool {
|
||||
unsafe { sys::igButton(label.as_ptr(), size.into()) }
|
||||
}
|
||||
/// Renders a small clickable button that is easy to embed in text.
|
||||
///
|
||||
/// Returns true if this button was clicked.
|
||||
pub fn small_button(&self, label: &ImStr) -> bool {
|
||||
unsafe { sys::igSmallButton(label.as_ptr()) }
|
||||
}
|
||||
/// Renders a button behaviour without the visual look.
|
||||
///
|
||||
/// Returns true if this button was clicked.
|
||||
pub fn invisible_button(&self, id: &ImStr, size: [f32; 2]) -> bool {
|
||||
unsafe { sys::igInvisibleButton(id.as_ptr(), size.into()) }
|
||||
}
|
||||
/// Renders a square button with an arrow shape.
|
||||
///
|
||||
/// Returns true if this button was clicked.
|
||||
pub fn arrow_button(&self, id: &ImStr, direction: Direction) -> bool {
|
||||
unsafe { sys::igArrowButton(id.as_ptr(), direction as i32) }
|
||||
}
|
||||
/// Renders a simple checkbox.
|
||||
///
|
||||
/// Returns true if this checkbox was clicked.
|
||||
pub fn checkbox(&self, label: &ImStr, value: &mut bool) -> bool {
|
||||
unsafe { sys::igCheckbox(label.as_ptr(), value as *mut bool) }
|
||||
}
|
||||
/// Renders a checkbox suitable for toggling bit flags using a mask.
|
||||
///
|
||||
/// Returns true if this checkbox was clicked.
|
||||
pub fn checkbox_flags<T>(&self, label: &ImStr, flags: &mut T, mask: T) -> bool
|
||||
where
|
||||
T: Copy + PartialEq + BitOrAssign + BitAndAssign + BitAnd<Output = T> + Not<Output = T>,
|
||||
{
|
||||
let mut value = *flags & mask == mask;
|
||||
let pressed = self.checkbox(label, &mut value);
|
||||
if pressed {
|
||||
if value {
|
||||
*flags |= mask;
|
||||
} else {
|
||||
*flags &= !mask;
|
||||
}
|
||||
}
|
||||
pressed
|
||||
}
|
||||
/// Renders a simple radio button.
|
||||
///
|
||||
/// Returns true if this radio button was clicked.
|
||||
pub fn radio_button_bool(&self, label: &ImStr, active: bool) -> bool {
|
||||
unsafe { sys::igRadioButtonBool(label.as_ptr(), active) }
|
||||
}
|
||||
/// Renders a radio button suitable for choosing an arbitrary value.
|
||||
///
|
||||
/// Returns true if this radio button was clicked.
|
||||
pub fn radio_button<T>(&self, label: &ImStr, value: &mut T, button_value: T) -> bool
|
||||
where
|
||||
T: Copy + PartialEq,
|
||||
{
|
||||
let pressed = self.radio_button_bool(label, *value == button_value);
|
||||
if pressed {
|
||||
*value = button_value;
|
||||
}
|
||||
pressed
|
||||
}
|
||||
/// Renders a small circle and keeps the cursor on the same line
|
||||
pub fn bullet(&self) {
|
||||
unsafe { sys::igBullet() };
|
||||
}
|
||||
}
|
||||
@ -1 +1,2 @@
|
||||
pub mod misc;
|
||||
pub mod text;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user