index da84eafca659ad5161ed310e53588293adcbd6c4..49e72bc2182f80b041ed8baf85a4145019ffcb4a 100644 (file)
*
* Authors:
* bulia byak <bulia@dr.com>
+ * Johan Engelen <j.b.c.engelen@ewi.utwente.nl>
*
+ * Copyright (C) 2007 Johan Engelen
* Copyright (C) 2005 authors
*
* Released under GNU GPL, read the file 'COPYING' for more information
@@ -114,9 +116,12 @@ gr_apply_gradient (Inkscape::Selection *selection, GrDrag *drag, SPGradient *gr)
SPGradientType new_type = (SPGradientType) prefs_get_int_attribute ("tools.gradient", "newgradient", SP_GRADIENT_TYPE_LINEAR);
guint new_fill = prefs_get_int_attribute ("tools.gradient", "newfillorstroke", 1);
+
+ // GRADIENTFIXME: make this work for multiple selected draggers.
+
// First try selected dragger
if (drag && drag->selected) {
- GrDragger *dragger = drag->selected;
+ GrDragger *dragger = (GrDragger*) drag->selected->data;
for (GSList const* i = dragger->draggables; i != NULL; i = i->next) { // for all draggables of dragger
GrDraggable *draggable = (GrDraggable *) i->data;
gr_apply_gradient_to_item (draggable->item, gr, new_type, new_fill, draggable->fill_or_stroke, !draggable->fill_or_stroke);
@@ -126,7 +131,7 @@ gr_apply_gradient (Inkscape::Selection *selection, GrDrag *drag, SPGradient *gr)
// If no drag or no dragger selected, act on selection
for (GSList const* i = selection->itemList(); i != NULL; i = i->next) {
- gr_apply_gradient_to_item (SP_ITEM(i->data), gr, new_type, new_fill, true, true);
+ gr_apply_gradient_to_item (SP_ITEM(i->data), gr, new_type, new_fill, new_fill, !new_fill);
}
}
gr_apply_gradient (selection, ev? ev->get_drag() : NULL, gr);
sp_document_done (sp_desktop_document (desktop), SP_VERB_CONTEXT_GRADIENT,
- /* TODO: annotate */ "gradient-toolbar.cpp:146");
+ _("Assign gradient to object"));
}
gchar *
gr_read_selection (Inkscape::Selection *selection, GrDrag *drag, SPGradient **gr_selected, bool *gr_multi, SPGradientSpread *spr_selected, bool *spr_multi)
{
if (drag && drag->selected) {
- GrDragger *dragger = drag->selected;
+ // GRADIENTFIXME: make this work for more than one selected dragger?
+ GrDragger *dragger = (GrDragger*) drag->selected->data;
for (GSList const* i = dragger->draggables; i != NULL; i = i->next) { // for all draggables of dragger
GrDraggable *draggable = (GrDraggable *) i->data;
SPGradient *gradient = sp_item_gradient_get_vector (draggable->item, draggable->fill_or_stroke);
if (gr_new != gr) {
gr_apply_gradient (selection, ev? ev->get_drag() : NULL, gr_new);
sp_document_done (document, SP_VERB_CONTEXT_GRADIENT,
- /* TODO: annotate */ "gradient-toolbar.cpp:419");
+ _("Duplicate gradient"));
}
}
}
delete connection;
}
-static void gr_disconnect_gsignal (GObject *widget, gpointer defs) {
- if (defs && G_IS_OBJECT(defs))
- sp_signal_disconnect_by_data (defs, widget);
-}
-
-
static void
gr_edit (GtkWidget *button, GtkWidget *widget)
{
g_signal_connect(G_OBJECT(widget), "destroy", G_CALLBACK(gr_disconnect_sigc), conn3);
// connect to release and modified signals of the defs (i.e. when someone changes gradient)
- g_signal_connect (G_OBJECT (SP_DOCUMENT_DEFS (document)), "release", G_CALLBACK (gr_defs_release), widget);
- g_signal_connect (G_OBJECT (SP_DOCUMENT_DEFS (document)), "modified", G_CALLBACK (gr_defs_modified), widget);
+ sigc::connection *release_connection = new sigc::connection();
+ *release_connection = SP_DOCUMENT_DEFS(document)->connectRelease(sigc::bind<1>(sigc::ptr_fun(&gr_defs_release), widget));
+ sigc::connection *modified_connection = new sigc::connection();
+ *modified_connection = SP_DOCUMENT_DEFS(document)->connectModified(sigc::bind<2>(sigc::ptr_fun(&gr_defs_modified), widget));
// when widget is destroyed, disconnect
- g_signal_connect(G_OBJECT(widget), "destroy", G_CALLBACK(gr_disconnect_gsignal), G_OBJECT (SP_DOCUMENT_DEFS (document)));
- g_signal_connect(G_OBJECT(widget), "destroy", G_CALLBACK(gr_disconnect_gsignal), G_OBJECT (SP_DOCUMENT_DEFS (document)));
+ g_signal_connect(G_OBJECT(widget), "destroy", G_CALLBACK(gr_disconnect_sigc), release_connection);
+ g_signal_connect(G_OBJECT(widget), "destroy", G_CALLBACK(gr_disconnect_sigc), modified_connection);
gtk_widget_show_all (widget);
return widget;