diff options
| author | Krzysztof Kosi??ski <tweenk.pl@gmail.com> | 2010-01-14 17:48:15 +0000 |
|---|---|---|
| committer | Krzysztof KosiĆski <tweenk.pl@gmail.com> | 2010-01-14 17:48:15 +0000 |
| commit | f8205f99eda0159cbe5c1b1dafe58b7a08d8988b (patch) | |
| tree | 0e86b6cbf5db3f4d15c7d6ce6d85af469f1810e4 /src/ui/tool/selectable-control-point.cpp | |
| parent | Merge GSoC 2009 node tool rewrite (diff) | |
| parent | * Add "show transform handles" toggle button. (diff) | |
| download | inkscape-f8205f99eda0159cbe5c1b1dafe58b7a08d8988b.tar.gz inkscape-f8205f99eda0159cbe5c1b1dafe58b7a08d8988b.zip | |
Better node transform handles behavior
(bzr r8977)
Diffstat (limited to 'src/ui/tool/selectable-control-point.cpp')
| -rw-r--r-- | src/ui/tool/selectable-control-point.cpp | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/src/ui/tool/selectable-control-point.cpp b/src/ui/tool/selectable-control-point.cpp index 5b9aa4fc8..df2410dc2 100644 --- a/src/ui/tool/selectable-control-point.cpp +++ b/src/ui/tool/selectable-control-point.cpp @@ -56,26 +56,39 @@ SelectableControlPoint::~SelectableControlPoint() void SelectableControlPoint::_connectHandlers() { _selection.allPoints().insert(this); - signal_clicked.connect( - sigc::mem_fun(*this, &SelectableControlPoint::_clickedHandler)); signal_grabbed.connect( sigc::bind_return( - sigc::mem_fun(*this, &SelectableControlPoint::_grabbedHandler), + sigc::hide( + sigc::mem_fun(*this, &SelectableControlPoint::_grabbedHandler)), false)); + signal_dragged.connect( + sigc::mem_fun(*this, &SelectableControlPoint::_draggedHandler)); + signal_ungrabbed.connect( + sigc::hide( + sigc::mem_fun(*this, &SelectableControlPoint::_ungrabbedHandler))); + signal_clicked.connect( + sigc::mem_fun(*this, &SelectableControlPoint::_clickedHandler)); } -void SelectableControlPoint::_grabbedHandler(GdkEventMotion *event) +void SelectableControlPoint::_grabbedHandler() { // if a point is dragged while not selected, it should select itself if (!selected()) { _takeSelection(); - // HACK!!! invoke the last slot for signal_grabbed (it will be the callback registered - // by ControlPointSelection when adding to selection). - signal_grabbed.slots().back()(event); + _selection._pointGrabbed(); } } +void SelectableControlPoint::_draggedHandler(Geom::Point const &old_pos, Geom::Point &new_pos, GdkEventMotion *event) +{ + _selection._pointDragged(old_pos, new_pos, event); +} +void SelectableControlPoint::_ungrabbedHandler() +{ + _selection._pointUngrabbed(); +} bool SelectableControlPoint::_clickedHandler(GdkEventButton *event) { + if (selected() && _selection._pointClicked(this, event)) return true; if (event->button != 1) return false; if (held_shift(*event)) { if (selected()) { |
