mirror of
https://github.com/encounter/objdiff.git
synced 2025-06-07 23:23:34 +00:00
e.g. The symbol list was stealing the W/S key presses when typing into the symbol filter text edit. If the user actually wants to use these shortcuts while a widget is focused, they can simply press the escape key to unfocus all widgets and then press the shortcut.
77 lines
2.8 KiB
Rust
77 lines
2.8 KiB
Rust
use egui::{style::ScrollAnimation, vec2, Context, Key, Modifiers, PointerButton};
|
|
|
|
fn any_widget_focused(ctx: &Context) -> bool { ctx.memory(|mem| mem.focused().is_some()) }
|
|
|
|
pub fn enter_pressed(ctx: &Context) -> bool {
|
|
if any_widget_focused(ctx) {
|
|
return false;
|
|
}
|
|
ctx.input_mut(|i| i.key_pressed(Key::Enter) || i.pointer.button_pressed(PointerButton::Extra2))
|
|
}
|
|
|
|
pub fn back_pressed(ctx: &Context) -> bool {
|
|
if any_widget_focused(ctx) {
|
|
return false;
|
|
}
|
|
ctx.input_mut(|i| {
|
|
i.key_pressed(Key::Backspace) || i.pointer.button_pressed(PointerButton::Extra1)
|
|
})
|
|
}
|
|
|
|
pub fn up_pressed(ctx: &Context) -> bool {
|
|
if any_widget_focused(ctx) {
|
|
return false;
|
|
}
|
|
ctx.input_mut(|i| i.key_pressed(Key::ArrowUp) || i.key_pressed(Key::W))
|
|
}
|
|
|
|
pub fn down_pressed(ctx: &Context) -> bool {
|
|
if any_widget_focused(ctx) {
|
|
return false;
|
|
}
|
|
ctx.input_mut(|i| i.key_pressed(Key::ArrowDown) || i.key_pressed(Key::S))
|
|
}
|
|
|
|
pub fn page_up_pressed(ctx: &Context) -> bool { ctx.input_mut(|i| i.key_pressed(Key::PageUp)) }
|
|
|
|
pub fn page_down_pressed(ctx: &Context) -> bool { ctx.input_mut(|i| i.key_pressed(Key::PageDown)) }
|
|
|
|
pub fn home_pressed(ctx: &Context) -> bool { ctx.input_mut(|i| i.key_pressed(Key::Home)) }
|
|
|
|
pub fn end_pressed(ctx: &Context) -> bool { ctx.input_mut(|i| i.key_pressed(Key::End)) }
|
|
|
|
pub fn check_scroll_hotkeys(ui: &mut egui::Ui, include_small_increments: bool) {
|
|
let ui_height = ui.available_rect_before_wrap().height();
|
|
if up_pressed(ui.ctx()) && include_small_increments {
|
|
ui.scroll_with_delta_animation(vec2(0.0, ui_height / 10.0), ScrollAnimation::none());
|
|
} else if down_pressed(ui.ctx()) && include_small_increments {
|
|
ui.scroll_with_delta_animation(vec2(0.0, -ui_height / 10.0), ScrollAnimation::none());
|
|
} else if page_up_pressed(ui.ctx()) {
|
|
ui.scroll_with_delta_animation(vec2(0.0, ui_height), ScrollAnimation::none());
|
|
} else if page_down_pressed(ui.ctx()) {
|
|
ui.scroll_with_delta_animation(vec2(0.0, -ui_height), ScrollAnimation::none());
|
|
} else if home_pressed(ui.ctx()) {
|
|
ui.scroll_with_delta_animation(vec2(0.0, f32::INFINITY), ScrollAnimation::none());
|
|
} else if end_pressed(ui.ctx()) {
|
|
ui.scroll_with_delta_animation(vec2(0.0, -f32::INFINITY), ScrollAnimation::none());
|
|
}
|
|
}
|
|
|
|
pub fn consume_up_key(ctx: &Context) -> bool {
|
|
if any_widget_focused(ctx) {
|
|
return false;
|
|
}
|
|
ctx.input_mut(|i| {
|
|
i.consume_key(Modifiers::NONE, Key::ArrowUp) || i.consume_key(Modifiers::NONE, Key::W)
|
|
})
|
|
}
|
|
|
|
pub fn consume_down_key(ctx: &Context) -> bool {
|
|
if any_widget_focused(ctx) {
|
|
return false;
|
|
}
|
|
ctx.input_mut(|i| {
|
|
i.consume_key(Modifiers::NONE, Key::ArrowDown) || i.consume_key(Modifiers::NONE, Key::S)
|
|
})
|
|
}
|