From f103ddd7b999beca91a5c6c25562c274f1857631 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Krzysztof=20Kosi=C5=84ski?= Date: Sun, 7 Nov 2010 00:09:40 +0100 Subject: [PATCH] Reintroduce Shift+L shortcut and handle retraction when setting the type of already cusp nodes to cusp in the node tool --- src/ui/tool/multi-path-manipulator.cpp | 29 ++++++++++++++++++++++++-- src/ui/tool/node.cpp | 9 +------- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/src/ui/tool/multi-path-manipulator.cpp b/src/ui/tool/multi-path-manipulator.cpp index 6101a3556..a1b398bb1 100644 --- a/src/ui/tool/multi-path-manipulator.cpp +++ b/src/ui/tool/multi-path-manipulator.cpp @@ -220,11 +220,29 @@ void MultiPathManipulator::invertSelectionInSubpaths() void MultiPathManipulator::setNodeType(NodeType type) { if (_selection.empty()) return; + + // When all selected nodes are already cusp, retract their handles + bool retract_handles = (type == NODE_CUSP); + for (ControlPointSelection::iterator i = _selection.begin(); i != _selection.end(); ++i) { Node *node = dynamic_cast(*i); - if (node) node->setType(type); + if (node) { + retract_handles &= (node->type() == NODE_CUSP); + node->setType(type); + } } - _done(_("Change node type")); + + if (retract_handles) { + for (ControlPointSelection::iterator i = _selection.begin(); i != _selection.end(); ++i) { + Node *node = dynamic_cast(*i); + if (node) { + node->front()->retract(); + node->back()->retract(); + } + } + } + + _done(retract_handles ? _("Retract handles") : _("Change node type")); } void MultiPathManipulator::setSegmentType(SegmentType type) @@ -603,6 +621,13 @@ bool MultiPathManipulator::event(GdkEvent *event) return true; } break; + case GDK_l: + case GDK_L: + if (held_only_shift(event->key)) { + // Shift+L - make segments linear + setSegmentType(SEGMENT_LINEAR); + return true; + } default: break; } diff --git a/src/ui/tool/node.cpp b/src/ui/tool/node.cpp index 399fa5292..60b5812c6 100644 --- a/src/ui/tool/node.cpp +++ b/src/ui/tool/node.cpp @@ -568,14 +568,7 @@ void Node::setType(NodeType type, bool update_handles) if (update_handles) { switch (type) { case NODE_CUSP: - // if the existing type is also NODE_CUSP, retract handles - // NOTE: This misfeature is very annoying when you have both cusp and smooth - // nodes in a selection, so I have removed it. Use segment commands - // or Ctrl+click to retract handles. - //if (_type == NODE_CUSP) { - // _front.retract(); - // _back.retract(); - //} + // nothing to do break; case NODE_AUTO: // auto handles make no sense for endnodes -- 2.30.2