summaryrefslogtreecommitdiffstats
path: root/src/widgets
diff options
context:
space:
mode:
authorJon A. Cruz <jon@joncruz.org>2010-03-09 10:12:09 +0000
committerJon A. Cruz <jon@joncruz.org>2010-03-09 10:12:09 +0000
commitbe18b3457f1b5c1205cdd45eae0a8a19b9c3e7b3 (patch)
tree30c0b9ea788d40e0011f36a06d776eef258fda22 /src/widgets
parentFixed the Win32 uninstaller. (diff)
downloadinkscape-be18b3457f1b5c1205cdd45eae0a8a19b9c3e7b3.tar.gz
inkscape-be18b3457f1b5c1205cdd45eae0a8a19b9c3e7b3.zip
Initial F&S dialog setting of swatch colors.
(bzr r9169)
Diffstat (limited to 'src/widgets')
-rw-r--r--src/widgets/fill-style.cpp16
-rw-r--r--src/widgets/gradient-selector.cpp32
-rw-r--r--src/widgets/gradient-selector.h4
-rw-r--r--src/widgets/gradient-toolbar.cpp4
-rw-r--r--src/widgets/gradient-vector.cpp10
-rw-r--r--src/widgets/gradient-vector.h7
-rw-r--r--src/widgets/paint-selector.cpp133
-rw-r--r--src/widgets/paint-selector.h2
-rw-r--r--src/widgets/stroke-style.cpp7
9 files changed, 140 insertions, 75 deletions
diff --git a/src/widgets/fill-style.cpp b/src/widgets/fill-style.cpp
index 0b08f36b5..87cd238a7 100644
--- a/src/widgets/fill-style.cpp
+++ b/src/widgets/fill-style.cpp
@@ -210,10 +210,11 @@ sp_fill_style_widget_update (SPWidget *spw)
SPPaintServer *server = SP_STYLE_FILL_SERVER (query);
- if (server && server->isSwatch()) {
- sp_paint_selector_set_swatch( psel, server );
+ if (server && SP_IS_GRADIENT(server) && SP_GRADIENT(server)->getVector()->isSwatch()) {
+ SPGradient *vector = SP_GRADIENT(server)->getVector();
+ sp_paint_selector_set_swatch( psel, vector );
} else if (SP_IS_LINEARGRADIENT (server)) {
- SPGradient *vector = sp_gradient_get_vector (SP_GRADIENT (server), FALSE);
+ SPGradient *vector = SP_GRADIENT(server)->getVector();
sp_paint_selector_set_gradient_linear (psel, vector);
SPLinearGradient *lg = SP_LINEARGRADIENT (server);
@@ -221,7 +222,7 @@ sp_fill_style_widget_update (SPWidget *spw)
SP_GRADIENT_UNITS (lg),
SP_GRADIENT_SPREAD (lg));
} else if (SP_IS_RADIALGRADIENT (server)) {
- SPGradient *vector = sp_gradient_get_vector (SP_GRADIENT (server), FALSE);
+ SPGradient *vector = SP_GRADIENT(server)->getVector();
sp_paint_selector_set_gradient_radial (psel, vector);
SPRadialGradient *rg = SP_RADIALGRADIENT (server);
@@ -411,8 +412,9 @@ sp_fill_style_widget_paint_changed ( SPPaintSelector *psel,
case SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR:
case SP_PAINT_SELECTOR_MODE_GRADIENT_RADIAL:
+ case SP_PAINT_SELECTOR_MODE_SWATCH:
if (items) {
- SPGradientType const gradient_type = ( psel->mode == SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR
+ SPGradientType const gradient_type = ( psel->mode != SP_PAINT_SELECTOR_MODE_GRADIENT_RADIAL
? SP_GRADIENT_TYPE_LINEAR
: SP_GRADIENT_TYPE_RADIAL );
@@ -518,10 +520,6 @@ sp_fill_style_widget_paint_changed ( SPPaintSelector *psel,
break;
- case SP_PAINT_SELECTOR_MODE_SWATCH:
- // TODO
- break;
-
case SP_PAINT_SELECTOR_MODE_UNSET:
if (items) {
SPCSSAttr *css = sp_repr_css_attr_new ();
diff --git a/src/widgets/gradient-selector.cpp b/src/widgets/gradient-selector.cpp
index ada9b2f09..bc2413730 100644
--- a/src/widgets/gradient-selector.cpp
+++ b/src/widgets/gradient-selector.cpp
@@ -120,7 +120,7 @@ sp_gradient_selector_class_init (SPGradientSelectorClass *klass)
static void
sp_gradient_selector_init (SPGradientSelector *sel)
{
- GtkWidget *hb, *l, *m, *mi;
+ GtkWidget *hb, *m, *mi;
sel->mode = SPGradientSelector::MODE_LINEAR;
@@ -182,9 +182,9 @@ sp_gradient_selector_init (SPGradientSelector *sel)
gtk_option_menu_set_menu (GTK_OPTION_MENU (sel->spread), m);
- l = gtk_label_new (_("Repeat:"));
- gtk_widget_show (l);
- gtk_box_pack_end (GTK_BOX (hb), l, FALSE, FALSE, 4);
+ sel->spreadLbl = gtk_label_new (_("Repeat:"));
+ gtk_widget_show(sel->spreadLbl);
+ gtk_box_pack_end(GTK_BOX(hb), sel->spreadLbl, FALSE, FALSE, 4);
}
static void
@@ -210,7 +210,28 @@ sp_gradient_selector_new (void)
void SPGradientSelector::setMode(SelectorMode mode)
{
- this->mode = mode;
+ if (mode != this->mode) {
+ this->mode = mode;
+ if (mode == MODE_SWATCH) {
+ if (spread) {
+ GtkWidget *parent = gtk_widget_get_parent(spread);
+ if (parent) {
+ gtk_container_remove(GTK_CONTAINER(parent), spread);
+ spread = 0;
+ }
+ }
+ if (spreadLbl) {
+ GtkWidget *parent = gtk_widget_get_parent(spreadLbl);
+ if (parent) {
+ gtk_container_remove(GTK_CONTAINER(parent), spreadLbl);
+ spreadLbl = 0;
+ }
+ }
+
+ SPGradientVectorSelector* vs = SP_GRADIENT_VECTOR_SELECTOR(vectors);
+ vs->setSwatched();
+ }
+ }
}
void SPGradientSelector::setUnits(SPGradientUnits units)
@@ -227,7 +248,6 @@ void SPGradientSelector::setSpread(SPGradientSpread spread)
SPGradientUnits SPGradientSelector::getUnits()
{
- //return (SPGradientUnits) sel->gradientUnits;
return gradientUnits;
}
diff --git a/src/widgets/gradient-selector.h b/src/widgets/gradient-selector.h
index 85674b4a9..25f561a6e 100644
--- a/src/widgets/gradient-selector.h
+++ b/src/widgets/gradient-selector.h
@@ -36,7 +36,8 @@ struct SPGradientSelector {
enum SelectorMode {
MODE_LINEAR,
- MODE_RADIAL
+ MODE_RADIAL,
+ MODE_SWATCH
};
SelectorMode mode;
@@ -56,6 +57,7 @@ struct SPGradientSelector {
/* Spread selector */
GtkWidget *spread;
+ GtkWidget *spreadLbl;
void setMode(SelectorMode mode);
void setUnits(SPGradientUnits units);
diff --git a/src/widgets/gradient-toolbar.cpp b/src/widgets/gradient-toolbar.cpp
index 784e3f20f..077e038e7 100644
--- a/src/widgets/gradient-toolbar.cpp
+++ b/src/widgets/gradient-toolbar.cpp
@@ -315,7 +315,7 @@ void gr_read_selection( Inkscape::Selection *selection,
if (style && (style->fill.isPaintserver())) {
SPObject *server = SP_OBJECT_STYLE_FILL_SERVER (item);
if (SP_IS_GRADIENT(server)) {
- SPGradient *gradient = sp_gradient_get_vector (SP_GRADIENT (server), false);
+ SPGradient *gradient = SP_GRADIENT(server)->getVector();
SPGradientSpread spread = sp_gradient_get_spread (SP_GRADIENT (server));
if (gradient && gradient->isSolid()) {
@@ -341,7 +341,7 @@ void gr_read_selection( Inkscape::Selection *selection,
if (style && (style->stroke.isPaintserver())) {
SPObject *server = SP_OBJECT_STYLE_STROKE_SERVER (item);
if (SP_IS_GRADIENT(server)) {
- SPGradient *gradient = sp_gradient_get_vector (SP_GRADIENT (server), false);
+ SPGradient *gradient = SP_GRADIENT(server)->getVector();
SPGradientSpread spread = sp_gradient_get_spread (SP_GRADIENT (server));
if (gradient && gradient->isSolid()) {
diff --git a/src/widgets/gradient-vector.cpp b/src/widgets/gradient-vector.cpp
index 751898f4f..147077f44 100644
--- a/src/widgets/gradient-vector.cpp
+++ b/src/widgets/gradient-vector.cpp
@@ -116,6 +116,8 @@ static void sp_gradient_vector_selector_init(SPGradientVectorSelector *gvs)
{
gvs->idlabel = TRUE;
+ gvs->swatched = false;
+
gvs->doc = NULL;
gvs->gr = NULL;
@@ -250,7 +252,7 @@ static void sp_gvs_rebuild_gui_full(SPGradientVectorSelector *gvs)
const GSList *gradients = sp_document_get_resource_list(SP_OBJECT_DOCUMENT(gvs->gr), "gradient");
for (const GSList *curr = gradients; curr; curr = curr->next) {
SPGradient* grad = SP_GRADIENT(curr->data);
- if (SP_GRADIENT_HAS_STOPS(grad) && !grad->isSwatch()) {
+ if (SP_GRADIENT_HAS_STOPS(grad) && (grad->isSwatch() == gvs->swatched)) {
gl = g_slist_prepend(gl, curr->data);
}
}
@@ -402,6 +404,12 @@ static void sp_gvs_defs_modified(SPObject */*defs*/, guint /*flags*/, SPGradient
sp_gvs_rebuild_gui_full(gvs);
}
+void SPGradientVectorSelector::setSwatched()
+{
+ swatched = true;
+ sp_gvs_rebuild_gui_full(this);
+}
+
/*##################################################################
### Vector Editing Widget
##################################################################*/
diff --git a/src/widgets/gradient-vector.h b/src/widgets/gradient-vector.h
index ea1f5159f..ceca9158c 100644
--- a/src/widgets/gradient-vector.h
+++ b/src/widgets/gradient-vector.h
@@ -6,7 +6,9 @@
*
* Author:
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Jon A. Cruz <jon@joncruz.org>
*
+ * Copyright (C) 2010 Jon A. Cruz
* Copyright (C) 2001-2002 Lauris Kaplinski
* Copyright (C) 2001 Ximian, Inc.
*
@@ -31,6 +33,8 @@ struct SPGradientVectorSelector {
guint idlabel : 1;
+ bool swatched;
+
SPDocument *doc;
SPGradient *gr;
@@ -40,6 +44,9 @@ struct SPGradientVectorSelector {
sigc::connection gradient_release_connection;
sigc::connection defs_release_connection;
sigc::connection defs_modified_connection;
+
+
+ void setSwatched();
};
struct SPGradientVectorSelectorClass {
diff --git a/src/widgets/paint-selector.cpp b/src/widgets/paint-selector.cpp
index 59312b0d2..5898563a5 100644
--- a/src/widgets/paint-selector.cpp
+++ b/src/widgets/paint-selector.cpp
@@ -92,6 +92,40 @@ static void sp_paint_selector_set_style_buttons(SPPaintSelector *psel, GtkWidget
static GtkVBoxClass *parent_class;
static guint psel_signals[LAST_SIGNAL] = {0};
+#ifdef SP_PS_VERBOSE
+static gchar const* modeStrings[] = {
+ "MODE_EMPTY",
+ "MODE_MULTIPLE",
+ "MODE_NONE",
+ "MODE_COLOR_RGB",
+ "MODE_COLOR_CMYK",
+ "MODE_GRADIENT_LINEAR",
+ "MODE_GRADIENT_RADIAL",
+ "MODE_PATTERN",
+ "MODE_SWATCH",
+ "MODE_UNSET",
+ ".",
+ ".",
+ ".",
+};
+#endif
+
+static bool isPaintModeGradient( SPPaintSelectorMode mode )
+{
+ bool isGrad = (mode == SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR) ||
+ (mode == SP_PAINT_SELECTOR_MODE_GRADIENT_RADIAL) ||
+ (mode == SP_PAINT_SELECTOR_MODE_SWATCH);
+
+ return isGrad;
+}
+
+static SPGradientSelector *getGradientFromData(SPPaintSelector *psel)
+{
+ gchar const* key = (psel->mode == SP_PAINT_SELECTOR_MODE_SWATCH) ? "swatch-selector" : "gradient-selector";
+ SPGradientSelector *grad = reinterpret_cast<SPGradientSelector*>(gtk_object_get_data(GTK_OBJECT(psel->selector), key));
+ return grad;
+}
+
GType sp_paint_selector_get_type(void)
{
static GtkType type = 0;
@@ -330,7 +364,7 @@ sp_paint_selector_set_mode(SPPaintSelector *psel, SPPaintSelectorMode mode)
if (psel->mode != mode) {
psel->update = TRUE;
#ifdef SP_PS_VERBOSE
- g_print("Mode change %d -> %d\n", psel->mode, mode);
+ g_print("Mode change %d -> %d %s -> %s\n", psel->mode, mode, modeStrings[psel->mode], modeStrings[mode]);
#endif
switch (mode) {
case SP_PAINT_SELECTOR_MODE_EMPTY:
@@ -407,24 +441,27 @@ sp_paint_selector_set_color_alpha(SPPaintSelector *psel, SPColor const *color, f
csel->base->setColorAlpha( *color, alpha );
}
-void sp_paint_selector_set_swatch(SPPaintSelector *psel, SPPaintServer */*server*/ )
+void sp_paint_selector_set_swatch(SPPaintSelector *psel, SPGradient *vector )
{
#ifdef SP_PS_VERBOSE
g_print("PaintSelector set SWATCH\n");
#endif
sp_paint_selector_set_mode(psel, SP_PAINT_SELECTOR_MODE_SWATCH);
+
+ SPGradientSelector *gsel = static_cast<SPGradientSelector*>(gtk_object_get_data(GTK_OBJECT(psel->selector), "swatch-selector"));
+
+ gsel->setVector((vector) ? SP_OBJECT_DOCUMENT(vector) : 0, vector);
}
void
sp_paint_selector_set_gradient_linear(SPPaintSelector *psel, SPGradient *vector)
{
- SPGradientSelector *gsel;
#ifdef SP_PS_VERBOSE
g_print("PaintSelector set GRADIENT LINEAR\n");
#endif
sp_paint_selector_set_mode(psel, SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR);
- gsel = (SPGradientSelector*)gtk_object_get_data(GTK_OBJECT(psel->selector), "gradient-selector");
+ SPGradientSelector *gsel = getGradientFromData(psel);
gsel->setMode(SPGradientSelector::MODE_LINEAR);
gsel->setVector((vector) ? SP_OBJECT_DOCUMENT(vector) : 0, vector);
@@ -433,39 +470,34 @@ sp_paint_selector_set_gradient_linear(SPPaintSelector *psel, SPGradient *vector)
void
sp_paint_selector_set_gradient_radial(SPPaintSelector *psel, SPGradient *vector)
{
- SPGradientSelector *gsel;
#ifdef SP_PS_VERBOSE
g_print("PaintSelector set GRADIENT RADIAL\n");
#endif
sp_paint_selector_set_mode(psel, SP_PAINT_SELECTOR_MODE_GRADIENT_RADIAL);
- gsel = (SPGradientSelector*)gtk_object_get_data(GTK_OBJECT(psel->selector), "gradient-selector");
+ SPGradientSelector *gsel = getGradientFromData(psel);
gsel->setMode(SPGradientSelector::MODE_RADIAL);
gsel->setVector((vector) ? SP_OBJECT_DOCUMENT(vector) : 0, vector);
}
-void
-sp_paint_selector_set_gradient_properties(SPPaintSelector *psel, SPGradientUnits units, SPGradientSpread spread)
+void sp_paint_selector_set_gradient_properties(SPPaintSelector *psel, SPGradientUnits units, SPGradientSpread spread)
{
- SPGradientSelector *gsel;
g_return_if_fail(SP_IS_PAINT_SELECTOR(psel));
- g_return_if_fail((psel->mode == SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR) ||
- (psel->mode == SP_PAINT_SELECTOR_MODE_GRADIENT_RADIAL));
- gsel = (SPGradientSelector*)gtk_object_get_data(GTK_OBJECT(psel->selector), "gradient-selector");
+ g_return_if_fail(isPaintModeGradient(psel->mode));
+
+ SPGradientSelector *gsel = getGradientFromData(psel);
gsel->setUnits(units);
gsel->setSpread(spread);
}
-void
-sp_paint_selector_get_gradient_properties(SPPaintSelector *psel, SPGradientUnits *units, SPGradientSpread *spread)
+void sp_paint_selector_get_gradient_properties(SPPaintSelector *psel, SPGradientUnits *units, SPGradientSpread *spread)
{
- SPGradientSelector *gsel;
g_return_if_fail(SP_IS_PAINT_SELECTOR(psel));
- g_return_if_fail((psel->mode == SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR) ||
- (psel->mode == SP_PAINT_SELECTOR_MODE_GRADIENT_RADIAL));
- gsel = (SPGradientSelector*)gtk_object_get_data(GTK_OBJECT(psel->selector), "gradient-selector");
+ g_return_if_fail(isPaintModeGradient(psel->mode));
+
+ SPGradientSelector *gsel = getGradientFromData(psel);
if (units) {
*units = gsel->getUnits();
}
@@ -491,24 +523,23 @@ sp_paint_selector_get_color_alpha(SPPaintSelector *psel, SPColor *color, gfloat
&& ( *alpha <= 1.0 ) ) );
}
-SPGradient *
-sp_paint_selector_get_gradient_vector(SPPaintSelector *psel)
+SPGradient *sp_paint_selector_get_gradient_vector(SPPaintSelector *psel)
{
- SPGradientSelector *gsel;
-
- g_return_val_if_fail((psel->mode == SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR) ||
- (psel->mode == SP_PAINT_SELECTOR_MODE_GRADIENT_RADIAL), NULL);
+ SPGradient* vect = 0;
- gsel = (SPGradientSelector*)gtk_object_get_data(GTK_OBJECT(psel->selector), "gradient-selector");
+ if (isPaintModeGradient(psel->mode)) {
+ SPGradientSelector *gsel = getGradientFromData(psel);
+ vect = gsel->getVector();
+ }
- return gsel->getVector();
+ return vect;
}
void
sp_gradient_selector_attrs_to_gradient(SPGradient *gr, SPPaintSelector *psel)
{
- SPGradientUnits units;
- SPGradientSpread spread;
+ SPGradientUnits units = SP_GRADIENT_UNITS_OBJECTBOUNDINGBOX;
+ SPGradientSpread spread = SP_GRADIENT_SPREAD_PAD;
sp_paint_selector_get_gradient_properties(psel, &units, &spread);
sp_gradient_set_units(gr, units);
sp_gradient_set_spread(gr, spread);
@@ -1066,38 +1097,30 @@ sp_paint_selector_get_pattern(SPPaintSelector *psel)
static void sp_paint_selector_set_mode_swatch(SPPaintSelector *psel, SPPaintSelectorMode mode)
{
if (mode == SP_PAINT_SELECTOR_MODE_SWATCH) {
- sp_paint_selector_set_style_buttons(psel, psel->swatch); // TODO swatch
+ sp_paint_selector_set_style_buttons(psel, psel->swatch);
}
gtk_widget_set_sensitive(psel->style, TRUE);
- GtkWidget *tbl = NULL;
+ GtkWidget *tbl = 0;
if (psel->mode == SP_PAINT_SELECTOR_MODE_SWATCH){
/* Already have pattern menu */
- tbl = (GtkWidget*)gtk_object_get_data(GTK_OBJECT(psel->selector), "swatch-selector");
+ tbl = static_cast<GtkWidget*>(gtk_object_get_data(GTK_OBJECT(psel->selector), "swatch-selector"));
} else {
sp_paint_selector_clear_frame(psel);
-
- /* Create vbox */
- tbl = gtk_vbox_new(FALSE, 4);
- gtk_widget_show(tbl);
-
- {
- GtkWidget *hb = gtk_hbox_new(FALSE, 0);
- GtkWidget *l = gtk_label_new(NULL);
- gtk_label_set_markup(GTK_LABEL(l), _("Represents a swatch fill."));
- gtk_label_set_line_wrap(GTK_LABEL(l), true);
- gtk_widget_set_size_request(l, 180, -1);
- gtk_box_pack_start(GTK_BOX(hb), l, TRUE, TRUE, AUX_BETWEEN_BUTTON_GROUPS);
- gtk_box_pack_start(GTK_BOX(tbl), hb, FALSE, FALSE, AUX_BETWEEN_BUTTON_GROUPS);
- }
-
- gtk_widget_show_all(tbl);
-
- gtk_container_add(GTK_CONTAINER(psel->frame), tbl);
- psel->selector = tbl;
- gtk_object_set_data(GTK_OBJECT(psel->selector), "swatch-selector", tbl);
+ /* Create new gradient selector */
+ GtkWidget *gsel = sp_gradient_selector_new();
+ SP_GRADIENT_SELECTOR(gsel)->setMode(SPGradientSelector::MODE_SWATCH);
+ gtk_widget_show(gsel);
+ gtk_signal_connect(GTK_OBJECT(gsel), "grabbed", GTK_SIGNAL_FUNC(sp_paint_selector_gradient_grabbed), psel);
+ gtk_signal_connect(GTK_OBJECT(gsel), "dragged", GTK_SIGNAL_FUNC(sp_paint_selector_gradient_dragged), psel);
+ gtk_signal_connect(GTK_OBJECT(gsel), "released", GTK_SIGNAL_FUNC(sp_paint_selector_gradient_released), psel);
+ gtk_signal_connect(GTK_OBJECT(gsel), "changed", GTK_SIGNAL_FUNC(sp_paint_selector_gradient_changed), psel);
+ // Pack everything to frame
+ gtk_container_add(GTK_CONTAINER(psel->frame), gsel);
+ psel->selector = gsel;
+ gtk_object_set_data(GTK_OBJECT(psel->selector), "swatch-selector", gsel);
gtk_frame_set_label(GTK_FRAME(psel->frame), _("Swatch fill"));
}
@@ -1145,7 +1168,13 @@ SPPaintSelectorMode sp_style_determine_paint_selector_mode(SPStyle *style, bool
} else if ( target.isPaintserver() ) {
SPPaintServer *server = isfill? SP_STYLE_FILL_SERVER(style) : SP_STYLE_STROKE_SERVER(style);
- if (server && server->isSwatch()) {
+
+#ifdef SP_PS_VERBOSE
+ g_message("==== server:%p %s grad:%s swatch:%s", server, server->getId(), (SP_IS_GRADIENT(server)?"Y":"n"), (SP_IS_GRADIENT(server) && SP_GRADIENT(server)->getVector()->isSwatch()?"Y":"n"));
+#endif // SP_PS_VERBOSE
+
+
+ if (server && SP_IS_GRADIENT(server) && SP_GRADIENT(server)->getVector()->isSwatch()) {
mode = SP_PAINT_SELECTOR_MODE_SWATCH;
} else if (SP_IS_LINEARGRADIENT(server)) {
mode = SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR;
diff --git a/src/widgets/paint-selector.h b/src/widgets/paint-selector.h
index 82dee4d16..2d7ac3011 100644
--- a/src/widgets/paint-selector.h
+++ b/src/widgets/paint-selector.h
@@ -101,7 +101,7 @@ void sp_paint_selector_set_gradient_linear (SPPaintSelector *psel, SPGradient *v
void sp_paint_selector_set_gradient_radial (SPPaintSelector *psel, SPGradient *vector);
-void sp_paint_selector_set_swatch(SPPaintSelector *psel, SPPaintServer *server );
+void sp_paint_selector_set_swatch(SPPaintSelector *psel, SPGradient *vector );
void sp_paint_selector_set_gradient_properties (SPPaintSelector *psel, SPGradientUnits units, SPGradientSpread spread);
void sp_paint_selector_get_gradient_properties (SPPaintSelector *psel, SPGradientUnits *units, SPGradientSpread *spread);
diff --git a/src/widgets/stroke-style.cpp b/src/widgets/stroke-style.cpp
index 51e70807c..a981934dd 100644
--- a/src/widgets/stroke-style.cpp
+++ b/src/widgets/stroke-style.cpp
@@ -205,9 +205,10 @@ sp_stroke_style_paint_update (SPWidget *spw)
SPPaintServer *server = SP_STYLE_STROKE_SERVER (query);
if (server && server->isSwatch()) {
- sp_paint_selector_set_swatch( psel, server );
+ SPGradient *vector = SP_GRADIENT(server)->getVector();
+ sp_paint_selector_set_swatch( psel, vector );
} else if (SP_IS_LINEARGRADIENT (server)) {
- SPGradient *vector = sp_gradient_get_vector (SP_GRADIENT (server), FALSE);
+ SPGradient *vector = SP_GRADIENT(server)->getVector();
sp_paint_selector_set_gradient_linear (psel, vector);
SPLinearGradient *lg = SP_LINEARGRADIENT (server);
@@ -215,7 +216,7 @@ sp_stroke_style_paint_update (SPWidget *spw)
SP_GRADIENT_UNITS (lg),
SP_GRADIENT_SPREAD (lg));
} else if (SP_IS_RADIALGRADIENT (server)) {
- SPGradient *vector = sp_gradient_get_vector (SP_GRADIENT (server), FALSE);
+ SPGradient *vector = SP_GRADIENT(server)->getVector();
sp_paint_selector_set_gradient_radial (psel, vector);
SPRadialGradient *rg = SP_RADIALGRADIENT (server);