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: