diff --git a/Userland/Applications/PixelPaint/ImageEditor.cpp b/Userland/Applications/PixelPaint/ImageEditor.cpp index 6862492e66..240e8efadd 100644 --- a/Userland/Applications/PixelPaint/ImageEditor.cpp +++ b/Userland/Applications/PixelPaint/ImageEditor.cpp @@ -420,8 +420,10 @@ void ImageEditor::keydown_event(GUI::KeyEvent& event) return; } - if (m_active_tool) - m_active_tool->on_keydown(event); + if (m_active_tool && m_active_tool->on_keydown(event)) + return; + + event.ignore(); } void ImageEditor::keyup_event(GUI::KeyEvent& event) diff --git a/Userland/Applications/PixelPaint/Tools/CloneTool.cpp b/Userland/Applications/PixelPaint/Tools/CloneTool.cpp index 0ed7f141dd..56805197b1 100644 --- a/Userland/Applications/PixelPaint/Tools/CloneTool.cpp +++ b/Userland/Applications/PixelPaint/Tools/CloneTool.cpp @@ -114,14 +114,14 @@ void CloneTool::on_second_paint(Layer const*, GUI::PaintEvent& event) painter.draw_ellipse_intersecting(rect, m_marker_color, 1); } -void CloneTool::on_keydown(GUI::KeyEvent& event) +bool CloneTool::on_keydown(GUI::KeyEvent const& event) { - Tool::on_keydown(event); if (event.key() == KeyCode::Key_Alt && !m_is_selecting_location) { m_is_selecting_location = true; m_editor->update_tool_cursor(); - return; + return true; } + return Tool::on_keydown(event); } void CloneTool::on_keyup(GUI::KeyEvent& event) diff --git a/Userland/Applications/PixelPaint/Tools/CloneTool.h b/Userland/Applications/PixelPaint/Tools/CloneTool.h index f380564cfb..0aa3ada005 100644 --- a/Userland/Applications/PixelPaint/Tools/CloneTool.h +++ b/Userland/Applications/PixelPaint/Tools/CloneTool.h @@ -27,7 +27,7 @@ protected: virtual void on_mousedown(Layer*, MouseEvent&) override; virtual void on_mousemove(Layer*, MouseEvent&) override; virtual void on_second_paint(Layer const*, GUI::PaintEvent&) override; - virtual void on_keydown(GUI::KeyEvent&) override; + virtual bool on_keydown(GUI::KeyEvent const&) override; virtual void on_keyup(GUI::KeyEvent&) override; private: diff --git a/Userland/Applications/PixelPaint/Tools/EllipseTool.cpp b/Userland/Applications/PixelPaint/Tools/EllipseTool.cpp index aa3b676843..f704028f09 100644 --- a/Userland/Applications/PixelPaint/Tools/EllipseTool.cpp +++ b/Userland/Applications/PixelPaint/Tools/EllipseTool.cpp @@ -123,14 +123,14 @@ void EllipseTool::on_second_paint(Layer const* layer, GUI::PaintEvent& event) draw_using(painter, preview_start, preview_end, AK::max(m_thickness * m_editor->scale(), 1)); } -void EllipseTool::on_keydown(GUI::KeyEvent& event) +bool EllipseTool::on_keydown(GUI::KeyEvent const& event) { - Tool::on_keydown(event); if (event.key() == Key_Escape && m_drawing_button != GUI::MouseButton::None) { m_drawing_button = GUI::MouseButton::None; m_editor->update(); - event.accept(); + return true; } + return Tool::on_keydown(event); } GUI::Widget* EllipseTool::get_properties_widget() diff --git a/Userland/Applications/PixelPaint/Tools/EllipseTool.h b/Userland/Applications/PixelPaint/Tools/EllipseTool.h index b937f6a1a6..671c3ac660 100644 --- a/Userland/Applications/PixelPaint/Tools/EllipseTool.h +++ b/Userland/Applications/PixelPaint/Tools/EllipseTool.h @@ -24,7 +24,7 @@ public: virtual void on_mousemove(Layer*, MouseEvent&) override; virtual void on_mouseup(Layer*, MouseEvent&) override; virtual void on_second_paint(Layer const*, GUI::PaintEvent&) override; - virtual void on_keydown(GUI::KeyEvent&) override; + virtual bool on_keydown(GUI::KeyEvent const&) override; virtual GUI::Widget* get_properties_widget() override; virtual Variant> cursor() override { return Gfx::StandardCursor::Crosshair; } diff --git a/Userland/Applications/PixelPaint/Tools/LineTool.cpp b/Userland/Applications/PixelPaint/Tools/LineTool.cpp index 5aebf8b885..be1e50436a 100644 --- a/Userland/Applications/PixelPaint/Tools/LineTool.cpp +++ b/Userland/Applications/PixelPaint/Tools/LineTool.cpp @@ -124,14 +124,14 @@ void LineTool::on_second_paint(Layer const* layer, GUI::PaintEvent& event) draw_using(painter, preview_start, preview_end, m_editor->color_for(m_drawing_button), AK::max(m_thickness * m_editor->scale(), 1)); } -void LineTool::on_keydown(GUI::KeyEvent& event) +bool LineTool::on_keydown(GUI::KeyEvent const& event) { - Tool::on_keydown(event); if (event.key() == Key_Escape && m_drawing_button != GUI::MouseButton::None) { m_drawing_button = GUI::MouseButton::None; m_editor->update(); - event.accept(); + return true; } + return Tool::on_keydown(event); } GUI::Widget* LineTool::get_properties_widget() diff --git a/Userland/Applications/PixelPaint/Tools/LineTool.h b/Userland/Applications/PixelPaint/Tools/LineTool.h index c423a4a47f..e9af5a87df 100644 --- a/Userland/Applications/PixelPaint/Tools/LineTool.h +++ b/Userland/Applications/PixelPaint/Tools/LineTool.h @@ -22,7 +22,7 @@ public: virtual void on_mousemove(Layer*, MouseEvent&) override; virtual void on_mouseup(Layer*, MouseEvent&) override; virtual void on_second_paint(Layer const*, GUI::PaintEvent&) override; - virtual void on_keydown(GUI::KeyEvent&) override; + virtual bool on_keydown(GUI::KeyEvent const&) override; virtual GUI::Widget* get_properties_widget() override; virtual Variant> cursor() override { return Gfx::StandardCursor::Crosshair; } diff --git a/Userland/Applications/PixelPaint/Tools/MoveTool.cpp b/Userland/Applications/PixelPaint/Tools/MoveTool.cpp index 7fb00a714e..ae88f88842 100644 --- a/Userland/Applications/PixelPaint/Tools/MoveTool.cpp +++ b/Userland/Applications/PixelPaint/Tools/MoveTool.cpp @@ -106,20 +106,20 @@ void MoveTool::on_mouseup(Layer* layer, MouseEvent& event) m_editor->did_complete_action(tool_name()); } -void MoveTool::on_keydown(GUI::KeyEvent& event) +bool MoveTool::on_keydown(GUI::KeyEvent const& event) { if (event.key() == Key_Shift) m_keep_ascept_ratio = true; if (m_scaling) - return; + return true; if (event.modifiers() != 0) - return; + return false; auto* layer = m_editor->active_layer(); if (!layer) - return; + return false; auto new_location = layer->location(); @@ -137,11 +137,12 @@ void MoveTool::on_keydown(GUI::KeyEvent& event) new_location.translate_by(1, 0); break; default: - return; + return false; } layer->set_location(new_location); m_editor->layers_did_change(); + return true; } void MoveTool::on_keyup(GUI::KeyEvent& event) diff --git a/Userland/Applications/PixelPaint/Tools/MoveTool.h b/Userland/Applications/PixelPaint/Tools/MoveTool.h index 16b601397b..0d73ff36c4 100644 --- a/Userland/Applications/PixelPaint/Tools/MoveTool.h +++ b/Userland/Applications/PixelPaint/Tools/MoveTool.h @@ -20,7 +20,7 @@ public: virtual void on_mousedown(Layer*, MouseEvent&) override; virtual void on_mousemove(Layer*, MouseEvent&) override; virtual void on_mouseup(Layer*, MouseEvent&) override; - virtual void on_keydown(GUI::KeyEvent&) override; + virtual bool on_keydown(GUI::KeyEvent const&) override; virtual void on_keyup(GUI::KeyEvent&) override; virtual Variant> cursor() override; diff --git a/Userland/Applications/PixelPaint/Tools/PolygonalSelectTool.cpp b/Userland/Applications/PixelPaint/Tools/PolygonalSelectTool.cpp index 9815f579cb..73efc60730 100644 --- a/Userland/Applications/PixelPaint/Tools/PolygonalSelectTool.cpp +++ b/Userland/Applications/PixelPaint/Tools/PolygonalSelectTool.cpp @@ -150,9 +150,8 @@ void PolygonalSelectTool::on_second_paint(Layer const* layer, GUI::PaintEvent& e painter.draw_line(last_line_start, last_line_stop, Color::Black, AK::max(m_editor->scale(), 1)); } -void PolygonalSelectTool::on_keydown(GUI::KeyEvent& key_event) +bool PolygonalSelectTool::on_keydown(GUI::KeyEvent const& key_event) { - Tool::on_keydown(key_event); if (key_event.key() == KeyCode::Key_Escape) { if (m_selecting) { m_selecting = false; @@ -160,7 +159,9 @@ void PolygonalSelectTool::on_keydown(GUI::KeyEvent& key_event) } else { m_editor->image().selection().clear(); } + return true; } + return Tool::on_keydown(key_event); } GUI::Widget* PolygonalSelectTool::get_properties_widget() diff --git a/Userland/Applications/PixelPaint/Tools/PolygonalSelectTool.h b/Userland/Applications/PixelPaint/Tools/PolygonalSelectTool.h index 1b0f44286d..f5300cdbce 100644 --- a/Userland/Applications/PixelPaint/Tools/PolygonalSelectTool.h +++ b/Userland/Applications/PixelPaint/Tools/PolygonalSelectTool.h @@ -20,7 +20,7 @@ public: virtual void on_doubleclick(Layer*, MouseEvent& event) override; virtual void on_mousedown(Layer*, MouseEvent& event) override; virtual void on_mousemove(Layer*, MouseEvent& event) override; - virtual void on_keydown(GUI::KeyEvent&) override; + virtual bool on_keydown(GUI::KeyEvent const&) override; virtual void on_second_paint(Layer const*, GUI::PaintEvent&) override; virtual GUI::Widget* get_properties_widget() override; virtual Variant> cursor() override { return Gfx::StandardCursor::Crosshair; } diff --git a/Userland/Applications/PixelPaint/Tools/RectangleSelectTool.cpp b/Userland/Applications/PixelPaint/Tools/RectangleSelectTool.cpp index c91898b122..be3184c517 100644 --- a/Userland/Applications/PixelPaint/Tools/RectangleSelectTool.cpp +++ b/Userland/Applications/PixelPaint/Tools/RectangleSelectTool.cpp @@ -103,20 +103,26 @@ void RectangleSelectTool::on_mouseup(Layer*, MouseEvent& event) m_editor->did_complete_action(tool_name()); } -void RectangleSelectTool::on_keydown(GUI::KeyEvent& key_event) +bool RectangleSelectTool::on_keydown(GUI::KeyEvent const& key_event) { - Tool::on_keydown(key_event); - if (key_event.key() == KeyCode::Key_Space) + if (key_event.key() == KeyCode::Key_Space) { m_moving_mode = MovingMode::MovingOrigin; - else if (key_event.key() == KeyCode::Key_Control) + return true; + } + if (key_event.key() == KeyCode::Key_Control) { m_moving_mode = MovingMode::AroundCenter; + return true; + } if (key_event.key() == KeyCode::Key_Escape) { if (m_selecting) m_selecting = false; else m_editor->image().selection().clear(); + return true; } + + return Tool::on_keydown(key_event); } void RectangleSelectTool::on_keyup(GUI::KeyEvent& key_event) diff --git a/Userland/Applications/PixelPaint/Tools/RectangleSelectTool.h b/Userland/Applications/PixelPaint/Tools/RectangleSelectTool.h index 9fa6d9b876..bc7dc30024 100644 --- a/Userland/Applications/PixelPaint/Tools/RectangleSelectTool.h +++ b/Userland/Applications/PixelPaint/Tools/RectangleSelectTool.h @@ -23,7 +23,7 @@ public: virtual void on_mousedown(Layer*, MouseEvent& event) override; virtual void on_mousemove(Layer*, MouseEvent& event) override; virtual void on_mouseup(Layer*, MouseEvent& event) override; - virtual void on_keydown(GUI::KeyEvent&) override; + virtual bool on_keydown(GUI::KeyEvent const&) override; virtual void on_keyup(GUI::KeyEvent&) override; virtual void on_second_paint(Layer const*, GUI::PaintEvent&) override; virtual GUI::Widget* get_properties_widget() override; diff --git a/Userland/Applications/PixelPaint/Tools/RectangleTool.cpp b/Userland/Applications/PixelPaint/Tools/RectangleTool.cpp index fb88922eef..19f354969f 100644 --- a/Userland/Applications/PixelPaint/Tools/RectangleTool.cpp +++ b/Userland/Applications/PixelPaint/Tools/RectangleTool.cpp @@ -130,14 +130,14 @@ void RectangleTool::on_second_paint(Layer const* layer, GUI::PaintEvent& event) draw_using(painter, start_position, end_position, AK::max(m_thickness * m_editor->scale(), 1), m_corner_radius * m_editor->scale()); } -void RectangleTool::on_keydown(GUI::KeyEvent& event) +bool RectangleTool::on_keydown(GUI::KeyEvent const& event) { - Tool::on_keydown(event); if (event.key() == Key_Escape && m_drawing_button != GUI::MouseButton::None) { m_drawing_button = GUI::MouseButton::None; m_editor->update(); - event.accept(); + return true; } + return Tool::on_keydown(event); } GUI::Widget* RectangleTool::get_properties_widget() diff --git a/Userland/Applications/PixelPaint/Tools/RectangleTool.h b/Userland/Applications/PixelPaint/Tools/RectangleTool.h index 52a59c82ab..41a5b1ef2c 100644 --- a/Userland/Applications/PixelPaint/Tools/RectangleTool.h +++ b/Userland/Applications/PixelPaint/Tools/RectangleTool.h @@ -23,7 +23,7 @@ public: virtual void on_mousemove(Layer*, MouseEvent&) override; virtual void on_mouseup(Layer*, MouseEvent&) override; virtual void on_second_paint(Layer const*, GUI::PaintEvent&) override; - virtual void on_keydown(GUI::KeyEvent&) override; + virtual bool on_keydown(GUI::KeyEvent const&) override; virtual GUI::Widget* get_properties_widget() override; virtual Variant> cursor() override { return Gfx::StandardCursor::Crosshair; } diff --git a/Userland/Applications/PixelPaint/Tools/Tool.cpp b/Userland/Applications/PixelPaint/Tools/Tool.cpp index 86ea2160a9..57fc44b6ae 100644 --- a/Userland/Applications/PixelPaint/Tools/Tool.cpp +++ b/Userland/Applications/PixelPaint/Tools/Tool.cpp @@ -23,28 +23,38 @@ void Tool::set_action(GUI::Action* action) m_action = action; } -void Tool::on_keydown(GUI::KeyEvent& event) +bool Tool::on_keydown(GUI::KeyEvent const& event) { switch (event.key()) { case KeyCode::Key_LeftBracket: - if (m_primary_slider) + if (m_primary_slider) { m_primary_slider->decrease_slider_by(1); + return true; + } break; case KeyCode::Key_RightBracket: - if (m_primary_slider) + if (m_primary_slider) { m_primary_slider->increase_slider_by(1); + return true; + } break; case KeyCode::Key_LeftBrace: - if (m_secondary_slider) + if (m_secondary_slider) { m_secondary_slider->decrease_slider_by(1); + return true; + } break; case KeyCode::Key_RightBrace: - if (m_secondary_slider) + if (m_secondary_slider) { m_secondary_slider->increase_slider_by(1); + return true; + } break; default: break; } + + return false; } Gfx::IntPoint Tool::editor_layer_location(Layer const& layer) const diff --git a/Userland/Applications/PixelPaint/Tools/Tool.h b/Userland/Applications/PixelPaint/Tools/Tool.h index f6df95eb20..aeb446b66f 100644 --- a/Userland/Applications/PixelPaint/Tools/Tool.h +++ b/Userland/Applications/PixelPaint/Tools/Tool.h @@ -61,7 +61,7 @@ public: virtual void on_context_menu(Layer*, GUI::ContextMenuEvent&) { } virtual void on_tool_button_contextmenu(GUI::ContextMenuEvent&) { } virtual void on_second_paint(Layer const*, GUI::PaintEvent&) { } - virtual void on_keydown(GUI::KeyEvent&); + virtual bool on_keydown(GUI::KeyEvent const&); virtual void on_keyup(GUI::KeyEvent&) { } virtual void on_tool_activation() { } virtual GUI::Widget* get_properties_widget() { return nullptr; } diff --git a/Userland/Applications/PixelPaint/Tools/WandSelectTool.cpp b/Userland/Applications/PixelPaint/Tools/WandSelectTool.cpp index 873d4cfd51..e94fc8fa58 100644 --- a/Userland/Applications/PixelPaint/Tools/WandSelectTool.cpp +++ b/Userland/Applications/PixelPaint/Tools/WandSelectTool.cpp @@ -37,12 +37,13 @@ static void set_flood_selection(Gfx::Bitmap& bitmap, Image& image, Gfx::IntPoint image.selection().merge(selection_mask, merge_mode); } -void WandSelectTool::on_keydown(GUI::KeyEvent& key_event) +bool WandSelectTool::on_keydown(GUI::KeyEvent const& key_event) { - Tool::on_keydown(key_event); if (key_event.key() == KeyCode::Key_Escape) { m_editor->image().selection().clear(); + return true; } + return Tool::on_keydown(key_event); } void WandSelectTool::on_mousedown(Layer* layer, MouseEvent& event) diff --git a/Userland/Applications/PixelPaint/Tools/WandSelectTool.h b/Userland/Applications/PixelPaint/Tools/WandSelectTool.h index e239bd266a..5b2ab35f49 100644 --- a/Userland/Applications/PixelPaint/Tools/WandSelectTool.h +++ b/Userland/Applications/PixelPaint/Tools/WandSelectTool.h @@ -22,7 +22,7 @@ public: virtual ~WandSelectTool() = default; virtual void on_mousedown(Layer*, MouseEvent& event) override; - virtual void on_keydown(GUI::KeyEvent&) override; + virtual bool on_keydown(GUI::KeyEvent const&) override; virtual GUI::Widget* get_properties_widget() override; virtual Variant> cursor() override { return Gfx::StandardCursor::Crosshair; }