X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fwidgets%2Fgradient-toolbar.cpp;h=44a2e87f824d2015977bb26d505cb7cc57721918;hb=7ec2a593a4a4046d6313fc868bd32ca1a5b2a119;hp=9dd43fb3114774d40cf0ae5784a7592f5a63b331;hpb=aaa77a55f097db8d9c526d7f7b17b58bf065830f;p=inkscape.git diff --git a/src/widgets/gradient-toolbar.cpp b/src/widgets/gradient-toolbar.cpp index 9dd43fb31..44a2e87f8 100644 --- a/src/widgets/gradient-toolbar.cpp +++ b/src/widgets/gradient-toolbar.cpp @@ -3,7 +3,9 @@ * * Authors: * bulia byak + * Johan Engelen * + * Copyright (C) 2007 Johan Engelen * Copyright (C) 2005 authors * * Released under GNU GPL, read the file 'COPYING' for more information @@ -74,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); } @@ -116,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; @@ -153,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); } @@ -168,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; @@ -255,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; @@ -263,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? @@ -289,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); @@ -317,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); @@ -341,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; @@ -351,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"); @@ -372,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); @@ -402,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; @@ -467,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); @@ -571,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); } @@ -585,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); } @@ -613,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); } @@ -627,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); }