From 3ac3038418eb4c4174b2ab22e13c1c126d5095ef Mon Sep 17 00:00:00 2001 From: Patrick Meehan Date: Thu, 23 May 2024 19:07:02 -0700 Subject: [PATCH] DPaint2 style "spread" modifier on shape tools --- data/gui.xml | 1 + data/strings/en.ini | 1 + src/app/tools/tool_loop_modifiers.h | 1 + src/app/ui/editor/editor.cpp | 2 ++ src/app/ui/editor/tool_loop_impl.cpp | 4 ++++ src/app/ui/key.h | 1 + src/app/ui/keyboard_shortcuts.cpp | 2 ++ 7 files changed, 12 insertions(+) diff --git a/data/gui.xml b/data/gui.xml index b4afc7a92..3f6f099c8 100644 --- a/data/gui.xml +++ b/data/gui.xml @@ -671,6 +671,7 @@ + diff --git a/data/strings/en.ini b/data/strings/en.ini index 1ea1b13bc..4fa95c21b 100644 --- a/data/strings/en.ini +++ b/data/strings/en.ini @@ -943,6 +943,7 @@ move_origin = Move Origin square_aspect = Square Aspect draw_from_center = Draw From Center rotate_shape = Rotate Shape +spread = Spread trigger_left_mouse_button = Trigger Left Mouse Button trigger_right_mouse_button = Trigger Right Mouse Button ok = &OK diff --git a/src/app/tools/tool_loop_modifiers.h b/src/app/tools/tool_loop_modifiers.h index 7c355457a..08e6d13b2 100644 --- a/src/app/tools/tool_loop_modifiers.h +++ b/src/app/tools/tool_loop_modifiers.h @@ -22,6 +22,7 @@ namespace tools { kSquareAspect = 0x00000020, kFromCenter = 0x00000040, kRotateShape = 0x00000080, + kSpread = 0x00000100, }; } // namespace tools diff --git a/src/app/ui/editor/editor.cpp b/src/app/ui/editor/editor.cpp index c7882bbd1..87d380eb3 100644 --- a/src/app/ui/editor/editor.cpp +++ b/src/app/ui/editor/editor.cpp @@ -1728,6 +1728,8 @@ void Editor::updateToolLoopModifiersIndicators(const bool firstFromMouseDown) modifiers |= int(tools::ToolLoopModifiers::kFromCenter); if (int(action & KeyAction::RotateShape)) modifiers |= int(tools::ToolLoopModifiers::kRotateShape); + if (int(action & KeyAction::Spread)) + modifiers |= int(tools::ToolLoopModifiers::kSpread); } } diff --git a/src/app/ui/editor/tool_loop_impl.cpp b/src/app/ui/editor/tool_loop_impl.cpp index deec878ee..bc620ba17 100644 --- a/src/app/ui/editor/tool_loop_impl.cpp +++ b/src/app/ui/editor/tool_loop_impl.cpp @@ -381,6 +381,10 @@ public: tools::PointShape* getPointShape() override { return m_pointShape; } tools::Intertwine* getIntertwine() override { return m_intertwine; } tools::TracePolicy getTracePolicy() override { + + int modifiers = int(this->getModifiers ()); + if (modifiers & int(tools::ToolLoopModifiers::kSpread)) return tools::TracePolicy::Accumulate; + if (m_controller->handleTracePolicy()) return m_controller->getTracePolicy(); else diff --git a/src/app/ui/key.h b/src/app/ui/key.h index 814aefe60..cc95a6d38 100644 --- a/src/app/ui/key.h +++ b/src/app/ui/key.h @@ -68,6 +68,7 @@ namespace app { AngleSnapFromLastPoint = 0x00010000, RotateShape = 0x00020000, FineControl = 0x00040000, + Spread = 0x00080000, }; enum class WheelAction { diff --git a/src/app/ui/keyboard_shortcuts.cpp b/src/app/ui/keyboard_shortcuts.cpp index 2991b983b..dee113e4a 100644 --- a/src/app/ui/keyboard_shortcuts.cpp +++ b/src/app/ui/keyboard_shortcuts.cpp @@ -75,6 +75,7 @@ namespace { { "SquareAspect" , I18N_KEY(square_aspect) , app::KeyAction::SquareAspect, app::KeyContext::ShapeTool }, { "DrawFromCenter" , I18N_KEY(draw_from_center) , app::KeyAction::DrawFromCenter, app::KeyContext::ShapeTool }, { "RotateShape" , I18N_KEY(rotate_shape) , app::KeyAction::RotateShape, app::KeyContext::ShapeTool }, + { "Spread" , I18N_KEY(spread) , app::KeyAction::Spread, app::KeyContext::ShapeTool }, { "LeftMouseButton" , I18N_KEY(trigger_left_mouse_button) , app::KeyAction::LeftMouseButton, app::KeyContext::Any }, { "RightMouseButton" , I18N_KEY(trigger_right_mouse_button) , app::KeyAction::RightMouseButton, app::KeyContext::Any } }; @@ -356,6 +357,7 @@ Key::Key(const KeyAction action, case KeyAction::SquareAspect: case KeyAction::DrawFromCenter: case KeyAction::RotateShape: + case KeyAction::Spread: m_keycontext = KeyContext::ShapeTool; break; case KeyAction::LeftMouseButton: