index 5b9aa4fc838207a1b42753503b4f5c3abdeae4d4..76028dd82d3ee0204344800dd7681b8c3dec3bd6 100644 (file)
: reinterpret_cast<ControlPoint::ColorSet*>(&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<Gdk::Pixbuf> pixbuf,
: reinterpret_cast<ControlPoint::ColorSet*>(&default_scp_color_set), group)
, _selection (sel)
{
- _connectHandlers();
+ _selection.allPoints().insert(this);
}
SelectableControlPoint::~SelectableControlPoint()
_selection.allPoints().erase(this);
}
-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),
- false));
-}
-
-void SelectableControlPoint::_grabbedHandler(GdkEventMotion *event)
+bool SelectableControlPoint::grabbed(GdkEventMotion *)
{
// 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(this);
+ return false;
+}
+
+void SelectableControlPoint::dragged(Geom::Point &new_pos, GdkEventMotion *event)
+{
+ _selection._pointDragged(new_pos, event);
}
-bool SelectableControlPoint::_clickedHandler(GdkEventButton *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()) {