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
parent 6fe7d4d7b8
commit af72b5ec82
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());

View file

@ -46,6 +46,7 @@ protected:
virtual void mousemove_event(MouseEvent&) override;
virtual void mouseup_event(MouseEvent&) override;
virtual void keydown_event(KeyEvent&) override;
virtual void keyup_event(KeyEvent&) override;
virtual void enter_event(Core::Event&) override;
virtual void leave_event(Core::Event&) override;
virtual void change_event(Event&) override;