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}