summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 3220828)
raw | patch | inline | side by side (parent: 3220828)
author | Krzysztof Kosiński <tweenk.pl@gmail.com> | |
Tue, 12 Oct 2010 16:22:08 +0000 (18:22 +0200) | ||
committer | Krzysztof Kosiński <tweenk.pl@gmail.com> | |
Tue, 12 Oct 2010 16:22:08 +0000 (18:22 +0200) |
src/ui/tool/node.cpp | patch | blob | history | |
src/ui/tool/path-manipulator.cpp | patch | blob | history |
diff --git a/src/ui/tool/node.cpp b/src/ui/tool/node.cpp
index a5952c9fbce9086577e070f366ec85c71c1794fe..7efb6a5dc87f6935b0ccccd2b76c651d45a95614 100644 (file)
--- a/src/ui/tool/node.cpp
+++ b/src/ui/tool/node.cpp
_updateAutoHandles();
break;
case NODE_SMOOTH: {
+ // ignore attempts to make smooth endnodes.
+ if (isEndNode()) return;
// rotate handles to be colinear
// for degenerate nodes set positions like auto handles
bool prev_line = _is_line_segment(_prev(), this);
bool next_line = _is_line_segment(this, _next());
if (_type == NODE_SMOOTH) {
- // for a node that is already smooth and has a degenerate handle,
- // drag out the second handle to 1/3 the length of the linear segment
+ // For a node that is already smooth and has a degenerate handle,
+ // drag out the second handle without changing the direction of the first one.
if (_front.isDegenerate()) {
double dist = Geom::distance(_next()->position(), position());
_front.setRelativePos(Geom::unit_vector(-_back.relativePos()) * dist / 3);
index 81fc336ceb721d40599e2f26c3e1bc98d1620056..41be81d4f38da06bfce547c51354f909876de687 100644 (file)
return true;
} else if (held_control(*event)) {
// Ctrl+click: cycle between node types
- if (n->isEndNode()) {
- if (n->type() == NODE_CUSP) {
- n->setType(NODE_SMOOTH);
- } else {
- n->setType(NODE_CUSP);
- }
- } else {
+ if (!n->isEndNode()) {
n->setType(static_cast<NodeType>((n->type() + 1) % NODE_LAST_REAL_TYPE));
+ update();
+ _commit(_("Cycle node type"));
}
- update();
- _commit(_("Cycle node type"));
return true;
}
return false;