mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-26 09:30:24 +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
Notes:
sideshowbarker
2024-07-19 11:16:36 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/c8637e0206f
7 changed files with 47 additions and 0 deletions
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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";
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue