From 3b09d1b8be1798131ce372d1eb308160c2383f88 Mon Sep 17 00:00:00 2001 From: John Smith Date: Wed, 25 Apr 2012 13:52:00 +0900 Subject: Fix for 950677 : Add link option to gradient toolbar (bzr r11291) --- src/gradient-drag.cpp | 2 ++ src/widgets/gradient-toolbar.cpp | 30 ++++++++++++++++++++++++++++++ src/widgets/toolbox.cpp | 1 + 3 files changed, 33 insertions(+) (limited to 'src') diff --git a/src/gradient-drag.cpp b/src/gradient-drag.cpp index ad66b258a..c1f9251df 100644 --- a/src/gradient-drag.cpp +++ b/src/gradient-drag.cpp @@ -1615,6 +1615,7 @@ void GrDrag::addDragger(GrDraggable *draggable) */ void GrDrag::addDraggersRadial(SPRadialGradient *rg, SPItem *item, bool fill_or_stroke) { + rg->ensureVector(); addDragger (new GrDraggable (item, POINT_RG_CENTER, 0, fill_or_stroke)); guint num = rg->vector.stops.size(); if (num > 2) { @@ -1637,6 +1638,7 @@ void GrDrag::addDraggersRadial(SPRadialGradient *rg, SPItem *item, bool fill_or_ */ void GrDrag::addDraggersLinear(SPLinearGradient *lg, SPItem *item, bool fill_or_stroke) { + lg->ensureVector(); addDragger (new GrDraggable (item, POINT_LG_BEGIN, 0, fill_or_stroke)); guint num = lg->vector.stops.size(); if (num > 2) { diff --git a/src/widgets/gradient-toolbar.cpp b/src/widgets/gradient-toolbar.cpp index e239457fd..a7b97c21a 100644 --- a/src/widgets/gradient-toolbar.cpp +++ b/src/widgets/gradient-toolbar.cpp @@ -635,6 +635,20 @@ gr_remove_stop (GtkWidget */*button*/, GtkWidget *vb) } +static void +gr_linked_changed (GtkToggleAction *act, gpointer data) +{ + gboolean active = gtk_toggle_action_get_active( act ); + if ( active ) { + g_object_set( G_OBJECT(act), "iconId", INKSCAPE_ICON("object-locked"), NULL ); + } else { + g_object_set( G_OBJECT(act), "iconId", INKSCAPE_ICON("object-unlocked"), NULL ); + } + + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + prefs->setBool("/options/forkgradientvectors/value", !active); +} + static void gr_reverse (GtkWidget */*button*/, gpointer data) { @@ -1264,6 +1278,22 @@ void sp_gradient_toolbox_prep(SPDesktop * desktop, GtkActionGroup* mainActions, } + // Gradients Linked toggle + { + InkToggleAction* itact = ink_toggle_action_new( "GradientEditLinkAction", + _("Link gradients"), + _("Link gradients to change all related gradients"), + INKSCAPE_ICON("object-unlocked"), + secondarySize ); + g_object_set( itact, "short_label", "Lock", NULL ); + g_signal_connect_after( G_OBJECT(itact), "toggled", G_CALLBACK(gr_linked_changed), desktop) ; + gtk_action_group_add_action( mainActions, GTK_ACTION(itact) ); + + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + bool linkedmode = prefs->getBool("/options/forkgradientvectors/value", true); + gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(itact), !linkedmode ); + } + Inkscape::Selection *selection = sp_desktop_selection (desktop); SPDocument *document = sp_desktop_document (desktop); diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index 7491c9c28..7d73c042b 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -538,6 +538,7 @@ static gchar const * ui_descr = " " " " " " + " " " " " " " " -- cgit v1.2.3