summaryrefslogtreecommitdiffstats
path: root/src/widgets/spray-toolbar.cpp
diff options
context:
space:
mode:
authorJabier Arraiza Cenoz <jabier.arraiza@marker.es>2015-11-12 23:48:16 +0000
committerJabiertxof <jtx@jtx.marker.es>2015-11-12 23:48:16 +0000
commitadef171f85a93a4db998d583246d5521a894b305 (patch)
treead091bca4aafa62f68ad905d691ecc0d328c1c57 /src/widgets/spray-toolbar.cpp
parentupdate to trunk (diff)
parentFix crashes in erase mode of spray (diff)
downloadinkscape-adef171f85a93a4db998d583246d5521a894b305.tar.gz
inkscape-adef171f85a93a4db998d583246d5521a894b305.zip
update to trunk
(bzr r14422.3.4)
Diffstat (limited to 'src/widgets/spray-toolbar.cpp')
-rw-r--r--src/widgets/spray-toolbar.cpp189
1 files changed, 141 insertions, 48 deletions
diff --git a/src/widgets/spray-toolbar.cpp b/src/widgets/spray-toolbar.cpp
index 5e0d81964..db1f9526a 100644
--- a/src/widgets/spray-toolbar.cpp
+++ b/src/widgets/spray-toolbar.cpp
@@ -66,14 +66,16 @@ static void sp_stb_sensitivize( GObject *tbl )
GtkAction* spray_scale = GTK_ACTION( g_object_get_data(tbl, "spray_scale") );
GtkAdjustment *adj_offset = ege_adjustment_action_get_adjustment( EGE_ADJUSTMENT_ACTION(offset) );
GtkAdjustment *adj_scale = ege_adjustment_action_get_adjustment( EGE_ADJUSTMENT_ACTION(spray_scale) );
- GtkToggleAction *nooverlap = GTK_TOGGLE_ACTION( g_object_get_data(tbl, "nooverlap") );
+ GtkToggleAction *no_overlap = GTK_TOGGLE_ACTION( g_object_get_data(tbl, "no_overlap") );
GtkToggleAction *picker = GTK_TOGGLE_ACTION( g_object_get_data(tbl, "picker") );
+ GtkAction* picker_action = GTK_ACTION( g_object_get_data(tbl, "picker") );
GtkToggleAction *usepressurescale = GTK_TOGGLE_ACTION( g_object_get_data(tbl, "usepressurescale") );
- GtkAction *pickfill = GTK_ACTION( g_object_get_data(tbl, "pickfill") );
- GtkAction *pickstroke = GTK_ACTION( g_object_get_data(tbl, "pickstroke") );
- GtkAction *pickinversevalue = GTK_ACTION( g_object_get_data(tbl, "pickinversevalue") );
+ GtkAction *pick_fill = GTK_ACTION( g_object_get_data(tbl, "pick_fill") );
+ GtkAction *pick_stroke = GTK_ACTION( g_object_get_data(tbl, "pick_stroke") );
+ GtkAction *pick_inverse_value = GTK_ACTION( g_object_get_data(tbl, "pick_inverse_value") );
+ GtkAction *pick_center = GTK_ACTION( g_object_get_data(tbl, "pick_center") );
gtk_adjustment_set_value( adj_offset, 100.0 );
- if (gtk_toggle_action_get_active(nooverlap)) {
+ if (gtk_toggle_action_get_active(no_overlap) && gtk_action_get_sensitive(picker_action)) {
gtk_action_set_sensitive( offset, TRUE );
} else {
gtk_action_set_sensitive( offset, FALSE );
@@ -84,17 +86,34 @@ static void sp_stb_sensitivize( GObject *tbl )
} else {
gtk_action_set_sensitive( spray_scale, TRUE );
}
- if(gtk_toggle_action_get_active(picker)){
- gtk_action_set_sensitive( pickfill, TRUE );
- gtk_action_set_sensitive( pickstroke, TRUE );
- gtk_action_set_sensitive( pickinversevalue, TRUE );
+ if(gtk_toggle_action_get_active(picker) && gtk_action_get_sensitive(picker_action)){
+ gtk_action_set_sensitive( pick_fill, TRUE );
+ gtk_action_set_sensitive( pick_stroke, TRUE );
+ gtk_action_set_sensitive( pick_inverse_value, TRUE );
+ gtk_action_set_sensitive( pick_center, TRUE );
} else {
- gtk_action_set_sensitive( pickfill, FALSE );
- gtk_action_set_sensitive( pickstroke, FALSE );
- gtk_action_set_sensitive( pickinversevalue, FALSE );
+ gtk_action_set_sensitive( pick_fill, FALSE );
+ gtk_action_set_sensitive( pick_stroke, FALSE );
+ gtk_action_set_sensitive( pick_inverse_value, FALSE );
+ gtk_action_set_sensitive( pick_center, FALSE );
}
}
+static void sp_spray_erase_sensitivize( GObject *tbl, bool sensitive){
+ gtk_action_set_sensitive( GTK_ACTION( g_object_get_data(tbl, "no_overlap") ), sensitive );
+ gtk_action_set_sensitive( GTK_ACTION( g_object_get_data(tbl, "over_no_transparent") ), sensitive );
+ gtk_action_set_sensitive( GTK_ACTION( g_object_get_data(tbl, "over_transparent") ), sensitive );
+ gtk_action_set_sensitive( GTK_ACTION( g_object_get_data(tbl, "pick_no_overlap") ), sensitive );
+ gtk_action_set_sensitive( GTK_ACTION( g_object_get_data(tbl, "pick_stroke") ), sensitive );
+ gtk_action_set_sensitive( GTK_ACTION( g_object_get_data(tbl, "pick_fill") ), sensitive );
+ gtk_action_set_sensitive( GTK_ACTION( g_object_get_data(tbl, "pick_inverse_value") ), sensitive );
+ gtk_action_set_sensitive( GTK_ACTION( g_object_get_data(tbl, "pick_center") ), sensitive );
+ gtk_action_set_sensitive( GTK_ACTION( g_object_get_data(tbl, "picker") ), sensitive );
+ gtk_action_set_sensitive( GTK_ACTION( g_object_get_data(tbl, "offset") ), sensitive );
+ gtk_action_set_sensitive( GTK_ACTION( g_object_get_data(tbl, "spray_rotation") ), sensitive );
+ sp_stb_sensitivize( tbl );
+}
+
Inkscape::UI::Dialog::CloneTiler *get_clone_tiler_panel(SPDesktop *desktop)
{
if (Inkscape::UI::Dialog::PanelDialogBase *panel_dialog =
@@ -130,11 +149,16 @@ static void sp_spray_standard_deviation_value_changed( GtkAdjustment *adj, GObje
gtk_adjustment_get_value(adj));
}
-static void sp_spray_mode_changed( EgeSelectOneAction *act, GObject * /*tbl*/ )
+static void sp_spray_mode_changed( EgeSelectOneAction *act, GObject * tbl )
{
int mode = ege_select_one_action_get_active( act );
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
prefs->setInt("/tools/spray/mode", mode);
+ if(mode != 3){
+ sp_spray_erase_sensitivize(tbl, true);
+ } else {
+ sp_spray_erase_sensitivize(tbl, false);
+ }
}
static void sp_spray_population_value_changed( GtkAdjustment *adj, GObject * /*tbl*/ )
@@ -165,11 +189,11 @@ static void sp_spray_offset_value_changed( GtkAdjustment *adj, GObject * /*tbl*/
gtk_adjustment_get_value(adj));
}
-static void sp_toggle_nooverlap( GtkToggleAction* act, gpointer data)
+static void sp_toggle_no_overlap( GtkToggleAction* act, gpointer data)
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
gboolean active = gtk_toggle_action_get_active(act);
- prefs->setBool("/tools/spray/nooverlap", active);
+ prefs->setBool("/tools/spray/no_overlap", active);
GObject *tbl = G_OBJECT(data);
sp_stb_sensitivize(tbl);
}
@@ -186,20 +210,28 @@ static void sp_toggle_pressure_scale( GtkToggleAction* act, gpointer data)
sp_stb_sensitivize( tbl );
}
-static void sp_toggle_visible( GtkToggleAction* act, gpointer data)
+static void sp_toggle_over_no_transparent( GtkToggleAction* act, gpointer data)
+{
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ gboolean active = gtk_toggle_action_get_active(act);
+ prefs->setBool("/tools/spray/over_no_transparent", active);
+}
+
+static void sp_toggle_over_transparent( GtkToggleAction* act, gpointer data)
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
gboolean active = gtk_toggle_action_get_active(act);
- prefs->setBool("/tools/spray/visible", active);
+ prefs->setBool("/tools/spray/over_transparent", active);
}
+
static void sp_toggle_picker( GtkToggleAction* act, gpointer data )
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
gboolean active = gtk_toggle_action_get_active(act);
prefs->setBool("/tools/spray/picker", active);
if(active == true){
- prefs->setBool("/dialogs/clonetiler/dotrace", true);
+ prefs->setBool("/dialogs/clonetiler/dotrace", false);
SPDesktop *dt = SP_ACTIVE_DESKTOP;
if (Inkscape::UI::Dialog::CloneTiler *ct = get_clone_tiler_panel(dt)){
dt->_dlg_mgr->showDialog("CloneTiler");
@@ -210,25 +242,39 @@ static void sp_toggle_picker( GtkToggleAction* act, gpointer data )
sp_stb_sensitivize(tbl);
}
-static void sp_toggle_pick_fill( GtkToggleAction* act, gpointer data )
+static void sp_toggle_pick_center( GtkToggleAction* act, gpointer data )
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
gboolean active = gtk_toggle_action_get_active(act);
- prefs->setBool("/tools/spray/pickfill", active);
+ prefs->setBool("/tools/spray/pick_center", active);
}
-static void sp_toggle_pick_inverse_value( GtkToggleAction* act, gpointer data )
+static void sp_toggle_pick_fill( GtkToggleAction* act, gpointer data )
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
gboolean active = gtk_toggle_action_get_active(act);
- prefs->setBool("/tools/spray/pickinversevalue", active);
+ prefs->setBool("/tools/spray/pick_fill", active);
}
static void sp_toggle_pick_stroke( GtkToggleAction* act, gpointer data )
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
gboolean active = gtk_toggle_action_get_active(act);
- prefs->setBool("/tools/spray/pickstroke", active);
+ prefs->setBool("/tools/spray/pick_stroke", active);
+}
+
+static void sp_toggle_pick_no_overlap( GtkToggleAction* act, gpointer data )
+{
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ gboolean active = gtk_toggle_action_get_active(act);
+ prefs->setBool("/tools/spray/pick_no_overlap", active);
+}
+
+static void sp_toggle_pick_inverse_value( GtkToggleAction* act, gpointer data )
+{
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ gboolean active = gtk_toggle_action_get_active(act);
+ prefs->setBool("/tools/spray/pick_inverse_value", active);
}
void sp_spray_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder)
@@ -298,7 +344,7 @@ void sp_spray_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObj
/* Mode */
{
- GtkListStore* model = gtk_list_store_new( 3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING );
+ GtkListStore* model = gtk_list_store_new( 4, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING );
GtkTreeIter iter;
gtk_list_store_append( model, &iter );
@@ -314,6 +360,7 @@ void sp_spray_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObj
1, _("Spray clones of the initial selection"),
2, INKSCAPE_ICON("spray-mode-clone"),
-1 );
+
#ifdef ENABLE_SPRAY_MODE_SINGLE_PATH
gtk_list_store_append( model, &iter );
gtk_list_store_set( model, &iter,
@@ -322,6 +369,14 @@ void sp_spray_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObj
2, INKSCAPE_ICON("spray-mode-union"),
-1 );
#endif
+
+ gtk_list_store_append( model, &iter );
+ gtk_list_store_set( model, &iter,
+ 0, _("Delete sprayed items"),
+ 1, _("Delete sprayed items from selection"),
+ 2, INKSCAPE_ICON("draw-eraser"),
+ -1 );
+
EgeSelectOneAction* act = ege_select_one_action_new( "SprayModeAction", _("Mode"), (""), NULL, GTK_TREE_MODEL(model) );
g_object_set( act, "short_label", _("Mode:"), NULL );
gtk_action_group_add_action( mainActions, GTK_ACTION(act) );
@@ -420,7 +475,6 @@ void sp_spray_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObj
gtk_action_group_add_action( mainActions, GTK_ACTION(act) );
}
-
/* Picker */
{
InkToggleAction* act = ink_toggle_action_new( "SprayPickColorAction",
@@ -433,56 +487,95 @@ void sp_spray_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObj
g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(sp_toggle_picker), holder) ;
gtk_action_group_add_action( mainActions, GTK_ACTION(act) );
}
+
+ /* Pick from center */
+ {
+ InkToggleAction* act = ink_toggle_action_new( "SprayPickCenterAction",
+ _("Pick from center instead average area."),
+ _("Pick from center instead average area."),
+ INKSCAPE_ICON("snap-bounding-box-center"),
+ secondarySize );
+ gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("/tools/spray/pick_center", true) );
+ g_object_set_data( holder, "pick_center", act );
+ g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(sp_toggle_pick_center), holder) ;
+ gtk_action_group_add_action( mainActions, GTK_ACTION(act) );
+ }
/* Inverse Value Size */
{
- InkToggleAction* act = ink_toggle_action_new( "SprayOverPickInverseValueAction",
- _("Inversed pick value retaining color"),
- _("Inversed pick value retaining color"),
+ InkToggleAction* act = ink_toggle_action_new( "SprayPickInverseValueAction",
+ _("Inversed pick value, retaining color in advanced trace mode"),
+ _("Inversed pick value, retaining color in advanced trace mode"),
INKSCAPE_ICON("object-tweak-shrink"),
secondarySize );
- gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("/tools/spray/pickinversevalue", false) );
- g_object_set_data( holder, "pickinversevalue", act );
+ gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("/tools/spray/pick_inverse_value", false) );
+ g_object_set_data( holder, "pick_inverse_value", act );
g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(sp_toggle_pick_inverse_value), holder) ;
gtk_action_group_add_action( mainActions, GTK_ACTION(act) );
}
/* Pick Fill */
{
- InkToggleAction* act = ink_toggle_action_new( "SprayOverPickFillAction",
+ InkToggleAction* act = ink_toggle_action_new( "SprayPickFillAction",
_("Apply picked color to fill"),
_("Apply picked color to fill"),
INKSCAPE_ICON("paint-solid"),
secondarySize );
- gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("/tools/spray/pickfill", false) );
- g_object_set_data( holder, "pickfill", act );
+ gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("/tools/spray/pick_fill", false) );
+ g_object_set_data( holder, "pick_fill", act );
g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(sp_toggle_pick_fill), holder) ;
gtk_action_group_add_action( mainActions, GTK_ACTION(act) );
}
/* Pick Stroke */
{
- InkToggleAction* act = ink_toggle_action_new( "SprayOverPickStrokeAction",
+ InkToggleAction* act = ink_toggle_action_new( "SprayPickStrokeAction",
_("Apply picked color to stroke"),
_("Apply picked color to stroke"),
INKSCAPE_ICON("no-marker"),
secondarySize );
- gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("/tools/spray/pickstroke", false) );
- g_object_set_data( holder, "pickstroke", act );
+ gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("/tools/spray/pick_stroke", false) );
+ g_object_set_data( holder, "pick_stroke", act );
g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(sp_toggle_pick_stroke), holder) ;
gtk_action_group_add_action( mainActions, GTK_ACTION(act) );
}
-
- /* Visible */
+
+ /* Pick No Overlap */
+ {
+ InkToggleAction* act = ink_toggle_action_new( "SprayPickNoOverlapAction",
+ _("No overlap between colors"),
+ _("No overlap between colors"),
+ INKSCAPE_ICON("symbol-bigger"),
+ secondarySize );
+ gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("/tools/spray/pick_no_overlap", false) );
+ g_object_set_data( holder, "pick_no_overlap", act );
+ g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(sp_toggle_pick_no_overlap), holder) ;
+ gtk_action_group_add_action( mainActions, GTK_ACTION(act) );
+ }
+
+ /* Over Transparent */
+ {
+ InkToggleAction* act = ink_toggle_action_new( "SprayOverTransparentAction",
+ _("Apply over transparent areas"),
+ _("Apply over transparent areas"),
+ INKSCAPE_ICON("object-hidden"),
+ secondarySize );
+ gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("/tools/spray/over_transparent", true) );
+ g_object_set_data( holder, "over_transparent", act );
+ g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(sp_toggle_over_transparent), holder) ;
+ gtk_action_group_add_action( mainActions, GTK_ACTION(act) );
+ }
+
+ /* Over No Transparent */
{
- InkToggleAction* act = ink_toggle_action_new( "SprayOverVisibleAction",
- _("Apply only over non transparent areas"),
- _("Apply only over non transparent areas"),
+ InkToggleAction* act = ink_toggle_action_new( "SprayOverNoTransparentAction",
+ _("Apply over no transparent areas"),
+ _("Apply over no transparent areas"),
INKSCAPE_ICON("object-visible"),
secondarySize );
- gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("/tools/spray/visible", false) );
- g_object_set_data( holder, "visible", act );
- g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(sp_toggle_visible), holder) ;
+ gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("/tools/spray/over_no_transparent", true) );
+ g_object_set_data( holder, "over_no_transparent", act );
+ g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(sp_toggle_over_no_transparent), holder) ;
gtk_action_group_add_action( mainActions, GTK_ACTION(act) );
}
@@ -493,9 +586,9 @@ void sp_spray_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObj
_("Prevent overlapping objects"),
INKSCAPE_ICON("distribute-randomize"),
secondarySize );
- gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("/tools/spray/nooverlap", false) );
- g_object_set_data( holder, "nooverlap", act );
- g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(sp_toggle_nooverlap), holder) ;
+ gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("/tools/spray/no_overlap", false) );
+ g_object_set_data( holder, "no_overlap", act );
+ g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(sp_toggle_no_overlap), holder) ;
gtk_action_group_add_action( mainActions, GTK_ACTION(act) );
}
@@ -512,7 +605,7 @@ void sp_spray_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObj
g_object_set_data( holder, "offset", eact );
gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
}
- sp_stb_sensitivize(holder);
+ sp_spray_erase_sensitivize(holder, prefs->getInt("/tools/spray/mode") != 3);
}