summaryrefslogtreecommitdiffstats
path: root/src/mesh-context.cpp
diff options
context:
space:
mode:
authorMarkus Engel <markus.engel@tum.de>2013-04-27 22:05:16 +0000
committerMarkus Engel <markus.engel@tum.de>2013-04-27 22:05:16 +0000
commit9b2956fbaefb4e12bad3fc359c47e5923f33bb41 (patch)
tree376539d6ec4ebeeb82f5f34e190f0f9bceb77993 /src/mesh-context.cpp
parentRemoved some unused files; more refactoring in EventContext tree. (diff)
downloadinkscape-9b2956fbaefb4e12bad3fc359c47e5923f33bb41.tar.gz
inkscape-9b2956fbaefb4e12bad3fc359c47e5923f33bb41.zip
various changes
(bzr r11608.1.105)
Diffstat (limited to 'src/mesh-context.cpp')
-rw-r--r--src/mesh-context.cpp340
1 files changed, 168 insertions, 172 deletions
diff --git a/src/mesh-context.cpp b/src/mesh-context.cpp
index a39aa3853..c7cf60d06 100644
--- a/src/mesh-context.cpp
+++ b/src/mesh-context.cpp
@@ -73,42 +73,34 @@ const std::string& SPMeshContext::getPrefsPath() {
const std::string SPMeshContext::prefsPath = "/tools/mesh";
SPMeshContext::SPMeshContext() : SPEventContext() {
- SPMeshContext* gr_context = this;
-
- gr_context->selcon = 0;
- gr_context->_message_context = 0;
- gr_context->node_added = false;
- gr_context->subselcon = 0;
-
- SPEventContext *event_context = SP_EVENT_CONTEXT(gr_context);
-
- gr_context->cursor_addnode = false;
- event_context->cursor_shape = cursor_gradient_xpm;
- event_context->hot_x = 4;
- event_context->hot_y = 4;
- event_context->xp = 0;
- event_context->yp = 0;
- event_context->tolerance = 6;
- event_context->within_tolerance = false;
- event_context->item_to_select = NULL;
+ this->selcon = 0;
+ this->_message_context = 0;
+ this->node_added = false;
+ this->subselcon = 0;
+
+ this->cursor_addnode = false;
+ this->cursor_shape = cursor_gradient_xpm;
+ this->hot_x = 4;
+ this->hot_y = 4;
+ this->xp = 0;
+ this->yp = 0;
+ this->tolerance = 6;
+ this->within_tolerance = false;
+ this->item_to_select = NULL;
}
SPMeshContext::~SPMeshContext() {
- SPMeshContext *rc = SP_MESH_CONTEXT(this);
- SPEventContext *ec = SP_EVENT_CONTEXT(this);
+ this->enableGrDrag(false);
- ec->enableGrDrag(false);
-
- if (rc->_message_context) {
- delete rc->_message_context;
+ if (this->_message_context) {
+ delete this->_message_context;
}
- rc->selcon->disconnect();
- delete rc->selcon;
- rc->subselcon->disconnect();
- delete rc->subselcon;
-
- //G_OBJECT_CLASS(sp_mesh_context_parent_class)->dispose(object);
+ this->selcon->disconnect();
+ delete this->selcon;
+
+ this->subselcon->disconnect();
+ delete this->subselcon;
}
const gchar *ms_handle_descr [] = {
@@ -117,20 +109,20 @@ const gchar *ms_handle_descr [] = {
N_("Mesh gradient <b>tensor</b>")
};
-static void
-mesh_selection_changed (Inkscape::Selection *, gpointer data)
-{
- SPMeshContext *rc = (SPMeshContext *) data;
+void SPMeshContext::selection_changed(Inkscape::Selection* sel) {
+ GrDrag *drag = this->_grdrag;
+ Inkscape::Selection *selection = sp_desktop_selection(this->desktop);
- GrDrag *drag = rc->_grdrag;
- Inkscape::Selection *selection = sp_desktop_selection(SP_EVENT_CONTEXT(rc)->desktop);
if (selection == NULL) {
return;
}
+
guint n_obj = g_slist_length((GSList *) selection->itemList());
- if (!drag->isNonEmpty() || selection->isEmpty())
+ if (!drag->isNonEmpty() || selection->isEmpty()) {
return;
+ }
+
guint n_tot = drag->numDraggers();
guint n_sel = drag->numSelected();
@@ -143,7 +135,7 @@ mesh_selection_changed (Inkscape::Selection *, gpointer data)
//TRANSLATORS: Mind the space in front. This is part of a compound message
ngettext(" out of %d mesh handle"," out of %d mesh handles",n_tot),
ngettext(" on %d selected object"," on %d selected objects",n_obj),NULL);
- rc->_message_context->setF(Inkscape::NORMAL_MESSAGE,
+ this->_message_context->setF(Inkscape::NORMAL_MESSAGE,
message,_(ms_handle_descr[drag->singleSelectedDraggerSingleDraggableType()]), n_tot, n_obj);
} else {
gchar * message =
@@ -154,7 +146,7 @@ mesh_selection_changed (Inkscape::Selection *, gpointer data)
drag->singleSelectedDraggerNumDraggables()),
ngettext(" out of %d mesh handle"," out of %d mesh handles",n_tot),
ngettext(" on %d selected object"," on %d selected objects",n_obj),NULL);
- rc->_message_context->setF(Inkscape::NORMAL_MESSAGE,message,drag->singleSelectedDraggerNumDraggables(), n_tot, n_obj);
+ this->_message_context->setF(Inkscape::NORMAL_MESSAGE,message,drag->singleSelectedDraggerNumDraggables(), n_tot, n_obj);
}
} else if (n_sel > 1) {
//TRANSLATORS: The plural refers to number of selected mesh handles. This is part of a compound message (part two indicates selected object count)
@@ -162,9 +154,9 @@ mesh_selection_changed (Inkscape::Selection *, gpointer data)
g_strconcat(ngettext("<b>%d</b> mesh handle selected out of %d","<b>%d</b> mesh handles selected out of %d",n_sel),
//TRANSLATORS: Mind the space in front. (Refers to gradient handles selected). This is part of a compound message
ngettext(" on %d selected object"," on %d selected objects",n_obj),NULL);
- rc->_message_context->setF(Inkscape::NORMAL_MESSAGE,message, n_sel, n_tot, n_obj);
+ this->_message_context->setF(Inkscape::NORMAL_MESSAGE,message, n_sel, n_tot, n_obj);
} else if (n_sel == 0) {
- rc->_message_context->setF(Inkscape::NORMAL_MESSAGE,
+ this->_message_context->setF(Inkscape::NORMAL_MESSAGE,
//TRANSLATORS: The plural refers to number of selected objects
ngettext("<b>No</b> mesh handles selected out of %d on %d selected object",
"<b>No</b> mesh handles selected out of %d on %d selected objects",n_obj), n_tot, n_obj);
@@ -237,36 +229,31 @@ mesh_selection_changed (Inkscape::Selection *, gpointer data)
// }
}
-
-static void
-mesh_subselection_changed (gpointer, gpointer data)
-{
- mesh_selection_changed (NULL, data);
-}
-
void SPMeshContext::setup() {
- SPEventContext* ec = this;
-
- SPMeshContext *rc = SP_MESH_CONTEXT(ec);
-
-// if (((SPEventContextClass *) sp_mesh_context_parent_class)->setup) {
-// ((SPEventContextClass *) sp_mesh_context_parent_class)->setup(ec);
-// }
SPEventContext::setup();
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
if (prefs->getBool("/tools/mesh/selcue", true)) {
- ec->enableSelectionCue();
+ this->enableSelectionCue();
}
- ec->enableGrDrag();
- Inkscape::Selection *selection = sp_desktop_selection(ec->desktop);
+ this->enableGrDrag();
+ Inkscape::Selection *selection = sp_desktop_selection(this->desktop);
- rc->_message_context = new Inkscape::MessageContext(sp_desktop_message_stack(ec->desktop));
+ this->_message_context = new Inkscape::MessageContext(sp_desktop_message_stack(this->desktop));
- rc->selcon = new sigc::connection (selection->connectChanged( sigc::bind (sigc::ptr_fun(&mesh_selection_changed), rc)));
- rc->subselcon = new sigc::connection (ec->desktop->connectToolSubselectionChanged(sigc::bind (sigc::ptr_fun(&mesh_subselection_changed), rc)));
- mesh_selection_changed(selection, rc);
+ this->selcon = new sigc::connection(selection->connectChanged(
+ sigc::mem_fun(this, &SPMeshContext::selection_changed)
+ ));
+
+ this->subselcon = new sigc::connection(this->desktop->connectToolSubselectionChanged(
+ sigc::hide(sigc::bind(
+ sigc::mem_fun(*this, &SPMeshContext::selection_changed),
+ (Inkscape::Selection*)NULL)
+ )
+ ));
+
+ this->selection_changed(selection);
}
void
@@ -457,27 +444,20 @@ sp_mesh_context_corner_operation (SPMeshContext *rc, MeshCornerOperation operati
Handles all keyboard and mouse input for meshs.
*/
gint SPMeshContext::root_handler(GdkEvent* event) {
- SPEventContext* event_context = this;
-
- // static int count = 0;
- // std::cout << "sp_mesh_context_root_handler: " << count++ << std::endl;
static bool dragging;
- SPDesktop *desktop = event_context->desktop;
Inkscape::Selection *selection = sp_desktop_selection (desktop);
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- SPMeshContext *rc = SP_MESH_CONTEXT(event_context);
-
- event_context->tolerance = prefs->getIntLimited("/options/dragtolerance/value", 0, 0, 100);
+ this->tolerance = prefs->getIntLimited("/options/dragtolerance/value", 0, 0, 100);
double const nudge = prefs->getDoubleLimited("/options/nudgedistance/value", 2, 0, 1000, "px"); // in px
- GrDrag *drag = event_context->_grdrag;
+ GrDrag *drag = this->_grdrag;
g_assert (drag);
gint ret = FALSE;
- switch (event->type) {
+ switch (event->type) {
case GDK_2BUTTON_PRESS:
#ifdef DEBUG_MESH
@@ -489,27 +469,24 @@ gint SPMeshContext::root_handler(GdkEvent* event) {
// If not over a line, create new gradients for selected objects.
if ( event->button.button == 1 ) {
-
// Are we over a mesh line?
bool over_line = false;
SPCtrlCurve *line = NULL;
+
if (drag->lines) {
for (GSList *l = drag->lines; (l != NULL) && (!over_line); l = l->next) {
line = (SPCtrlCurve*) l->data;
- over_line |= sp_mesh_context_is_over_line (rc, (SPItem*) line, Geom::Point(event->motion.x, event->motion.y));
+ over_line |= sp_mesh_context_is_over_line (this, (SPItem*) line, Geom::Point(event->motion.x, event->motion.y));
}
}
if (over_line) {
// We take the first item in selection, because with doubleclick, the first click
// always resets selection to the single object under cursor
- sp_mesh_context_split_near_point(rc, SP_ITEM(selection->itemList()->data), rc->mousepoint_doc, event->button.time);
-
+ sp_mesh_context_split_near_point(this, SP_ITEM(selection->itemList()->data), this->mousepoint_doc, event->button.time);
} else {
// Create a new gradient with default coordinates.
-
for (GSList const* i = selection->itemList(); i != NULL; i = i->next) {
-
SPItem *item = SP_ITEM(i->data);
SPGradientType new_type = SP_GRADIENT_TYPE_MESH;
Inkscape::PaintTarget fsmode = (prefs->getInt("/tools/gradient/newfillorstroke", 1) != 0) ? Inkscape::FOR_FILL : Inkscape::FOR_STROKE;
@@ -526,6 +503,7 @@ gint SPMeshContext::root_handler(GdkEvent* event) {
DocumentUndo::done(sp_desktop_document (desktop), SP_VERB_CONTEXT_MESH,
_("Create default mesh"));
}
+
ret = TRUE;
}
break;
@@ -538,14 +516,13 @@ gint SPMeshContext::root_handler(GdkEvent* event) {
// Button down
// If Shift key down: do rubber band selection
// Else set origin for drag. A drag creates a new gradient if one does not exist
-
- if ( event->button.button == 1 && !event_context->space_panning ) {
+ if ( event->button.button == 1 && !this->space_panning ) {
Geom::Point button_w(event->button.x, event->button.y);
// save drag origin
- event_context->xp = (gint) button_w[Geom::X];
- event_context->yp = (gint) button_w[Geom::Y];
- event_context->within_tolerance = true;
+ this->xp = (gint) button_w[Geom::X];
+ this->yp = (gint) button_w[Geom::Y];
+ this->within_tolerance = true;
dragging = true;
@@ -555,8 +532,9 @@ gint SPMeshContext::root_handler(GdkEvent* event) {
} else {
// remember clicked item, disregarding groups, honoring Alt; do nothing with Crtl to
// enable Ctrl+doubleclick of exactly the selected item(s)
- if (!(event->button.state & GDK_CONTROL_MASK))
- event_context->item_to_select = sp_event_context_find_item (desktop, button_w, event->button.state & GDK_MOD1_MASK, TRUE);
+ if (!(event->button.state & GDK_CONTROL_MASK)) {
+ this->item_to_select = sp_event_context_find_item (desktop, button_w, event->button.state & GDK_MOD1_MASK, TRUE);
+ }
if (!selection->isEmpty()) {
SnapManager &m = desktop->namedview->snap_manager;
@@ -564,7 +542,8 @@ gint SPMeshContext::root_handler(GdkEvent* event) {
m.freeSnapReturnByRef(button_dt, Inkscape::SNAPSOURCE_NODE_HANDLE);
m.unSetup();
}
- rc->origin = button_dt;
+
+ this->origin = button_dt;
}
ret = TRUE;
@@ -572,41 +551,37 @@ gint SPMeshContext::root_handler(GdkEvent* event) {
break;
case GDK_MOTION_NOTIFY:
-
// Mouse move
-
- if ( dragging
- && ( event->motion.state & GDK_BUTTON1_MASK ) && !event_context->space_panning )
- {
+ if ( dragging && ( event->motion.state & GDK_BUTTON1_MASK ) && !this->space_panning ) {
#ifdef DEBUG_MESH
std::cout << "sp_mesh_context_root_handler: GDK_MOTION_NOTIFY: Dragging" << std::endl;
#endif
- if ( event_context->within_tolerance
- && ( abs( (gint) event->motion.x - event_context->xp ) < event_context->tolerance )
- && ( abs( (gint) event->motion.y - event_context->yp ) < event_context->tolerance ) ) {
+ if ( this->within_tolerance
+ && ( abs( (gint) event->motion.x - this->xp ) < this->tolerance )
+ && ( abs( (gint) event->motion.y - this->yp ) < this->tolerance ) ) {
break; // do not drag if we're within tolerance from origin
}
// Once the user has moved farther than tolerance from the original location
// (indicating they intend to draw, not click), then always process the
// motion notify coordinates as given (no snapping back to origin)
- event_context->within_tolerance = false;
+ this->within_tolerance = false;
Geom::Point const motion_w(event->motion.x,
event->motion.y);
- Geom::Point const motion_dt = event_context->desktop->w2d(motion_w);
+ Geom::Point const motion_dt = this->desktop->w2d(motion_w);
if (Inkscape::Rubberband::get(desktop)->is_started()) {
Inkscape::Rubberband::get(desktop)->move(motion_dt);
- event_context->defaultMessageContext()->set(Inkscape::NORMAL_MESSAGE, _("<b>Draw around</b> handles to select them"));
+ this->defaultMessageContext()->set(Inkscape::NORMAL_MESSAGE, _("<b>Draw around</b> handles to select them"));
} else {
// Create new gradient with coordinates determined by drag.
- sp_mesh_drag(*rc, motion_dt, event->motion.state, event->motion.time);
+ sp_mesh_drag(*this, motion_dt, event->motion.state, event->motion.time);
}
+
gobble_motion_events(GDK_BUTTON1_MASK);
ret = TRUE;
-
} else {
// Not dragging
@@ -616,7 +591,7 @@ gint SPMeshContext::root_handler(GdkEvent* event) {
m.setup(desktop);
Geom::Point const motion_w(event->motion.x, event->motion.y);
- Geom::Point const motion_dt = event_context->desktop->w2d(motion_w);
+ Geom::Point const motion_dt = this->desktop->w2d(motion_w);
m.preSnap(Inkscape::SnapCandidatePoint(motion_dt, Inkscape::SNAPSOURCE_OTHER_HANDLE));
m.unSetup();
@@ -631,20 +606,21 @@ gint SPMeshContext::root_handler(GdkEvent* event) {
// Change cursor shape if over line
bool over_line = false;
+
if (drag->lines) {
for (GSList *l = drag->lines; l != NULL; l = l->next) {
- over_line |= sp_mesh_context_is_over_line (rc, (SPItem*) l->data, Geom::Point(event->motion.x, event->motion.y));
+ over_line |= sp_mesh_context_is_over_line (this, (SPItem*) l->data, Geom::Point(event->motion.x, event->motion.y));
}
}
- if (rc->cursor_addnode && !over_line) {
- event_context->cursor_shape = cursor_gradient_xpm;
- sp_event_context_update_cursor(event_context);
- rc->cursor_addnode = false;
- } else if (!rc->cursor_addnode && over_line) {
- event_context->cursor_shape = cursor_gradient_add_xpm;
- sp_event_context_update_cursor(event_context);
- rc->cursor_addnode = true;
+ if (this->cursor_addnode && !over_line) {
+ this->cursor_shape = cursor_gradient_xpm;
+ sp_event_context_update_cursor(this);
+ this->cursor_addnode = false;
+ } else if (!this->cursor_addnode && over_line) {
+ this->cursor_shape = cursor_gradient_add_xpm;
+ sp_event_context_update_cursor(this);
+ this->cursor_addnode = true;
}
}
break;
@@ -655,29 +631,30 @@ gint SPMeshContext::root_handler(GdkEvent* event) {
std::cout << "sp_mesh_context_root_handler: GDK_BUTTON_RELEASE" << std::endl;
#endif
- event_context->xp = event_context->yp = 0;
- if ( event->button.button == 1 && !event_context->space_panning ) {
+ this->xp = this->yp = 0;
+ if ( event->button.button == 1 && !this->space_panning ) {
// Check if over line
bool over_line = false;
SPCtrlLine *line = NULL;
+
if (drag->lines) {
for (GSList *l = drag->lines; (l != NULL) && (!over_line); l = l->next) {
line = (SPCtrlLine*) l->data;
- over_line = sp_mesh_context_is_over_line (rc, (SPItem*) line, Geom::Point(event->motion.x, event->motion.y));
- if (over_line)
+ over_line = sp_mesh_context_is_over_line (this, (SPItem*) line, Geom::Point(event->motion.x, event->motion.y));
+
+ if (over_line) {
break;
+ }
}
}
if ( (event->button.state & GDK_CONTROL_MASK) && (event->button.state & GDK_MOD1_MASK ) ) {
if (over_line && line) {
- sp_mesh_context_split_near_point(rc, line->item, rc->mousepoint_doc, 0);
+ sp_mesh_context_split_near_point(this, line->item, this->mousepoint_doc, 0);
ret = TRUE;
}
-
} else {
-
dragging = false;
// unless clicked with Ctrl (to enable Ctrl+doubleclick).
@@ -686,29 +663,28 @@ gint SPMeshContext::root_handler(GdkEvent* event) {
break;
}
- if (!event_context->within_tolerance) {
+ if (!this->within_tolerance) {
// we've been dragging, either do nothing (grdrag handles that),
// or rubberband-select if we have rubberband
Inkscape::Rubberband *r = Inkscape::Rubberband::get(desktop);
- if (r->is_started() && !event_context->within_tolerance) {
+
+ if (r->is_started() && !this->within_tolerance) {
// this was a rubberband drag
if (r->getMode() == RUBBERBAND_MODE_RECT) {
Geom::OptRect const b = r->getRectangle();
drag->selectRect(*b);
}
}
-
- } else if (event_context->item_to_select) {
+ } else if (this->item_to_select) {
if (over_line && line) {
// Clicked on an existing mesh line, don't change selection. This stops
// possible change in selection during a double click with overlapping objects
- }
- else {
+ } else {
// no dragging, select clicked item if any
if (event->button.state & GDK_SHIFT_MASK) {
- selection->toggle(event_context->item_to_select);
+ selection->toggle(this->item_to_select);
} else {
- selection->set(event_context->item_to_select);
+ selection->set(this->item_to_select);
}
}
} else {
@@ -720,9 +696,10 @@ gint SPMeshContext::root_handler(GdkEvent* event) {
}
}
- event_context->item_to_select = NULL;
+ this->item_to_select = NULL;
ret = TRUE;
}
+
Inkscape::Rubberband::get(desktop)->stop();
}
break;
@@ -743,7 +720,7 @@ gint SPMeshContext::root_handler(GdkEvent* event) {
case GDK_KEY_Shift_R:
case GDK_KEY_Meta_L: // Meta is when you press Shift+Alt (at least on my machine)
case GDK_KEY_Meta_R:
- sp_event_show_modifier_tip (event_context->defaultMessageContext(), event,
+ sp_event_show_modifier_tip (this->defaultMessageContext(), event,
_("FIXME<b>Ctrl</b>: snap mesh angle"),
_("FIXME<b>Shift</b>: draw mesh around the starting point"),
NULL);
@@ -763,6 +740,7 @@ gint SPMeshContext::root_handler(GdkEvent* event) {
} else {
selection->clear();
}
+
ret = TRUE;
//TODO: make dragging escapable by Esc
break;
@@ -771,33 +749,46 @@ gint SPMeshContext::root_handler(GdkEvent* event) {
case GDK_KEY_KP_Left:
case GDK_KEY_KP_4:
if (!MOD__CTRL) { // not ctrl
- gint mul = 1 + gobble_key_events(
- get_group0_keyval(&event->key), 0); // with any mask
+ gint mul = 1 + gobble_key_events(get_group0_keyval(&event->key), 0); // with any mask
+
if (MOD__ALT) { // alt
- if (MOD__SHIFT) drag->selected_move_screen(mul*-10, 0); // shift
- else drag->selected_move_screen(mul*-1, 0); // no shift
- }
- else { // no alt
- if (MOD__SHIFT) drag->selected_move(mul*-10*nudge, 0); // shift
- else drag->selected_move(mul*-nudge, 0); // no shift
+ if (MOD__SHIFT) {
+ drag->selected_move_screen(mul*-10, 0); // shift
+ } else {
+ drag->selected_move_screen(mul*-1, 0); // no shift
+ }
+ } else { // no alt
+ if (MOD__SHIFT) {
+ drag->selected_move(mul*-10*nudge, 0); // shift
+ } else {
+ drag->selected_move(mul*-nudge, 0); // no shift
+ }
}
+
ret = TRUE;
}
break;
+
case GDK_KEY_Up: // move handle up
case GDK_KEY_KP_Up:
case GDK_KEY_KP_8:
if (!MOD__CTRL) { // not ctrl
- gint mul = 1 + gobble_key_events(
- get_group0_keyval(&event->key), 0); // with any mask
+ gint mul = 1 + gobble_key_events(get_group0_keyval(&event->key), 0); // with any mask
+
if (MOD__ALT) { // alt
- if (MOD__SHIFT) drag->selected_move_screen(0, mul*10); // shift
- else drag->selected_move_screen(0, mul*1); // no shift
- }
- else { // no alt
- if (MOD__SHIFT) drag->selected_move(0, mul*10*nudge); // shift
- else drag->selected_move(0, mul*nudge); // no shift
+ if (MOD__SHIFT) {
+ drag->selected_move_screen(0, mul*10); // shift
+ } else {
+ drag->selected_move_screen(0, mul*1); // no shift
+ }
+ } else { // no alt
+ if (MOD__SHIFT) {
+ drag->selected_move(0, mul*10*nudge); // shift
+ } else {
+ drag->selected_move(0, mul*nudge); // no shift
+ }
}
+
ret = TRUE;
}
break;
@@ -806,16 +797,22 @@ gint SPMeshContext::root_handler(GdkEvent* event) {
case GDK_KEY_KP_Right:
case GDK_KEY_KP_6:
if (!MOD__CTRL) { // not ctrl
- gint mul = 1 + gobble_key_events(
- get_group0_keyval(&event->key), 0); // with any mask
+ gint mul = 1 + gobble_key_events(get_group0_keyval(&event->key), 0); // with any mask
+
if (MOD__ALT) { // alt
- if (MOD__SHIFT) drag->selected_move_screen(mul*10, 0); // shift
- else drag->selected_move_screen(mul*1, 0); // no shift
- }
- else { // no alt
- if (MOD__SHIFT) drag->selected_move(mul*10*nudge, 0); // shift
- else drag->selected_move(mul*nudge, 0); // no shift
+ if (MOD__SHIFT) {
+ drag->selected_move_screen(mul*10, 0); // shift
+ } else {
+ drag->selected_move_screen(mul*1, 0); // no shift
+ }
+ } else { // no alt
+ if (MOD__SHIFT) {
+ drag->selected_move(mul*10*nudge, 0); // shift
+ } else {
+ drag->selected_move(mul*nudge, 0); // no shift
+ }
}
+
ret = TRUE;
}
break;
@@ -824,16 +821,22 @@ gint SPMeshContext::root_handler(GdkEvent* event) {
case GDK_KEY_KP_Down:
case GDK_KEY_KP_2:
if (!MOD__CTRL) { // not ctrl
- gint mul = 1 + gobble_key_events(
- get_group0_keyval(&event->key), 0); // with any mask
+ gint mul = 1 + gobble_key_events(get_group0_keyval(&event->key), 0); // with any mask
+
if (MOD__ALT) { // alt
- if (MOD__SHIFT) drag->selected_move_screen(0, mul*-10); // shift
- else drag->selected_move_screen(0, mul*-1); // no shift
- }
- else { // no alt
- if (MOD__SHIFT) drag->selected_move(0, mul*-10*nudge); // shift
- else drag->selected_move(0, mul*-nudge); // no shift
+ if (MOD__SHIFT) {
+ drag->selected_move_screen(0, mul*-10); // shift
+ } else {
+ drag->selected_move_screen(0, mul*-1); // no shift
+ }
+ } else { // no alt
+ if (MOD__SHIFT) {
+ drag->selected_move(0, mul*-10*nudge); // shift
+ } else {
+ drag->selected_move(0, mul*-nudge); // no shift
+ }
}
+
ret = TRUE;
}
break;
@@ -860,7 +863,7 @@ gint SPMeshContext::root_handler(GdkEvent* event) {
case GDK_KEY_b: // Toggle mesh side between lineto and curveto.
case GDK_KEY_B:
if (MOD__ALT && drag->isNonEmpty() && drag->hasSelection()) {
- sp_mesh_context_corner_operation ( rc, MG_CORNER_SIDE_TOGGLE );
+ sp_mesh_context_corner_operation ( this, MG_CORNER_SIDE_TOGGLE );
ret = TRUE;
}
break;
@@ -868,7 +871,7 @@ gint SPMeshContext::root_handler(GdkEvent* event) {
case GDK_KEY_c: // Convert mesh side from generic Bezier to Bezier approximating arc,
case GDK_KEY_C: // preserving handle direction.
if (MOD__ALT && drag->isNonEmpty() && drag->hasSelection()) {
- sp_mesh_context_corner_operation ( rc, MG_CORNER_SIDE_ARC );
+ sp_mesh_context_corner_operation ( this, MG_CORNER_SIDE_ARC );
ret = TRUE;
}
break;
@@ -876,7 +879,7 @@ gint SPMeshContext::root_handler(GdkEvent* event) {
case GDK_KEY_g: // Toggle mesh tensor points on/off
case GDK_KEY_G:
if (MOD__ALT && drag->isNonEmpty() && drag->hasSelection()) {
- sp_mesh_context_corner_operation ( rc, MG_CORNER_TENSOR_TOGGLE );
+ sp_mesh_context_corner_operation ( this, MG_CORNER_TENSOR_TOGGLE );
ret = TRUE;
}
break;
@@ -884,7 +887,7 @@ gint SPMeshContext::root_handler(GdkEvent* event) {
case GDK_KEY_j: // Smooth corner color
case GDK_KEY_J:
if (MOD__ALT && drag->isNonEmpty() && drag->hasSelection()) {
- sp_mesh_context_corner_operation ( rc, MG_CORNER_COLOR_SMOOTH );
+ sp_mesh_context_corner_operation ( this, MG_CORNER_COLOR_SMOOTH );
ret = TRUE;
}
break;
@@ -892,7 +895,7 @@ gint SPMeshContext::root_handler(GdkEvent* event) {
case GDK_KEY_k: // Pick corner color
case GDK_KEY_K:
if (MOD__ALT && drag->isNonEmpty() && drag->hasSelection()) {
- sp_mesh_context_corner_operation ( rc, MG_CORNER_COLOR_PICK );
+ sp_mesh_context_corner_operation ( this, MG_CORNER_COLOR_PICK );
ret = TRUE;
}
break;
@@ -917,7 +920,7 @@ gint SPMeshContext::root_handler(GdkEvent* event) {
case GDK_KEY_Shift_R:
case GDK_KEY_Meta_L: // Meta is when you press Shift+Alt
case GDK_KEY_Meta_R:
- event_context->defaultMessageContext()->clear();
+ this->defaultMessageContext()->clear();
break;
default:
break;
@@ -928,20 +931,13 @@ gint SPMeshContext::root_handler(GdkEvent* event) {
}
if (!ret) {
-// if (((SPEventContextClass *) sp_mesh_context_parent_class)->root_handler) {
-// ret = ((SPEventContextClass *) sp_mesh_context_parent_class)->root_handler(event_context, event);
-// }
ret = SPEventContext::root_handler(event);
}
return ret;
}
-
-
-static void sp_mesh_drag(SPMeshContext &rc, Geom::Point const /*pt*/, guint /*state*/, guint32 /*etime*/)
-{
-
+static void sp_mesh_drag(SPMeshContext &rc, Geom::Point const /*pt*/, guint /*state*/, guint32 /*etime*/) {
SPDesktop *desktop = SP_EVENT_CONTEXT(&rc)->desktop;
Inkscape::Selection *selection = sp_desktop_selection(desktop);
SPDocument *document = sp_desktop_document(desktop);