LibGUI: Show pressed state for Space and Return key events

Also allows the user to press Esc while the button is being pressed
to cancel the button action.
This commit is contained in:
Matthew Jones 2021-06-02 15:59:08 -06:00 committed by Linus Groh
commit af72b5ec82
Notes: sideshowbarker 2024-07-18 16:59:00 +09:00
2 changed files with 18 additions and 1 deletions

View file

@ -146,13 +146,29 @@ void AbstractButton::leave_event(Core::Event&)
void AbstractButton::keydown_event(KeyEvent& event)
{
if (event.key() == KeyCode::Key_Return || event.key() == KeyCode::Key_Space) {
click(event.modifiers());
m_being_pressed = true;
update();
event.accept();
return;
} else if (m_being_pressed && event.key() == KeyCode::Key_Escape) {
m_being_pressed = false;
update();
event.accept();
return;
}
Widget::keydown_event(event);
}
void AbstractButton::keyup_event(KeyEvent& event)
{
if (m_being_pressed && (event.key() == KeyCode::Key_Return || event.key() == KeyCode::Key_Space)) {
click(event.modifiers());
event.accept();
return;
}
Widget::keyup_event(event);
}
void AbstractButton::paint_text(Painter& painter, const Gfx::IntRect& rect, const Gfx::Font& font, Gfx::TextAlignment text_alignment)
{
auto clipped_rect = rect.intersected(this->rect());