From 7ce8847f2410a24a6bce4ca8a43ad7ebdb4839eb Mon Sep 17 00:00:00 2001 From: Krzysztof Kosi??ski Date: Thu, 4 Feb 2010 03:14:09 +0100 Subject: Reduce libsigc++ usage to partially fix performance regressions in the new node tool. (bzr r9044) --- src/ui/tool/selectable-control-point.cpp | 35 +++++++++++++++++--------------- 1 file changed, 19 insertions(+), 16 deletions(-) (limited to 'src/ui/tool/selectable-control-point.cpp') diff --git a/src/ui/tool/selectable-control-point.cpp b/src/ui/tool/selectable-control-point.cpp index 9039bd533..1835f0008 100644 --- a/src/ui/tool/selectable-control-point.cpp +++ b/src/ui/tool/selectable-control-point.cpp @@ -34,7 +34,7 @@ SelectableControlPoint::SelectableControlPoint(SPDesktop *d, Geom::Point const & : reinterpret_cast(&default_scp_color_set), group) , _selection (sel) { - _connectHandlers(); + _selection.allPoints().insert(this); } SelectableControlPoint::SelectableControlPoint(SPDesktop *d, Geom::Point const &initial_pos, Gtk::AnchorType anchor, Glib::RefPtr pixbuf, @@ -44,7 +44,7 @@ SelectableControlPoint::SelectableControlPoint(SPDesktop *d, Geom::Point const & : reinterpret_cast(&default_scp_color_set), group) , _selection (sel) { - _connectHandlers(); + _selection.allPoints().insert(this); } SelectableControlPoint::~SelectableControlPoint() @@ -53,28 +53,31 @@ SelectableControlPoint::~SelectableControlPoint() _selection.allPoints().erase(this); } -void SelectableControlPoint::_connectHandlers() -{ - _selection.allPoints().insert(this); - signal_grabbed.connect( - sigc::bind_return( - sigc::hide( - sigc::mem_fun(*this, &SelectableControlPoint::_grabbedHandler)), - false)); - signal_clicked.connect( - sigc::mem_fun(*this, &SelectableControlPoint::_clickedHandler)); -} - -void SelectableControlPoint::_grabbedHandler() +bool SelectableControlPoint::grabbed(GdkEventMotion *) { // if a point is dragged while not selected, it should select itself if (!selected()) { _takeSelection(); } + _selection._pointGrabbed(); + return false; } -bool SelectableControlPoint::_clickedHandler(GdkEventButton *event) +void SelectableControlPoint::dragged(Geom::Point &new_pos, GdkEventMotion *event) { + _selection._pointDragged(position(), new_pos, event); +} + +void SelectableControlPoint::ungrabbed(GdkEventButton *) +{ + _selection._pointUngrabbed(); +} + +bool SelectableControlPoint::clicked(GdkEventButton *event) +{ + if (_selection._pointClicked(this, event)) + return true; + if (event->button != 1) return false; if (held_shift(*event)) { if (selected()) { -- cgit v1.2.3