diff options
| author | Markus Engel <markus.engel@tum.de> | 2014-03-27 23:18:25 +0000 |
|---|---|---|
| committer | Markus Engel <markus.engel@tum.de> | 2014-03-27 23:18:25 +0000 |
| commit | 3053ad943c47f23399ae172f32e7f5f630c53be9 (patch) | |
| tree | 87bbf5599c0e5f889e18b9e2a68464df717bbffd /src/seltrans.cpp | |
| parent | Patch for libuemf. (diff) | |
| download | inkscape-3053ad943c47f23399ae172f32e7f5f630c53be9.tar.gz inkscape-3053ad943c47f23399ae172f32e7f5f630c53be9.zip | |
First step of refactoring SPKnot.
(bzr r13223)
Diffstat (limited to 'src/seltrans.cpp')
| -rw-r--r-- | src/seltrans.cpp | 64 |
1 files changed, 30 insertions, 34 deletions
diff --git a/src/seltrans.cpp b/src/seltrans.cpp index a55bc3c0d..858985625 100644 --- a/src/seltrans.cpp +++ b/src/seltrans.cpp @@ -54,15 +54,15 @@ using Inkscape::ControlManager; using Inkscape::DocumentUndo; -static void sp_sel_trans_handle_grab(SPKnot *knot, guint state, gpointer data); -static void sp_sel_trans_handle_ungrab(SPKnot *knot, guint state, gpointer data); -static void sp_sel_trans_handle_click(SPKnot *knot, guint state, gpointer data); -static void sp_sel_trans_handle_new_event(SPKnot *knot, Geom::Point *position, guint32 state, gpointer data); -static gboolean sp_sel_trans_handle_request(SPKnot *knot, Geom::Point *p, guint state, gboolean *data); +static void sp_sel_trans_handle_grab(SPKnot *knot, guint state, SPSelTransHandle const* data); +static void sp_sel_trans_handle_ungrab(SPKnot *knot, guint state, SPSelTransHandle const* data); +static void sp_sel_trans_handle_click(SPKnot *knot, guint state, SPSelTransHandle const* data); +static void sp_sel_trans_handle_new_event(SPKnot *knot, Geom::Point const &position, guint32 state, SPSelTransHandle const* data); +static gboolean sp_sel_trans_handle_request(SPKnot *knot, Geom::Point *p, guint state, SPSelTransHandle const *data); extern GdkPixbuf *handles[]; -static gboolean sp_sel_trans_handle_event(SPKnot *knot, GdkEvent *event, gpointer) +static gboolean sp_sel_trans_handle_event(SPKnot *knot, GdkEvent *event, SPSelTransHandle const*) { switch (event->type) { case GDK_MOTION_NOTIFY: @@ -186,7 +186,7 @@ Inkscape::SelTrans::~SelTrans() _sel_modified_connection.disconnect(); for (int i = 0; i < NUMHANDS; i++) { - g_object_unref(G_OBJECT(knots[i])); + knot_unref(knots[i]); knots[i] = NULL; } @@ -574,7 +574,7 @@ void Inkscape::SelTrans::stamp() void Inkscape::SelTrans::_updateHandles() { for (int i = 0; i < NUMHANDS; i++) - sp_knot_hide(knots[i]); + knots[i]->hide(); if ( !_show_handles || _empty ) return; @@ -627,13 +627,13 @@ void Inkscape::SelTrans::_showHandles(SPSelTransType type) // Position knots to scale the selection bbox Geom::Point const bpos(hands[i].x, hands[i].y); Geom::Point p(_bbox->min() + (_bbox->dimensions() * Geom::Scale(bpos))); - sp_knot_moveto(knots[i], p); - sp_knot_show(knots[i]); + knots[i]->moveto(p); + knots[i]->show(); // This controls the center handle's position, because the default can // be moved and needs to be remembered. if( type == HANDLE_CENTER && _center ) - sp_knot_moveto(knots[i], *_center); + knots[i]->moveto(*_center); } } @@ -641,7 +641,7 @@ void Inkscape::SelTrans::_makeHandles() { for (int i = 0; i < NUMHANDS; i++) { SPSelTransTypeInfo info = handtypes[hands[i].type]; - knots[i] = sp_knot_new(_desktop, info.tip); + knots[i] = new SPKnot(_desktop, info.tip); knots[i]->setShape(SP_CTRL_SHAPE_BITMAP); knots[i]->setSize(13); @@ -650,50 +650,46 @@ void Inkscape::SelTrans::_makeHandles() knots[i]->setFill(info.color[0], info.color[1], info.color[2]); knots[i]->setStroke(info.color[3], info.color[4], info.color[5]); knots[i]->setPixbuf(handles[hands[i].control]); - sp_knot_update_ctrl(knots[i]); - - g_signal_connect(G_OBJECT(knots[i]), "request", - G_CALLBACK(sp_sel_trans_handle_request), (gpointer) &hands[i]); - g_signal_connect(G_OBJECT(knots[i]), "moved", - G_CALLBACK(sp_sel_trans_handle_new_event), (gpointer) &hands[i]); - g_signal_connect(G_OBJECT(knots[i]), "grabbed", - G_CALLBACK(sp_sel_trans_handle_grab), (gpointer) &hands[i]); - g_signal_connect(G_OBJECT(knots[i]), "ungrabbed", - G_CALLBACK(sp_sel_trans_handle_ungrab), (gpointer) &hands[i]); - g_signal_connect(G_OBJECT(knots[i]), "clicked", - G_CALLBACK(sp_sel_trans_handle_click), (gpointer) &hands[i]); - g_signal_connect(G_OBJECT(knots[i]), "event", - G_CALLBACK(sp_sel_trans_handle_event), (gpointer) &hands[i]); + knots[i]->update_ctrl(); + + knots[i]->_request_signal.connect(sigc::bind(sigc::ptr_fun(sp_sel_trans_handle_request), &hands[i])); + knots[i]->_moved_signal.connect(sigc::bind(sigc::ptr_fun(sp_sel_trans_handle_new_event), &hands[i])); + knots[i]->_grabbed_signal.connect(sigc::bind(sigc::ptr_fun(sp_sel_trans_handle_grab), &hands[i])); + knots[i]->_ungrabbed_signal.connect(sigc::bind(sigc::ptr_fun(sp_sel_trans_handle_ungrab), &hands[i])); + knots[i]->_click_signal.connect(sigc::bind(sigc::ptr_fun(sp_sel_trans_handle_click), &hands[i])); + knots[i]->_event_signal.connect(sigc::bind(sigc::ptr_fun(sp_sel_trans_handle_event), &hands[i])); } } -static void sp_sel_trans_handle_grab(SPKnot *knot, guint state, gpointer data) +static void sp_sel_trans_handle_grab(SPKnot *knot, guint state, SPSelTransHandle const* data) { SP_SELECT_CONTEXT(knot->desktop->event_context)->_seltrans->handleGrab( knot, state, *(SPSelTransHandle const *) data ); } -static void sp_sel_trans_handle_ungrab(SPKnot *knot, guint /*state*/, gpointer /*data*/) +static void sp_sel_trans_handle_ungrab(SPKnot *knot, guint /*state*/, SPSelTransHandle const* /*data*/) { SP_SELECT_CONTEXT(knot->desktop->event_context)->_seltrans->ungrab(); } -static void sp_sel_trans_handle_new_event(SPKnot *knot, Geom::Point *position, guint state, gpointer data) +static void sp_sel_trans_handle_new_event(SPKnot *knot, Geom::Point const& position, guint state, SPSelTransHandle const *data) { + Geom::Point pos = position; + SP_SELECT_CONTEXT(knot->desktop->event_context)->_seltrans->handleNewEvent( - knot, position, state, *(SPSelTransHandle const *) data + knot, &pos, state, *(SPSelTransHandle const *) data ); } -static gboolean sp_sel_trans_handle_request(SPKnot *knot, Geom::Point *position, guint state, gboolean *data) +static gboolean sp_sel_trans_handle_request(SPKnot *knot, Geom::Point *position, guint state, SPSelTransHandle const *data) { return SP_SELECT_CONTEXT(knot->desktop->event_context)->_seltrans->handleRequest( knot, position, state, *(SPSelTransHandle const *) data ); } -static void sp_sel_trans_handle_click(SPKnot *knot, guint state, gpointer data) +static void sp_sel_trans_handle_click(SPKnot *knot, guint state, SPSelTransHandle const* data) { SP_SELECT_CONTEXT(knot->desktop->event_context)->_seltrans->handleClick( knot, state, *(SPSelTransHandle const *) data @@ -742,7 +738,7 @@ void Inkscape::SelTrans::handleGrab(SPKnot *knot, guint /*state*/, SPSelTransHan break; } - grab(sp_knot_position(knot), handle.x, handle.y, FALSE, FALSE); + grab(knot->position(), handle.x, handle.y, FALSE, FALSE); } @@ -800,7 +796,7 @@ gboolean Inkscape::SelTrans::handleRequest(SPKnot *knot, Geom::Point *position, return TRUE; } if (request(handle, *position, state)) { - sp_knot_set_position(knot, *position, state); + knot->set_position(*position, state); SP_CTRL(_grip)->moveto(*position); if (handle.type == HANDLE_CENTER) { SP_CTRL(_norm)->moveto(*position); |
