index cb2b714d8a3ab69442d12855fa64d6f093515862..7e5de6b512aa879530874802522f0aa6e3bc2913 100644 (file)
--- a/src/widgets/toolbox.cpp
+++ b/src/widgets/toolbox.cpp
#include "connector-context.h"
#include "node-context.h"
#include "shape-editor.h"
+#include "tweak-context.h"
#include "sp-rect.h"
#include "box3d.h"
#include "box3d-context.h"
{ "SPNodeContext", "node_toolbox", 0, sp_node_toolbox_prep, "NodeToolbar",
SP_VERB_INVALID, 0, 0},
{ "SPTweakContext", "tweak_toolbox", 0, sp_tweak_toolbox_prep, "TweakToolbar",
- SP_VERB_INVALID, 0, 0},
+ SP_VERB_CONTEXT_TWEAK_PREFS, "tools.tweak", _("Color/opacity used for color tweaking")},
{ "SPZoomContext", "zoom_toolbox", 0, sp_zoom_toolbox_prep, "ZoomToolbar",
SP_VERB_INVALID, 0, 0},
{ "SPStarContext", "star_toolbox", 0, sp_star_toolbox_prep, "StarToolbar",
" <toolitem action='TweakWidthAction' />"
" <toolitem action='TweakForceAction' />"
" <separator />"
+ " <toolitem action='TweakModeLabel' />"
" <toolitem action='TweakModeAction' />"
" <separator />"
+ " <toolitem action='TweakChannelsLabel' />"
+ " <toolitem action='TweakDoH' />"
+ " <toolitem action='TweakDoS' />"
+ " <toolitem action='TweakDoL' />"
+ " <toolitem action='TweakDoO' />"
+ " <separator />"
" <toolitem action='TweakFidelityAction' />"
+ " <separator />"
" <toolitem action='TweakPressureAction' />"
" </toolbar>"
@@ -2476,7 +2485,27 @@ static void sp_tweak_pressure_state_changed( GtkToggleAction *act, gpointer data
static void sp_tweak_mode_changed( EgeSelectOneAction *act, GObject *tbl )
{
- prefs_set_int_attribute("tools.tweak", "mode", ege_select_one_action_get_active( act ));
+ int mode = ege_select_one_action_get_active( act );
+ prefs_set_int_attribute("tools.tweak", "mode", mode);
+
+ GtkAction *doh = GTK_ACTION(g_object_get_data( tbl, "tweak_doh"));
+ GtkAction *dos = GTK_ACTION(g_object_get_data( tbl, "tweak_dos"));
+ GtkAction *dol = GTK_ACTION(g_object_get_data( tbl, "tweak_dol"));
+ GtkAction *doo = GTK_ACTION(g_object_get_data( tbl, "tweak_doo"));
+ GtkAction *dolabel = GTK_ACTION(g_object_get_data( tbl, "tweak_channels_label"));
+ if (mode == TWEAK_MODE_COLORPAINT || mode == TWEAK_MODE_COLORJITTER) {
+ if (doh) gtk_action_set_sensitive (doh, TRUE);
+ if (dos) gtk_action_set_sensitive (dos, TRUE);
+ if (dol) gtk_action_set_sensitive (dol, TRUE);
+ if (doo) gtk_action_set_sensitive (doo, TRUE);
+ if (dolabel) gtk_action_set_sensitive (dolabel, TRUE);
+ } else {
+ if (doh) gtk_action_set_sensitive (doh, FALSE);
+ if (dos) gtk_action_set_sensitive (dos, FALSE);
+ if (dol) gtk_action_set_sensitive (dol, FALSE);
+ if (doo) gtk_action_set_sensitive (doo, FALSE);
+ if (dolabel) gtk_action_set_sensitive (dolabel, FALSE);
+ }
}
static void sp_tweak_fidelity_value_changed( GtkAdjustment *adj, GObject *tbl )
@@ -2484,6 +2513,22 @@ static void sp_tweak_fidelity_value_changed( GtkAdjustment *adj, GObject *tbl )
prefs_set_double_attribute( "tools.tweak", "fidelity", adj->value * 0.01 );
}
+static void tweak_toggle_doh (GtkToggleAction *act, gpointer data) {
+ bool show = gtk_toggle_action_get_active( act );
+ prefs_set_int_attribute ("tools.tweak", "doh", show ? 1 : 0);
+}
+static void tweak_toggle_dos (GtkToggleAction *act, gpointer data) {
+ bool show = gtk_toggle_action_get_active( act );
+ prefs_set_int_attribute ("tools.tweak", "dos", show ? 1 : 0);
+}
+static void tweak_toggle_dol (GtkToggleAction *act, gpointer data) {
+ bool show = gtk_toggle_action_get_active( act );
+ prefs_set_int_attribute ("tools.tweak", "dol", show ? 1 : 0);
+}
+static void tweak_toggle_doo (GtkToggleAction *act, gpointer data) {
+ bool show = gtk_toggle_action_get_active( act );
+ prefs_set_int_attribute ("tools.tweak", "doo", show ? 1 : 0);
+}
static void sp_tweak_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder)
{
@@ -2518,6 +2563,12 @@ static void sp_tweak_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainAction
gtk_action_set_sensitive( GTK_ACTION(eact), TRUE );
}
+ {
+ EgeOutputAction* act = ege_output_action_new( "TweakModeLabel", _("<b>Mode:</b>"), "", 0 );
+ ege_output_action_set_use_markup( act, TRUE );
+ gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
+ }
+
/* Mode */
{
GtkListStore* model = gtk_list_store_new( 3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING );
@@ -2526,31 +2577,59 @@ static void sp_tweak_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainAction
gtk_list_store_append( model, &iter );
gtk_list_store_set( model, &iter,
0, _("Push mode"),
- 1, _("Switch to Push mode"),
+ 1, _("Push parts of paths in any direction"),
2, "tweak_push_mode",
-1 );
gtk_list_store_append( model, &iter );
gtk_list_store_set( model, &iter,
- 0, _("Melt mode"),
- 1, _("Switch to Melt mode"),
- 2, "tweak_suck_mode",
+ 0, _("Shrink mode"),
+ 1, _("Shrink (inset) parts of paths"),
+ 2, "tweak_shrink_mode",
+ -1 );
+
+ gtk_list_store_append( model, &iter );
+ gtk_list_store_set( model, &iter,
+ 0, _("Grow mode"),
+ 1, _("Grow (outset) parts of paths"),
+ 2, "tweak_grow_mode",
-1 );
gtk_list_store_append( model, &iter );
gtk_list_store_set( model, &iter,
- 0, _("Inflate mode"),
- 1, _("Switch to Inflate mode"),
- 2, "tweak_inflate_mode",
+ 0, _("Attract mode"),
+ 1, _("Attract parts of paths towards cursor"),
+ 2, "tweak_attract_mode",
+ -1 );
+
+ gtk_list_store_append( model, &iter );
+ gtk_list_store_set( model, &iter,
+ 0, _("Repel mode"),
+ 1, _("Repel parts of paths from cursor"),
+ 2, "tweak_repel_mode",
-1 );
gtk_list_store_append( model, &iter );
gtk_list_store_set( model, &iter,
0, _("Roughen mode"),
- 1, _("Switch to Roughen mode"),
+ 1, _("Roughen parts of paths"),
2, "tweak_roughen_mode",
-1 );
+ gtk_list_store_append( model, &iter );
+ gtk_list_store_set( model, &iter,
+ 0, _("Color paint mode"),
+ 1, _("Paint the tool's color upon selected objects"),
+ 2, "tweak_colorpaint_mode",
+ -1 );
+
+ gtk_list_store_append( model, &iter );
+ gtk_list_store_set( model, &iter,
+ 0, _("Color jitter mode"),
+ 1, _("Jitter the colors of selected objects"),
+ 2, "tweak_colorjitter_mode",
+ -1 );
+
EgeSelectOneAction* act = ege_select_one_action_new( "TweakModeAction", _(""), _(""), NULL, GTK_TREE_MODEL(model) );
gtk_action_group_add_action( mainActions, GTK_ACTION(act) );
g_object_set_data( holder, "mode_action", act );
@@ -2568,6 +2647,70 @@ static void sp_tweak_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainAction
g_object_set_data( G_OBJECT(holder), "tweak_tool_mode", act);
}
+ guint mode = prefs_get_int_attribute("tools.tweak", "mode", 0);
+
+ {
+ EgeOutputAction* act = ege_output_action_new( "TweakChannelsLabel", _("Channels:"), "", 0 );
+ ege_output_action_set_use_markup( act, TRUE );
+ gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
+ if (mode != TWEAK_MODE_COLORPAINT && mode != TWEAK_MODE_COLORJITTER)
+ gtk_action_set_sensitive (GTK_ACTION(act), FALSE);
+ g_object_set_data( holder, "tweak_channels_label", act);
+ }
+
+ {
+ InkToggleAction* act = ink_toggle_action_new( "TweakDoH",
+ _("H"),
+ _("In color mode, act on objects' hue"),
+ NULL,
+ Inkscape::ICON_SIZE_DECORATION );
+ gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
+ g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(tweak_toggle_doh), desktop );
+ gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs_get_int_attribute( "tools.tweak", "doh", 1 ) );
+ if (mode != TWEAK_MODE_COLORPAINT && mode != TWEAK_MODE_COLORJITTER)
+ gtk_action_set_sensitive (GTK_ACTION(act), FALSE);
+ g_object_set_data( holder, "tweak_doh", act);
+ }
+ {
+ InkToggleAction* act = ink_toggle_action_new( "TweakDoS",
+ _("S"),
+ _("In color mode, act on objects' saturation"),
+ NULL,
+ Inkscape::ICON_SIZE_DECORATION );
+ gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
+ g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(tweak_toggle_dos), desktop );
+ gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs_get_int_attribute( "tools.tweak", "dos", 1 ) );
+ if (mode != TWEAK_MODE_COLORPAINT && mode != TWEAK_MODE_COLORJITTER)
+ gtk_action_set_sensitive (GTK_ACTION(act), FALSE);
+ g_object_set_data( holder, "tweak_dos", act );
+ }
+ {
+ InkToggleAction* act = ink_toggle_action_new( "TweakDoL",
+ _("L"),
+ _("In color mode, act on objects' lightness"),
+ NULL,
+ Inkscape::ICON_SIZE_DECORATION );
+ gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
+ g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(tweak_toggle_dol), desktop );
+ gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs_get_int_attribute( "tools.tweak", "dol", 1 ) );
+ if (mode != TWEAK_MODE_COLORPAINT && mode != TWEAK_MODE_COLORJITTER)
+ gtk_action_set_sensitive (GTK_ACTION(act), FALSE);
+ g_object_set_data( holder, "tweak_dol", act );
+ }
+ {
+ InkToggleAction* act = ink_toggle_action_new( "TweakDoO",
+ _("O"),
+ _("In color mode, act on objects' opacity"),
+ NULL,
+ Inkscape::ICON_SIZE_DECORATION );
+ gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
+ g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(tweak_toggle_doo), desktop );
+ gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs_get_int_attribute( "tools.tweak", "doo", 1 ) );
+ if (mode != TWEAK_MODE_COLORPAINT && mode != TWEAK_MODE_COLORJITTER)
+ gtk_action_set_sensitive (GTK_ACTION(act), FALSE);
+ g_object_set_data( holder, "tweak_doo", act );
+ }
+
{ /* Fidelity */
gchar const* labels[] = {_("(rough, simplified)"), 0, 0, _("(default)"), 0, 0, _("(fine, but many nodes)")};
gdouble values[] = {10, 25, 35, 50, 60, 80, 100};
@@ -2587,7 +2730,7 @@ static void sp_tweak_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainAction
{
InkToggleAction* act = ink_toggle_action_new( "TweakPressureAction",
_("Pressure"),
- _("Use the pressure of the input device to alter the width of the area"),
+ _("Use the pressure of the input device to alter the force of tweak action"),
"use_pressure",
Inkscape::ICON_SIZE_DECORATION );
gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );