Skip to main content

dear_imgui_rs/widget/misc/
button_repeat.rs

1use crate::{ItemFlagStackToken, ItemFlags, Ui};
2
3// ============================================================================
4// Button repeat (convenience over item flag)
5// ============================================================================
6
7/// Tracks a button repeat item flag pushed with [`Ui::push_button_repeat`].
8pub type ButtonRepeatToken<'ui> = ItemFlagStackToken<'ui>;
9
10impl Ui {
11    /// Enable/disable repeating behavior for subsequent buttons.
12    ///
13    /// Internally uses `PushItemFlag(ImGuiItemFlags_ButtonRepeat, repeat)`.
14    #[doc(alias = "PushButtonRepeat")]
15    pub fn push_button_repeat(&self, repeat: bool) -> ButtonRepeatToken<'_> {
16        self.push_item_flag(ItemFlags::BUTTON_REPEAT, repeat)
17    }
18
19    /// Push a button repeat item flag, run `f`, then pop the flag.
20    ///
21    /// The flag is popped during unwinding if `f` panics.
22    #[doc(alias = "PushButtonRepeat", alias = "PopButtonRepeat")]
23    pub fn with_button_repeat<R>(&self, repeat: bool, f: impl FnOnce() -> R) -> R {
24        let repeat = self.push_button_repeat(repeat);
25        let result = f();
26        drop(repeat);
27        result
28    }
29}