From 7324592d23338451e093f07b3b76861de66468c9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Krzysztof=20Kosi=C5=84ski?= Date: Wed, 3 Mar 2010 00:22:31 +0100 Subject: [PATCH] Implement a preference that determines whether deleting nodes preserves the shape --- src/ui/dialog/inkscape-preferences.cpp | 6 ++++-- src/ui/dialog/inkscape-preferences.h | 1 + src/ui/tool/multi-path-manipulator.cpp | 10 +++++++--- src/widgets/toolbox.cpp | 6 +++--- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/ui/dialog/inkscape-preferences.cpp b/src/ui/dialog/inkscape-preferences.cpp index 82bca9da0..40efc8282 100644 --- a/src/ui/dialog/inkscape-preferences.cpp +++ b/src/ui/dialog/inkscape-preferences.cpp @@ -433,7 +433,7 @@ void InkscapePreferences::initPageTools() this->AddPage(_page_node, _("Node"), iter_tools, PREFS_PAGE_TOOLS_NODE); AddSelcueCheckbox(_page_node, "/tools/nodes", true); AddGradientCheckbox(_page_node, "/tools/nodes", true); - _page_node.add_group_header( _("Path outline:")); + _page_node.add_group_header( _("Path outline")); _t_node_pathoutline_color.init(_("Path outline color"), "/tools/nodes/highlight_color", 0xff0000ff); _page_node.add_line( false, "", _t_node_pathoutline_color, "", _("Selects the color used for showing the path outline."), false); _t_node_show_outline.init(_("Always show outline"), "/tools/nodes/show_outline", false); @@ -450,9 +450,11 @@ void InkscapePreferences::initPageTools() _page_node.add_line( true, "", _t_node_pathflash_selected, "", _("Show temporary outline even when a path is selected for editing")); _t_node_pathflash_timeout.init("/tools/nodes/pathflash_timeout", 0, 10000.0, 100.0, 100.0, 1000.0, true, false); _page_node.add_line( false, _("Flash time"), _t_node_pathflash_timeout, "ms", _("Specifies how long the path outline will be visible after a mouse-over (in milliseconds). Specify 0 to have the outline shown until mouse leaves the path."), false); - _page_node.add_group_header(_("Transform Handles:")); + _page_node.add_group_header(_("Editing preferences")); _t_node_single_node_transform_handles.init(_("Show transform handles for single nodes"), "/tools/nodes/single_node_transform_handles", false); _page_node.add_line( true, "", _t_node_single_node_transform_handles, "", _("Show transform handles even when only a single node is selected.")); + _t_node_delete_preserves_shape.init(_("Deleting nodes preserves shape"), "/tools/nodes/delete_preserves_shape", true); + _page_node.add_line( true, "", _t_node_delete_preserves_shape, "", _("Move handles next to deleted nodes to resemble original shape. Hold Ctrl to get the other behavior.")); //Tweak this->AddPage(_page_tweak, _("Tweak"), iter_tools, PREFS_PAGE_TOOLS_TWEAK); diff --git a/src/ui/dialog/inkscape-preferences.h b/src/ui/dialog/inkscape-preferences.h index e3f76b753..0ba8c965d 100644 --- a/src/ui/dialog/inkscape-preferences.h +++ b/src/ui/dialog/inkscape-preferences.h @@ -149,6 +149,7 @@ protected: PrefSpinButton _t_node_pathflash_timeout; PrefCheckButton _t_node_show_path_direction; PrefCheckButton _t_node_single_node_transform_handles; + PrefCheckButton _t_node_delete_preserves_shape; PrefColorPicker _t_node_pathoutline_color; PrefRadioButton _win_dockable, _win_floating; diff --git a/src/ui/tool/multi-path-manipulator.cpp b/src/ui/tool/multi-path-manipulator.cpp index f5646ac36..3b0852e6e 100644 --- a/src/ui/tool/multi-path-manipulator.cpp +++ b/src/ui/tool/multi-path-manipulator.cpp @@ -466,9 +466,13 @@ bool MultiPathManipulator::event(GdkEvent *event) // Alt+Delete - delete segments deleteSegments(); } else { - // Control+Delete - delete nodes - // Delete - delete nodes preserving shape - deleteNodes(!held_control(event->key)); + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + bool del_preserves_shape = prefs->getBool("/tools/nodes/delete_preserves_shape", true); + // pass keep_shape = true when: + // a) del preserves shape, and control is not pressed + // b) ctrl+del preserves shape (del_preserves_shape is false), and control is pressed + // Hence xor + deleteNodes(del_preserves_shape ^ held_control(event->key)); } return true; case GDK_c: diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index f81702f4f..8b12a7a5e 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -1043,7 +1043,8 @@ sp_node_path_edit_delete(void) { InkNodeTool *nt = get_node_tool(); if (nt) { - nt->_multipath->deleteNodes(); + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + nt->_multipath->deleteNodes(prefs->getBool("/tools/nodes/delete_preserves_shape", true)); } } @@ -7645,8 +7646,7 @@ static void sp_connector_toolbox_prep( SPDesktop *desktop, GtkActionGroup* mainA gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act), ( tbuttonstate ? TRUE : FALSE )); g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(sp_directed_graph_layout_toggled), holder ); - sigc::connection *connection = new sigc::connection(sp_desktop_selection(desktop)->connectChanged(sigc::bind(sigc::ptr_fun(sp_connector_toolbox_selection_changed), (GObject *)holder)) - ); + sp_desktop_selection(desktop)->connectChanged(sigc::bind(sigc::ptr_fun(sp_connector_toolbox_selection_changed), (GObject *)holder)); } // Avoid overlaps toggle button -- 2.39.5