mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 08:48:11 +00:00
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:
parent
567769eb2f
commit
c8637e0206
7 changed files with 47 additions and 0 deletions
|
@ -81,3 +81,32 @@ void CursorTool::on_mousemove(GMouseEvent& event)
|
||||||
return;
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -19,6 +19,7 @@ private:
|
||||||
virtual void on_mousedown(GMouseEvent&) override;
|
virtual void on_mousedown(GMouseEvent&) override;
|
||||||
virtual void on_mouseup(GMouseEvent&) override;
|
virtual void on_mouseup(GMouseEvent&) override;
|
||||||
virtual void on_mousemove(GMouseEvent&) override;
|
virtual void on_mousemove(GMouseEvent&) override;
|
||||||
|
virtual void on_keydown(GKeyEvent&) override;
|
||||||
|
|
||||||
Point m_drag_origin;
|
Point m_drag_origin;
|
||||||
HashMap<GWidget*, Point> m_positions_before_drag;
|
HashMap<GWidget*, Point> m_positions_before_drag;
|
||||||
|
|
|
@ -68,3 +68,8 @@ void FormWidget::mousemove_event(GMouseEvent& event)
|
||||||
{
|
{
|
||||||
editor().tool().on_mousemove(event);
|
editor().tool().on_mousemove(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FormWidget::keydown_event(GKeyEvent& event)
|
||||||
|
{
|
||||||
|
editor().tool().on_keydown(event);
|
||||||
|
}
|
||||||
|
|
|
@ -16,11 +16,14 @@ public:
|
||||||
int grid_size() const { return m_grid_size; }
|
int grid_size() const { return m_grid_size; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
virtual bool accepts_focus() const override { return true; }
|
||||||
|
|
||||||
virtual void paint_event(GPaintEvent&) override;
|
virtual void paint_event(GPaintEvent&) override;
|
||||||
virtual void second_paint_event(GPaintEvent&) override;
|
virtual void second_paint_event(GPaintEvent&) override;
|
||||||
virtual void mousedown_event(GMouseEvent&) override;
|
virtual void mousedown_event(GMouseEvent&) override;
|
||||||
virtual void mouseup_event(GMouseEvent&) override;
|
virtual void mouseup_event(GMouseEvent&) override;
|
||||||
virtual void mousemove_event(GMouseEvent&) override;
|
virtual void mousemove_event(GMouseEvent&) override;
|
||||||
|
virtual void keydown_event(GKeyEvent&) override;
|
||||||
|
|
||||||
explicit FormWidget(FormEditorWidget& parent);
|
explicit FormWidget(FormEditorWidget& parent);
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
#include <AK/Noncopyable.h>
|
#include <AK/Noncopyable.h>
|
||||||
|
|
||||||
class FormEditorWidget;
|
class FormEditorWidget;
|
||||||
|
class GKeyEvent;
|
||||||
class GMouseEvent;
|
class GMouseEvent;
|
||||||
|
|
||||||
class Tool {
|
class Tool {
|
||||||
|
@ -14,6 +15,7 @@ public:
|
||||||
virtual void on_mousedown(GMouseEvent&) = 0;
|
virtual void on_mousedown(GMouseEvent&) = 0;
|
||||||
virtual void on_mouseup(GMouseEvent&) = 0;
|
virtual void on_mouseup(GMouseEvent&) = 0;
|
||||||
virtual void on_mousemove(GMouseEvent&) = 0;
|
virtual void on_mousemove(GMouseEvent&) = 0;
|
||||||
|
virtual void on_keydown(GKeyEvent&) = 0;
|
||||||
|
|
||||||
virtual const char* class_name() const = 0;
|
virtual const char* class_name() const = 0;
|
||||||
|
|
||||||
|
|
|
@ -18,3 +18,9 @@ void WidgetTool::on_mousemove(GMouseEvent& event)
|
||||||
(void)event;
|
(void)event;
|
||||||
dbg() << "WidgetTool::on_mousemove";
|
dbg() << "WidgetTool::on_mousemove";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WidgetTool::on_keydown(GKeyEvent& event)
|
||||||
|
{
|
||||||
|
(void)event;
|
||||||
|
dbg() << "WidgetTool::on_keydown";
|
||||||
|
}
|
||||||
|
|
|
@ -18,6 +18,7 @@ private:
|
||||||
virtual void on_mousedown(GMouseEvent&) override;
|
virtual void on_mousedown(GMouseEvent&) override;
|
||||||
virtual void on_mouseup(GMouseEvent&) override;
|
virtual void on_mouseup(GMouseEvent&) override;
|
||||||
virtual void on_mousemove(GMouseEvent&) override;
|
virtual void on_mousemove(GMouseEvent&) override;
|
||||||
|
virtual void on_keydown(GKeyEvent&) override;
|
||||||
|
|
||||||
const GWidgetClassRegistration& m_meta_class;
|
const GWidgetClassRegistration& m_meta_class;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue