HackStudio: Allow moving the selected widgets using the arrow keys

This is a nice complement to moving widgets with the mouse. :^)
This commit is contained in:
Andreas Kling 2019-11-10 22:40:58 +01:00
parent 567769eb2f
commit c8637e0206
Notes: sideshowbarker 2024-07-19 11:16:36 +09:00
7 changed files with 47 additions and 0 deletions

View file

@ -81,3 +81,32 @@ void CursorTool::on_mousemove(GMouseEvent& event)
return;
}
}
void CursorTool::on_keydown(GKeyEvent& event)
{
dbg() << "CursorTool::on_keydown";
auto move_selected_widgets_by = [this](int x, int y) {
m_editor.selection().for_each([&](auto& widget) {
widget.move_by(x, y);
return IterationDecision::Continue;
});
};
if (event.modifiers() == 0) {
switch (event.key()) {
case Key_Down:
move_selected_widgets_by(0, m_editor.form_widget().grid_size());
break;
case Key_Up:
move_selected_widgets_by(0, -m_editor.form_widget().grid_size());
break;
case Key_Left:
move_selected_widgets_by(-m_editor.form_widget().grid_size(), 0);
break;
case Key_Right:
move_selected_widgets_by(m_editor.form_widget().grid_size(), 0);
break;
}
}
}

View file

@ -19,6 +19,7 @@ private:
virtual void on_mousedown(GMouseEvent&) override;
virtual void on_mouseup(GMouseEvent&) override;
virtual void on_mousemove(GMouseEvent&) override;
virtual void on_keydown(GKeyEvent&) override;
Point m_drag_origin;
HashMap<GWidget*, Point> m_positions_before_drag;

View file

@ -68,3 +68,8 @@ void FormWidget::mousemove_event(GMouseEvent& event)
{
editor().tool().on_mousemove(event);
}
void FormWidget::keydown_event(GKeyEvent& event)
{
editor().tool().on_keydown(event);
}

View file

@ -16,11 +16,14 @@ public:
int grid_size() const { return m_grid_size; }
private:
virtual bool accepts_focus() const override { return true; }
virtual void paint_event(GPaintEvent&) override;
virtual void second_paint_event(GPaintEvent&) override;
virtual void mousedown_event(GMouseEvent&) override;
virtual void mouseup_event(GMouseEvent&) override;
virtual void mousemove_event(GMouseEvent&) override;
virtual void keydown_event(GKeyEvent&) override;
explicit FormWidget(FormEditorWidget& parent);

View file

@ -3,6 +3,7 @@
#include <AK/Noncopyable.h>
class FormEditorWidget;
class GKeyEvent;
class GMouseEvent;
class Tool {
@ -14,6 +15,7 @@ public:
virtual void on_mousedown(GMouseEvent&) = 0;
virtual void on_mouseup(GMouseEvent&) = 0;
virtual void on_mousemove(GMouseEvent&) = 0;
virtual void on_keydown(GKeyEvent&) = 0;
virtual const char* class_name() const = 0;

View file

@ -18,3 +18,9 @@ void WidgetTool::on_mousemove(GMouseEvent& event)
(void)event;
dbg() << "WidgetTool::on_mousemove";
}
void WidgetTool::on_keydown(GKeyEvent& event)
{
(void)event;
dbg() << "WidgetTool::on_keydown";
}

View file

@ -18,6 +18,7 @@ private:
virtual void on_mousedown(GMouseEvent&) override;
virtual void on_mouseup(GMouseEvent&) override;
virtual void on_mousemove(GMouseEvent&) override;
virtual void on_keydown(GKeyEvent&) override;
const GWidgetClassRegistration& m_meta_class;
};