summaryrefslogtreecommitdiffstats
path: root/src/seltrans.cpp
diff options
context:
space:
mode:
authorMarkus Engel <markus.engel@tum.de>2014-03-27 23:18:25 +0000
committerMarkus Engel <markus.engel@tum.de>2014-03-27 23:18:25 +0000
commit3053ad943c47f23399ae172f32e7f5f630c53be9 (patch)
tree87bbf5599c0e5f889e18b9e2a68464df717bbffd /src/seltrans.cpp
parentPatch for libuemf. (diff)
downloadinkscape-3053ad943c47f23399ae172f32e7f5f630c53be9.tar.gz
inkscape-3053ad943c47f23399ae172f32e7f5f630c53be9.zip
First step of refactoring SPKnot.
(bzr r13223)
Diffstat (limited to 'src/seltrans.cpp')
-rw-r--r--src/seltrans.cpp64
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);