mirror of
https://github.com/eliasstepanik/imgui-rs.git
synced 2026-01-19 01:18:27 +00:00
68 lines
1.8 KiB
Rust
68 lines
1.8 KiB
Rust
use std::ptr;
|
|
|
|
use crate::string::ImStr;
|
|
use crate::sys;
|
|
use crate::Ui;
|
|
|
|
/// Builder for a progress bar widget.
|
|
///
|
|
/// # Examples
|
|
///
|
|
/// ```no_run
|
|
/// # use imgui::*;
|
|
/// # let mut imgui = Context::create();
|
|
/// # let ui = imgui.frame();
|
|
/// ProgressBar::new(0.6)
|
|
/// .size([100.0, 12.0])
|
|
/// .overlay_text(im_str!("Progress!"))
|
|
/// .build(&ui);
|
|
/// ```
|
|
#[derive(Debug, Clone)]
|
|
#[must_use]
|
|
pub struct ProgressBar<'a> {
|
|
fraction: f32,
|
|
size: [f32; 2],
|
|
overlay_text: Option<&'a ImStr>,
|
|
}
|
|
|
|
impl<'a> ProgressBar<'a> {
|
|
/// Creates a progress bar with a given fraction showing
|
|
/// the progress (0.0 = 0%, 1.0 = 100%).
|
|
///
|
|
/// The progress bar will be automatically sized to fill the entire width of the window if no
|
|
/// custom size is specified.
|
|
pub fn new(fraction: f32) -> ProgressBar<'a> {
|
|
ProgressBar {
|
|
fraction,
|
|
size: [-1.0, 0.0],
|
|
overlay_text: None,
|
|
}
|
|
}
|
|
/// Sets an optional text that will be drawn over the progress bar.
|
|
#[inline]
|
|
pub fn overlay_text(mut self, overlay_text: &'a ImStr) -> ProgressBar {
|
|
self.overlay_text = Some(overlay_text);
|
|
self
|
|
}
|
|
|
|
/// Sets the size of the progress bar.
|
|
///
|
|
/// Negative values will automatically align to the end of the axis, zero will let the progress
|
|
/// bar choose a size, and positive values will use the given size.
|
|
#[inline]
|
|
pub fn size(mut self, size: [f32; 2]) -> Self {
|
|
self.size = size.into();
|
|
self
|
|
}
|
|
/// Builds the progress bar.
|
|
pub fn build(self, _: &Ui) {
|
|
unsafe {
|
|
sys::igProgressBar(
|
|
self.fraction,
|
|
self.size.into(),
|
|
self.overlay_text.map(|x| x.as_ptr()).unwrap_or(ptr::null()),
|
|
);
|
|
}
|
|
}
|
|
}
|