X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fwidgets%2Fgradient-toolbar.cpp;h=44a2e87f824d2015977bb26d505cb7cc57721918;hb=7ec2a593a4a4046d6313fc868bd32ca1a5b2a119;hp=49e72bc2182f80b041ed8baf85a4145019ffcb4a;hpb=cd93ce9bf0509d74332b70b4d61c6ea23aa96693;p=inkscape.git diff --git a/src/widgets/gradient-toolbar.cpp b/src/widgets/gradient-toolbar.cpp index 49e72bc21..44a2e87f8 100644 --- a/src/widgets/gradient-toolbar.cpp +++ b/src/widgets/gradient-toolbar.cpp @@ -76,28 +76,28 @@ gr_apply_gradient_to_item (SPItem *item, SPGradient *gr, SPGradientType new_type SPStyle *style = SP_OBJECT_STYLE (item); if (do_fill) { - if (style && (style->fill.type == SP_PAINT_TYPE_PAINTSERVER) && + if (style && (style->fill.isPaintserver()) && SP_IS_GRADIENT (SP_OBJECT_STYLE_FILL_SERVER (item))) { SPObject *server = SP_OBJECT_STYLE_FILL_SERVER (item); if (SP_IS_LINEARGRADIENT (server)) { sp_item_set_gradient(item, gr, SP_GRADIENT_TYPE_LINEAR, true); } else if (SP_IS_RADIALGRADIENT (server)) { sp_item_set_gradient(item, gr, SP_GRADIENT_TYPE_RADIAL, true); - } + } } else if (new_fill) { sp_item_set_gradient(item, gr, new_type, true); } - } + } if (do_stroke) { - if (style && (style->stroke.type == SP_PAINT_TYPE_PAINTSERVER) && + if (style && (style->stroke.isPaintserver()) && SP_IS_GRADIENT (SP_OBJECT_STYLE_STROKE_SERVER (item))) { SPObject *server = SP_OBJECT_STYLE_STROKE_SERVER (item); if (SP_IS_LINEARGRADIENT (server)) { sp_item_set_gradient(item, gr, SP_GRADIENT_TYPE_LINEAR, false); } else if (SP_IS_RADIALGRADIENT (server)) { sp_item_set_gradient(item, gr, SP_GRADIENT_TYPE_RADIAL, false); - } + } } else if (!new_fill) { sp_item_set_gradient(item, gr, new_type, false); } @@ -118,7 +118,7 @@ gr_apply_gradient (Inkscape::Selection *selection, GrDrag *drag, SPGradient *gr) // GRADIENTFIXME: make this work for multiple selected draggers. - + // First try selected dragger if (drag && drag->selected) { GrDragger *dragger = (GrDragger*) drag->selected->data; @@ -155,7 +155,7 @@ gchar * gr_prepare_label (SPObject *obj) { const gchar *id = obj->defaultLabel(); - if (strlen(id) > 15 && (!strncmp (id, "#linearGradient", 15) || !strncmp (id, "#radialGradient", 15))) + if (strlen(id) > 15 && (!strncmp (id, "#linearGradient", 15) || !strncmp (id, "#radialGradient", 15))) return g_strdup_printf ("#%s", id+15); return g_strdup_printf ("%s", id); } @@ -170,11 +170,11 @@ gr_vector_list (SPDesktop *desktop, bool selection_empty, SPGradient *gr_selecte GSList *gl = NULL; const GSList *gradients = sp_document_get_resource_list (document, "gradient"); - for (const GSList *i = gradients; i != NULL; i = i->next) { + for (const GSList *i = gradients; i != NULL; i = i->next) { if (SP_GRADIENT_HAS_STOPS (i->data)) { gl = g_slist_prepend (gl, i->data); } - } + } gl = g_slist_reverse (gl); guint pos = 0; @@ -257,7 +257,7 @@ gr_vector_list (SPDesktop *desktop, bool selection_empty, SPGradient *gr_selecte /* Select the current gradient, or the Multi/Nothing line */ if (gr_multi || gr_selected == NULL) gtk_option_menu_set_history (GTK_OPTION_MENU (om), 0); - else + else gtk_option_menu_set_history (GTK_OPTION_MENU (om), pos); return om; @@ -265,7 +265,7 @@ gr_vector_list (SPDesktop *desktop, bool selection_empty, SPGradient *gr_selecte void -gr_read_selection (Inkscape::Selection *selection, GrDrag *drag, SPGradient **gr_selected, bool *gr_multi, SPGradientSpread *spr_selected, bool *spr_multi) +gr_read_selection (Inkscape::Selection *selection, GrDrag *drag, SPGradient **gr_selected, bool *gr_multi, SPGradientSpread *spr_selected, bool *spr_multi) { if (drag && drag->selected) { // GRADIENTFIXME: make this work for more than one selected dragger? @@ -291,14 +291,14 @@ gr_read_selection (Inkscape::Selection *selection, GrDrag *drag, SPGradient **gr } } return; - } + } // If no selected dragger, read desktop selection for (GSList const* i = selection->itemList(); i != NULL; i = i->next) { SPItem *item = SP_ITEM(i->data); SPStyle *style = SP_OBJECT_STYLE (item); - if (style && (style->fill.type == SP_PAINT_TYPE_PAINTSERVER)) { + 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); @@ -319,7 +319,7 @@ gr_read_selection (Inkscape::Selection *selection, GrDrag *drag, SPGradient **gr } } } - if (style && (style->stroke.type == SP_PAINT_TYPE_PAINTSERVER)) { + 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); @@ -343,7 +343,7 @@ gr_read_selection (Inkscape::Selection *selection, GrDrag *drag, SPGradient **gr } } -static void +static void gr_tb_selection_changed (Inkscape::Selection *, gpointer data) { GtkWidget *widget = (GtkWidget *) data; @@ -353,9 +353,9 @@ gr_tb_selection_changed (Inkscape::Selection *, gpointer data) return; Inkscape::Selection *selection = sp_desktop_selection (desktop); // take from desktop, not from args - if (!selection) + if (!selection) return; - + SPEventContext *ev = sp_desktop_event_context (desktop); GtkWidget *om = (GtkWidget *) g_object_get_data (G_OBJECT (widget), "menu"); @@ -374,7 +374,7 @@ gr_tb_selection_changed (Inkscape::Selection *, gpointer data) GtkWidget *buttons = (GtkWidget *) g_object_get_data (G_OBJECT(widget), "buttons"); gtk_widget_set_sensitive (buttons, (gr_selected && !gr_multi)); - + gtk_box_pack_start (GTK_BOX (widget), om, TRUE, TRUE, 0); gtk_widget_show_all (widget); @@ -404,32 +404,6 @@ gr_defs_modified (SPObject *defs, guint flags, GtkWidget *widget) gr_tb_selection_changed (NULL, (gpointer) widget); } -static void -gr_fork (GtkWidget *button, GtkWidget *widget) -{ - SPDesktop *desktop = (SPDesktop *) g_object_get_data (G_OBJECT(widget), "desktop"); - SPDocument *document = sp_desktop_document (desktop); - Inkscape::Selection *selection = sp_desktop_selection (desktop); - SPEventContext *ev = sp_desktop_event_context (desktop); - GtkWidget *om = (GtkWidget *) g_object_get_data (G_OBJECT(widget), "menu"); - - if (om && document) { - GtkWidget *i = gtk_menu_get_active (GTK_MENU (gtk_option_menu_get_menu (GTK_OPTION_MENU (om)))); - SPGradient *gr = (SPGradient *) g_object_get_data (G_OBJECT(i), "gradient"); - - if (gr) { - SPGradient *gr_new = sp_gradient_fork_vector_if_necessary (gr); - if (gr_new != gr) { - gr_apply_gradient (selection, ev? ev->get_drag() : NULL, gr_new); - sp_document_done (document, SP_VERB_CONTEXT_GRADIENT, - _("Duplicate gradient")); - } - } - } - - spinbutton_defocus(GTK_OBJECT(widget)); -} - static void gr_disconnect_sigc (GObject *obj, sigc::connection *connection) { connection->disconnect(); delete connection; @@ -469,30 +443,19 @@ gr_change_widget (SPDesktop *desktop) GtkTooltips *tt = gtk_tooltips_new(); gr_read_selection (selection, ev? ev->get_drag() : NULL, &gr_selected, &gr_multi, &spr_selected, &spr_multi); - + GtkWidget *widget = gtk_hbox_new(FALSE, FALSE); gtk_object_set_data(GTK_OBJECT(widget), "dtw", desktop->canvas); g_object_set_data (G_OBJECT (widget), "desktop", desktop); GtkWidget *om = gr_vector_list (desktop, selection->isEmpty(), gr_selected, gr_multi); g_object_set_data (G_OBJECT (widget), "menu", om); - + gtk_box_pack_start (GTK_BOX (widget), om, TRUE, TRUE, 0); { GtkWidget *buttons = gtk_hbox_new(FALSE, 1); - /* Fork */ - { - GtkWidget *hb = gtk_hbox_new(FALSE, 1); - GtkWidget *b = gtk_button_new_with_label(_("Duplicate")); - gtk_tooltips_set_tip(tt, b, _("If the gradient is used by more than one object, create a copy of it for the selected object(s)"), NULL); - gtk_widget_show(b); - gtk_container_add(GTK_CONTAINER(hb), b); - gtk_signal_connect(GTK_OBJECT(b), "clicked", GTK_SIGNAL_FUNC(gr_fork), widget); - gtk_box_pack_start (GTK_BOX(buttons), hb, FALSE, FALSE, 0); - } - /* Edit... */ { GtkWidget *hb = gtk_hbox_new(FALSE, 1); @@ -573,7 +536,7 @@ sp_gradient_toolbox_new(SPDesktop *desktop) tt); g_signal_connect_after (G_OBJECT (button), "clicked", G_CALLBACK (gr_toggle_type), tbl); g_object_set_data(G_OBJECT(tbl), "linear", button); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), prefs_get_int_attribute ("tools.gradient", "newgradient", SP_GRADIENT_TYPE_LINEAR) == SP_GRADIENT_TYPE_LINEAR); gtk_box_pack_start(GTK_BOX(cbox), button, FALSE, FALSE, 0); } @@ -587,7 +550,7 @@ sp_gradient_toolbox_new(SPDesktop *desktop) tt); g_signal_connect_after (G_OBJECT (button), "clicked", G_CALLBACK (gr_toggle_type), tbl); g_object_set_data(G_OBJECT(tbl), "radial", button); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), prefs_get_int_attribute ("tools.gradient", "newgradient", SP_GRADIENT_TYPE_LINEAR) == SP_GRADIENT_TYPE_RADIAL); gtk_box_pack_start(GTK_BOX(cbox), button, FALSE, FALSE, 0); } @@ -615,7 +578,7 @@ sp_gradient_toolbox_new(SPDesktop *desktop) tt); g_signal_connect_after (G_OBJECT (button), "clicked", G_CALLBACK (gr_toggle_fillstroke), tbl); g_object_set_data(G_OBJECT(tbl), "fill", button); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), prefs_get_int_attribute ("tools.gradient", "newfillorstroke", 1) == 1); gtk_box_pack_start(GTK_BOX(cbox), button, FALSE, FALSE, 0); } @@ -629,7 +592,7 @@ sp_gradient_toolbox_new(SPDesktop *desktop) tt); g_signal_connect_after (G_OBJECT (button), "clicked", G_CALLBACK (gr_toggle_fillstroke), tbl); g_object_set_data(G_OBJECT(tbl), "stroke", button); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), prefs_get_int_attribute ("tools.gradient", "newfillorstroke", 1) == 0); gtk_box_pack_start(GTK_BOX(cbox), button, FALSE, FALSE, 0); }