From adc17549c5f0485a30a87e7674c7779ef3155d6c Mon Sep 17 00:00:00 2001 From: Kris De Gussem Date: Sat, 12 May 2012 13:16:29 +0200 Subject: syntx of null pointer dereference checks (bzr r11358) --- src/widgets/gradient-vector.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'src/widgets/gradient-vector.cpp') diff --git a/src/widgets/gradient-vector.cpp b/src/widgets/gradient-vector.cpp index 8348f7045..60436c404 100644 --- a/src/widgets/gradient-vector.cpp +++ b/src/widgets/gradient-vector.cpp @@ -109,13 +109,13 @@ static void sp_gradient_vector_selector_class_init(SPGradientVectorSelectorClass parent_class = static_cast(g_type_class_peek_parent(klass)); signals[VECTOR_SET] = g_signal_new( "vector_set", - G_TYPE_FROM_CLASS(object_class), - G_SIGNAL_RUN_LAST, + G_TYPE_FROM_CLASS(object_class), + G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(SPGradientVectorSelectorClass, vector_set), - NULL, NULL, - g_cclosure_marshal_VOID__POINTER, - G_TYPE_NONE, 1, - G_TYPE_POINTER); + NULL, NULL, + g_cclosure_marshal_VOID__POINTER, + G_TYPE_NONE, 1, + G_TYPE_POINTER); object_class->destroy = sp_gradient_vector_selector_destroy; } @@ -605,7 +605,7 @@ static void sp_grad_edit_combo_box_changed (GtkComboBox * /*widget*/, GtkWidget blocked = TRUE; - SPColorSelector *csel = (SPColorSelector*)g_object_get_data(G_OBJECT(tbl), "cselector"); + SPColorSelector *csel = static_cast(g_object_get_data(G_OBJECT(tbl), "cselector")); // set its color, from the stored array csel->base->setColorAlpha( stop->getEffectiveColor(), stop->opacity ); GtkWidget *offspin = GTK_WIDGET(g_object_get_data(G_OBJECT(tbl), "offspn")); @@ -1137,10 +1137,10 @@ static void sp_gradient_vector_widget_destroy(GtkObject *object, gpointer /*data release_connection->disconnect(); modified_connection->disconnect(); sp_signal_disconnect_by_data(gradient, object); - } - if (gradient && gradient->getRepr()) { - sp_repr_remove_listener_by_data(gradient->getRepr(), object); + if (gradient->getRepr()) { + sp_repr_remove_listener_by_data(gradient->getRepr(), object); + } } } -- cgit v1.2.3 From 3460685415e0e80474cb5ef9cb4b37dbc3aae705 Mon Sep 17 00:00:00 2001 From: John Smith Date: Tue, 15 May 2012 17:11:19 +0900 Subject: Fix for 950677 : Ellipse text if gradient name too long (bzr r11365) --- src/widgets/gradient-vector.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'src/widgets/gradient-vector.cpp') diff --git a/src/widgets/gradient-vector.cpp b/src/widgets/gradient-vector.cpp index 60436c404..f37455afc 100644 --- a/src/widgets/gradient-vector.cpp +++ b/src/widgets/gradient-vector.cpp @@ -265,8 +265,22 @@ gchar *gr_prepare_label (SPObject *obj) { const gchar *id = obj->defaultLabel(); 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); + return gr_ellipse_text (g_strdup_printf ("#%s", id+15), 35); + return gr_ellipse_text (id, 35); +} + +/* + * Ellipse text if longer than maxlen, "30% start text + ... + ~70% end text" + * Text should be > length 8 or just return the original text + */ +gchar *gr_ellipse_text (gchar const *src, guint maxlen) +{ + guint start = (guint) maxlen / 3; + if (strlen(src) > maxlen && maxlen > 8) + return g_strdup_printf ("%s...%s", g_strndup(src, start), src+strlen(src)-(maxlen-start-3)); + + return g_strdup (src); + } static void sp_gvs_rebuild_gui_full(SPGradientVectorSelector *gvs) -- cgit v1.2.3 From 15256efe98e5a35b9195d91e4d586a32d9967eb1 Mon Sep 17 00:00:00 2001 From: John Smith Date: Thu, 17 May 2012 09:54:20 +0900 Subject: Fix for 950677 : ellipsize function with ustring (bzr r11371) --- src/widgets/gradient-vector.cpp | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) (limited to 'src/widgets/gradient-vector.cpp') diff --git a/src/widgets/gradient-vector.cpp b/src/widgets/gradient-vector.cpp index f37455afc..64b2d3a5e 100644 --- a/src/widgets/gradient-vector.cpp +++ b/src/widgets/gradient-vector.cpp @@ -261,26 +261,26 @@ SPGradient *sp_gradient_vector_selector_get_gradient(SPGradientVectorSelector *g return gvs->gr; } -gchar *gr_prepare_label (SPObject *obj) +Glib::ustring gr_prepare_label (SPObject *obj) { const gchar *id = obj->defaultLabel(); if (strlen(id) > 15 && (!strncmp (id, "#linearGradient", 15) || !strncmp (id, "#radialGradient", 15))) - return gr_ellipse_text (g_strdup_printf ("#%s", id+15), 35); - return gr_ellipse_text (id, 35); + return gr_ellipsize_text (g_strdup_printf ("#%s", id+15), 35); + return gr_ellipsize_text (id, 35); } /* * Ellipse text if longer than maxlen, "30% start text + ... + ~70% end text" * Text should be > length 8 or just return the original text */ -gchar *gr_ellipse_text (gchar const *src, guint maxlen) +Glib::ustring gr_ellipsize_text(Glib::ustring const &src, size_t maxlen) { - guint start = (guint) maxlen / 3; - if (strlen(src) > maxlen && maxlen > 8) - return g_strdup_printf ("%s...%s", g_strndup(src, start), src+strlen(src)-(maxlen-start-3)); - - return g_strdup (src); - + if (src.length() > maxlen && maxlen > 8) { + size_t p1 = (size_t) maxlen / 3; + size_t p2 = (size_t) src.length() - (maxlen-p1-3); // 3 ellipses + return src.substr(0, p1) + "..." + src.substr(p2); + } + return src; } static void sp_gvs_rebuild_gui_full(SPGradientVectorSelector *gvs) @@ -330,11 +330,10 @@ static void sp_gvs_rebuild_gui_full(SPGradientVectorSelector *gvs) /* Gradient destroy */ /* Gradient name change */ - gchar *label = gr_prepare_label(gr); + Glib::ustring label = gr_prepare_label(gr); GdkPixbuf *pixb = sp_gradient_to_pixbuf (gr, 64, 18); gtk_list_store_append (gvs->store, &iter); - gtk_list_store_set (gvs->store, &iter, 0, pixb, 1, label, 2, gr, -1); - g_free (label); + gtk_list_store_set (gvs->store, &iter, 0, pixb, 1, label.c_str(), 2, gr, -1); if (gr == gvs->gr) { pos = idx; -- cgit v1.2.3 From 3f67967cd8a4852de65eefb4d1d142f807642be2 Mon Sep 17 00:00:00 2001 From: John Smith Date: Sun, 20 May 2012 13:23:31 +0900 Subject: Fix for 973195 : Limit width of color profile labels (bzr r11388) --- src/widgets/gradient-vector.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/widgets/gradient-vector.cpp') diff --git a/src/widgets/gradient-vector.cpp b/src/widgets/gradient-vector.cpp index 64b2d3a5e..e396c9768 100644 --- a/src/widgets/gradient-vector.cpp +++ b/src/widgets/gradient-vector.cpp @@ -270,15 +270,15 @@ Glib::ustring gr_prepare_label (SPObject *obj) } /* - * Ellipse text if longer than maxlen, "30% start text + ... + ~70% end text" + * Ellipse text if longer than maxlen, "50% start text + ... + ~50% end text" * Text should be > length 8 or just return the original text */ Glib::ustring gr_ellipsize_text(Glib::ustring const &src, size_t maxlen) { if (src.length() > maxlen && maxlen > 8) { - size_t p1 = (size_t) maxlen / 3; - size_t p2 = (size_t) src.length() - (maxlen-p1-3); // 3 ellipses - return src.substr(0, p1) + "..." + src.substr(p2); + size_t p1 = (size_t) maxlen / 2; + size_t p2 = (size_t) src.length() - (maxlen - p1 - 1); + return src.substr(0, p1) + "…" + src.substr(p2); } return src; } -- cgit v1.2.3 From 9f817dd511e10bdd1b32760f084ce3886405bc4a Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Sat, 9 Jun 2012 15:29:23 +0100 Subject: Drop GtkObject usage in gradient-vector (bzr r11472) --- src/widgets/gradient-vector.cpp | 65 ++++++++++++++++++++++++++++++----------- 1 file changed, 48 insertions(+), 17 deletions(-) (limited to 'src/widgets/gradient-vector.cpp') diff --git a/src/widgets/gradient-vector.cpp b/src/widgets/gradient-vector.cpp index e396c9768..c875ab61c 100644 --- a/src/widgets/gradient-vector.cpp +++ b/src/widgets/gradient-vector.cpp @@ -56,7 +56,12 @@ enum { static void sp_gradient_vector_selector_class_init(SPGradientVectorSelectorClass *klass); static void sp_gradient_vector_selector_init(SPGradientVectorSelector *gvs); + +#if GTK_CHECK_VERSION(3,0,0) +static void sp_gradient_vector_selector_destroy(GtkWidget *object); +#else static void sp_gradient_vector_selector_destroy(GtkObject *object); +#endif static void sp_gvs_gradient_release(SPObject *obj, SPGradientVectorSelector *gvs); static void sp_gvs_defs_release(SPObject *defs, SPGradientVectorSelector *gvs); @@ -102,22 +107,25 @@ GType sp_gradient_vector_selector_get_type(void) static void sp_gradient_vector_selector_class_init(SPGradientVectorSelectorClass *klass) { - GtkObjectClass *object_class; - - object_class = GTK_OBJECT_CLASS(klass); - + GObjectClass *gobject_class = G_OBJECT_CLASS(klass); parent_class = static_cast(g_type_class_peek_parent(klass)); signals[VECTOR_SET] = g_signal_new( "vector_set", - G_TYPE_FROM_CLASS(object_class), - G_SIGNAL_RUN_LAST, + G_TYPE_FROM_CLASS(gobject_class), + G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(SPGradientVectorSelectorClass, vector_set), - NULL, NULL, - g_cclosure_marshal_VOID__POINTER, - G_TYPE_NONE, 1, - G_TYPE_POINTER); + NULL, NULL, + g_cclosure_marshal_VOID__POINTER, + G_TYPE_NONE, 1, + G_TYPE_POINTER); +#if GTK_CHECK_VERSION(3,0,0) + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass); + widget_class->destroy = sp_gradient_vector_selector_destroy; +#else + GtkObjectClass *object_class = GTK_OBJECT_CLASS(klass); object_class->destroy = sp_gradient_vector_selector_destroy; +#endif } static void sp_gradient_vector_selector_init(SPGradientVectorSelector *gvs) @@ -152,7 +160,11 @@ static void sp_gradient_vector_selector_init(SPGradientVectorSelector *gvs) } +#if GTK_CHECK_VERSION(3,0,0) +static void sp_gradient_vector_selector_destroy(GtkWidget *object) +#else static void sp_gradient_vector_selector_destroy(GtkObject *object) +#endif { SPGradientVectorSelector *gvs = SP_GRADIENT_VECTOR_SELECTOR(object); @@ -171,9 +183,15 @@ static void sp_gradient_vector_selector_destroy(GtkObject *object) gvs->defs_release_connection.~connection(); gvs->defs_modified_connection.~connection(); +#if GTK_CHECK_VERSION(3,0,0) + if ((reinterpret_cast(parent_class))->destroy) { + (* (reinterpret_cast(parent_class))->destroy) (object); + } +#else if ((reinterpret_cast(parent_class))->destroy) { (* (reinterpret_cast(parent_class))->destroy) (object); } +#endif } GtkWidget *sp_gradient_vector_selector_new(SPDocument *doc, SPGradient *gr) @@ -456,13 +474,19 @@ static GtkWidget *sp_gradient_vector_widget_new(SPGradient *gradient, SPStop *st static void sp_gradient_vector_widget_load_gradient(GtkWidget *widget, SPGradient *gradient); static gint sp_gradient_vector_dialog_delete(GtkWidget *widget, GdkEvent *event, GtkWidget *dialog); -static void sp_gradient_vector_dialog_destroy(GtkObject *object, gpointer data); +#if GTK_CHECK_VERSION(3,0,0) +static void sp_gradient_vector_dialog_destroy(GtkWidget *object, gpointer data); +static void sp_gradient_vector_widget_destroy(GtkWidget *object, gpointer data); +#else +static void sp_gradient_vector_dialog_destroy(GtkObject *object, gpointer data); static void sp_gradient_vector_widget_destroy(GtkObject *object, gpointer data); +#endif + static void sp_gradient_vector_gradient_release(SPObject *obj, GtkWidget *widget); static void sp_gradient_vector_gradient_modified(SPObject *obj, guint flags, GtkWidget *widget); -static void sp_gradient_vector_color_dragged(SPColorSelector *csel, GtkObject *object); -static void sp_gradient_vector_color_changed(SPColorSelector *csel, GtkObject *object); +static void sp_gradient_vector_color_dragged(SPColorSelector *csel, GObject *object); +static void sp_gradient_vector_color_changed(SPColorSelector *csel, GObject *object); static void update_stop_list( GtkWidget *vb, SPGradient *gradient, SPStop *new_stop); static gboolean blocked = FALSE; @@ -1107,7 +1131,11 @@ static void sp_gradient_vector_widget_load_gradient(GtkWidget *widget, SPGradien blocked = FALSE; } -static void sp_gradient_vector_dialog_destroy(GtkObject */*object*/, gpointer /*data*/) +#if GTK_CHECK_VERSION(3,0,0) +static void sp_gradient_vector_dialog_destroy(GtkWidget * /*object*/, gpointer /*data*/) +#else +static void sp_gradient_vector_dialog_destroy(GtkObject * /*object*/, gpointer /*data*/) +#endif { sp_signal_disconnect_by_data(INKSCAPE, dlg); wd.win = dlg = NULL; @@ -1136,8 +1164,11 @@ static gboolean sp_gradient_vector_dialog_delete(GtkWidget */*widget*/, GdkEvent } /* Widget destroy handler */ - +#if GTK_CHECK_VERSION(3,0,0) +static void sp_gradient_vector_widget_destroy(GtkWidget *object, gpointer /*data*/) +#else static void sp_gradient_vector_widget_destroy(GtkObject *object, gpointer /*data*/) +#endif { SPObject *gradient = reinterpret_cast(g_object_get_data(G_OBJECT(object), "gradient")); @@ -1172,7 +1203,7 @@ static void sp_gradient_vector_gradient_modified(SPObject *object, guint /*flags } } -static void sp_gradient_vector_color_dragged(SPColorSelector *csel, GtkObject *object) +static void sp_gradient_vector_color_dragged(SPColorSelector *csel, GObject *object) { SPGradient *gradient, *ngr; @@ -1206,7 +1237,7 @@ static void sp_gradient_vector_color_dragged(SPColorSelector *csel, GtkObject *o blocked = FALSE; } -static void sp_gradient_vector_color_changed(SPColorSelector *csel, GtkObject *object) +static void sp_gradient_vector_color_changed(SPColorSelector *csel, GObject *object) { if (blocked) { return; -- cgit v1.2.3 From 17c1fe80afbaa85bc7d8caf8516a41ec1b89fbf4 Mon Sep 17 00:00:00 2001 From: John Smith Date: Tue, 26 Jun 2012 16:47:04 +0900 Subject: Fix for 722017 : Better Gradient Window (bzr r11515) --- src/widgets/gradient-vector.cpp | 191 +++++++++++++++++++++++----------------- 1 file changed, 108 insertions(+), 83 deletions(-) (limited to 'src/widgets/gradient-vector.cpp') diff --git a/src/widgets/gradient-vector.cpp b/src/widgets/gradient-vector.cpp index c875ab61c..db8c76b9b 100644 --- a/src/widgets/gradient-vector.cpp +++ b/src/widgets/gradient-vector.cpp @@ -30,11 +30,13 @@ #include #include "macros.h" #include +#include #include "../widgets/gradient-image.h" #include "../inkscape.h" #include "../document-private.h" #include "../gradient-chemistry.h" #include "../helper/window.h" +#include "io/resource.h" #include "xml/repr.h" @@ -42,6 +44,12 @@ #include "../preferences.h" #include "svg/css-ostringstream.h" #include "sp-stop.h" +#include "selection-chemistry.h" +#include "style.h" +#include "sp-linear-gradient.h" +#include "sp-radial-gradient.h" +#include "desktop.h" +#include "layer-manager.h" #include #include @@ -68,8 +76,9 @@ static void sp_gvs_defs_release(SPObject *defs, SPGradientVectorSelector *gvs); static void sp_gvs_defs_modified(SPObject *defs, guint flags, SPGradientVectorSelector *gvs); static void sp_gvs_rebuild_gui_full(SPGradientVectorSelector *gvs); -static void gr_combo_box_changed (GtkComboBox *widget, SPGradientVectorSelector *gvs); static SPStop *get_selected_stop( GtkWidget *vb); +void gr_get_usage_counts(SPDocument *doc, std::map *mapUsageCount ); +unsigned long sp_gradient_to_hhssll(SPGradient *gr); static GtkVBoxClass *parent_class; static guint signals[LAST_SIGNAL] = {0}; @@ -141,22 +150,9 @@ static void sp_gradient_vector_selector_init(SPGradientVectorSelector *gvs) new (&gvs->defs_release_connection) sigc::connection(); new (&gvs->defs_modified_connection) sigc::connection(); - gvs->store = gtk_list_store_new (3, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_POINTER); - gvs->combo_box = gtk_combo_box_new_with_model (GTK_TREE_MODEL (gvs->store)); - gvs->combo_connection = g_signal_connect (G_OBJECT (gvs->combo_box), "changed", G_CALLBACK (gr_combo_box_changed), gvs); - - GtkCellRenderer *renderer = gtk_cell_renderer_pixbuf_new (); - gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (gvs->combo_box), renderer, FALSE); - gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (gvs->combo_box), renderer, "pixbuf", 0, NULL); - gtk_cell_renderer_set_padding(renderer, 5, 0); - - renderer = gtk_cell_renderer_text_new (); - gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (gvs->combo_box), renderer, TRUE); - gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (gvs->combo_box), renderer, "text", 1, NULL); - gtk_cell_renderer_set_padding(renderer, 0, 0); - - gtk_widget_show(gvs->combo_box); - gtk_box_pack_start(GTK_BOX(gvs), gvs->combo_box, TRUE, TRUE, 0); + gvs->columns = new SPGradientSelector::ModelColumns(); + gvs->store = Gtk::ListStore::create(*gvs->columns); + new (&gvs->tree_select_connection) sigc::connection(); } @@ -170,6 +166,7 @@ static void sp_gradient_vector_selector_destroy(GtkObject *object) if (gvs->gr) { gvs->gradient_release_connection.disconnect(); + gvs->tree_select_connection.disconnect(); gvs->gr = NULL; } @@ -182,6 +179,7 @@ static void sp_gradient_vector_selector_destroy(GtkObject *object) gvs->gradient_release_connection.~connection(); gvs->defs_release_connection.~connection(); gvs->defs_modified_connection.~connection(); + gvs->tree_select_connection.~connection(); #if GTK_CHECK_VERSION(3,0,0) if ((reinterpret_cast(parent_class))->destroy) { @@ -281,9 +279,13 @@ SPGradient *sp_gradient_vector_selector_get_gradient(SPGradientVectorSelector *g Glib::ustring gr_prepare_label (SPObject *obj) { - const gchar *id = obj->defaultLabel(); - if (strlen(id) > 15 && (!strncmp (id, "#linearGradient", 15) || !strncmp (id, "#radialGradient", 15))) - return gr_ellipsize_text (g_strdup_printf ("#%s", id+15), 35); + const gchar *id = obj->label() ? obj->label() : obj->getId(); + if (!id) { + id = obj->getRepr()->name(); + } + + if (strlen(id) > 14 && (!strncmp (id, "linearGradient", 14) || !strncmp (id, "radialGradient", 14))) + return gr_ellipsize_text (g_strdup_printf ("%s", id+14), 35); return gr_ellipsize_text (id, 35); } @@ -303,9 +305,11 @@ Glib::ustring gr_ellipsize_text(Glib::ustring const &src, size_t maxlen) static void sp_gvs_rebuild_gui_full(SPGradientVectorSelector *gvs) { + + gvs->tree_select_connection.block(); + /* Clear old list, if there is any */ - gtk_list_store_clear(gvs->store); - GtkTreeIter iter; + gvs->store->clear(); /* Pick up all gradients with vectors */ GSList *gl = NULL; @@ -320,102 +324,124 @@ static void sp_gvs_rebuild_gui_full(SPGradientVectorSelector *gvs) } gl = g_slist_reverse(gl); - gint pos = 0; + /* Get usage count of all the gradients */ + std::map usageCount; + gr_get_usage_counts(gvs->doc, &usageCount); if (!gvs->doc) { - gtk_list_store_append (gvs->store, &iter); - gtk_list_store_set (gvs->store, &iter, 0, NULL, 1, _("No document selected"), 2, NULL, -1); - gtk_widget_set_sensitive (gvs->combo_box, FALSE); + Gtk::TreeModel::Row row = *(gvs->store->append()); + row[gvs->columns->name] = _("No document selected"); } else if (!gl) { - gtk_list_store_append (gvs->store, &iter); - gtk_list_store_set (gvs->store, &iter, 0, NULL, 1, _("No gradients in document"), 2, NULL, -1); - gtk_widget_set_sensitive (gvs->combo_box, FALSE); + Gtk::TreeModel::Row row = *(gvs->store->append()); + row[gvs->columns->name] = _("No gradients in document"); } else if (!gvs->gr) { - gtk_list_store_append (gvs->store, &iter); - gtk_list_store_set (gvs->store, &iter, 0, NULL, 1, _("No gradient selected"), 2, NULL, -1); - gtk_widget_set_sensitive (gvs->combo_box, FALSE); + Gtk::TreeModel::Row row = *(gvs->store->append()); + row[gvs->columns->name] = _("No gradient selected"); } else { - gint idx = 0; while (gl) { SPGradient *gr; gr = SP_GRADIENT(gl->data); gl = g_slist_remove(gl, gr); - /* We have to know: */ - /* Gradient destroy */ - /* Gradient name change */ - - Glib::ustring label = gr_prepare_label(gr); + unsigned long hhssll = sp_gradient_to_hhssll(gr); GdkPixbuf *pixb = sp_gradient_to_pixbuf (gr, 64, 18); - gtk_list_store_append (gvs->store, &iter); - gtk_list_store_set (gvs->store, &iter, 0, pixb, 1, label.c_str(), 2, gr, -1); + Glib::ustring label = gr_prepare_label(gr); + + Gtk::TreeModel::Row row = *(gvs->store->append()); + row[gvs->columns->name] = label.c_str(); + row[gvs->columns->color] = hhssll; + row[gvs->columns->refcount] = usageCount[gr]; + row[gvs->columns->data] = gr; + row[gvs->columns->pixbuf] = Glib::wrap(pixb); - if (gr == gvs->gr) { - pos = idx; - } - idx += 1; } - gtk_widget_set_sensitive (gvs->combo_box, TRUE); } - /* Block signal to prevent recursive loop */ - g_signal_handler_block(G_OBJECT (gvs->combo_box), gvs->combo_connection); + gvs->tree_select_connection.unblock(); - /* Set selected */ - gtk_combo_box_set_active (GTK_COMBO_BOX(gvs->combo_box) , pos); +} + +/* + * Return a "HHSSLL" version of the first stop color so we can sort by it + */ +unsigned long sp_gradient_to_hhssll(SPGradient *gr) +{ + SPStop *stop = gr->getFirstStop(); + unsigned long rgba = sp_stop_get_rgba32(stop); + float hsl[3]; + sp_color_rgb_to_hsl_floatv (hsl, SP_RGBA32_R_F(rgba), SP_RGBA32_G_F(rgba), SP_RGBA32_B_F(rgba)); - g_signal_handler_unblock(G_OBJECT (gvs->combo_box), gvs->combo_connection); + return ((int)(hsl[0]*100 * 10000)) + ((int)(hsl[1]*100 * 100)) + ((int)(hsl[2]*100 * 1)); } -static void gr_combo_box_changed (GtkComboBox *widget, SPGradientVectorSelector *gvs) +GSList *get_all_doc_items(GSList *list, SPObject *from, bool onlyvisible, bool onlysensitive, bool ingroups, GSList const *exclude) { - GtkTreeIter iter; - if (!gtk_combo_box_get_active_iter (widget, &iter)) { - return; + for ( SPObject *child = from->firstChild() ; child; child = child->getNext() ) { + if (SP_IS_ITEM(child)) { + list = g_slist_prepend(list, SP_ITEM(child)); + } + + if (ingroups || SP_IS_ITEM(child)) { + list = get_all_doc_items(list, child, onlyvisible, onlysensitive, ingroups, exclude); + } } - SPGradient *gr = NULL; - gtk_tree_model_get (GTK_TREE_MODEL(gvs->store), &iter, 2, &gr, -1); + return list; +} - if (gr) { +/* + * Return a SPItem's gradient + */ +static SPGradient * gr_item_get_gradient(SPItem *item, gboolean fillorstroke) +{ + SPIPaint *item_paint = (fillorstroke) ? &(item->style->fill) : &(item->style->stroke); + if (item_paint->isPaintserver()) { - SPGradient *norm = sp_gradient_ensure_vector_normalized(gr); - if (norm != gr) { - //g_print("SPGradientVectorSelector: become %s after normalization\n", norm->getId()); - /* But be careful that we do not have gradient saved anywhere else */ - //g_object_set_data(G_OBJECT(mi), "gradient", norm); - gtk_list_store_set (gvs->store, &iter, 2, norm, -1); - } + SPPaintServer *item_server = (fillorstroke) ? + item->style->getFillPaintServer() : item->style->getStrokePaintServer(); - /* fixme: Really we would want to use _set_vector */ - /* Detach old */ - if (gvs->gr) { - gvs->gradient_release_connection.disconnect(); - gvs->gr = NULL; - } - /* Attach new */ - if (norm) { - gvs->gradient_release_connection = norm->connectRelease(sigc::bind<1>(sigc::ptr_fun(&sp_gvs_gradient_release), gvs)); - gvs->gr = norm; + if (SP_IS_LINEARGRADIENT(item_server) || SP_IS_RADIALGRADIENT(item_server) || + (SP_IS_GRADIENT(item_server) && SP_GRADIENT(item_server)->getVector()->isSwatch())) { + + return SP_GRADIENT(item_server)->getVector(); } + } - g_signal_emit(G_OBJECT(gvs), signals[VECTOR_SET], 0, norm); + return NULL; +} - if (norm != gr) { - /* We do extra undo push here */ - /* If handler has already done it, it is just NOP */ - // FIXME: looks like this is never a valid undo step, consider removing this - DocumentUndo::done(norm->document, SP_VERB_CONTEXT_GRADIENT, - /* TODO: annotate */ "gradient-vector.cpp:350"); - } +/* + * Map each gradient to its usage count for both fill and stroke styles + */ +void gr_get_usage_counts(SPDocument *doc, std::map *mapUsageCount ) +{ + if (!doc) + return; + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + bool onlyvisible = prefs->getBool("/options/kbselection/onlyvisible", true); + bool onlysensitive = prefs->getBool("/options/kbselection/onlysensitive", true); + bool ingroups = TRUE; + GSList *all_list = get_all_doc_items(NULL, doc->getRoot(), onlyvisible, onlysensitive, ingroups, NULL); + for (GSList *i = all_list; i != NULL; i = i->next) { + SPItem *item = SP_ITEM(i->data); + SPGradient *gr = NULL; + gr = gr_item_get_gradient(item, true); // fill + if (gr) { + mapUsageCount->count(gr) > 0 ? (*mapUsageCount)[gr] += 1 : (*mapUsageCount)[gr] = 1; + } + gr = gr_item_get_gradient(item, false); // stroke + if (gr) { + mapUsageCount->count(gr) > 0 ? (*mapUsageCount)[gr] += 1 : (*mapUsageCount)[gr] = 1; + } } } + static void sp_gvs_gradient_release(SPObject */*obj*/, SPGradientVectorSelector *gvs) { /* Disconnect gradient */ @@ -448,7 +474,6 @@ static void sp_gvs_defs_release(SPObject */*defs*/, SPGradientVectorSelector *gv static void sp_gvs_defs_modified(SPObject */*defs*/, guint /*flags*/, SPGradientVectorSelector *gvs) { /* fixme: We probably have to check some flags here (Lauris) */ - sp_gvs_rebuild_gui_full(gvs); } -- cgit v1.2.3 From 6c00ff5099e1dff2bcc08eba9f3d0bf3c95a4a12 Mon Sep 17 00:00:00 2001 From: John Smith Date: Wed, 12 Sep 2012 09:47:04 +0900 Subject: Fix for 1048958 : Unexpected count '#' of swatch fill uses for clones (bzr r11664) --- src/widgets/gradient-vector.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/widgets/gradient-vector.cpp') diff --git a/src/widgets/gradient-vector.cpp b/src/widgets/gradient-vector.cpp index db8c76b9b..88fe15dca 100644 --- a/src/widgets/gradient-vector.cpp +++ b/src/widgets/gradient-vector.cpp @@ -430,6 +430,8 @@ void gr_get_usage_counts(SPDocument *doc, std::map *mapUsage for (GSList *i = all_list; i != NULL; i = i->next) { SPItem *item = SP_ITEM(i->data); + if (!item->getId()) + continue; SPGradient *gr = NULL; gr = gr_item_get_gradient(item, true); // fill if (gr) { -- cgit v1.2.3 From aca1914d674a5e81234208248e3c8515a60dd19d Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 4 Oct 2012 12:30:12 +1000 Subject: code cleanup: make more functions static, add includes. (bzr r11737) --- src/widgets/gradient-vector.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/widgets/gradient-vector.cpp') diff --git a/src/widgets/gradient-vector.cpp b/src/widgets/gradient-vector.cpp index 88fe15dca..51013a2cd 100644 --- a/src/widgets/gradient-vector.cpp +++ b/src/widgets/gradient-vector.cpp @@ -377,7 +377,7 @@ unsigned long sp_gradient_to_hhssll(SPGradient *gr) return ((int)(hsl[0]*100 * 10000)) + ((int)(hsl[1]*100 * 100)) + ((int)(hsl[2]*100 * 1)); } -GSList *get_all_doc_items(GSList *list, SPObject *from, bool onlyvisible, bool onlysensitive, bool ingroups, GSList const *exclude) +static GSList *get_all_doc_items(GSList *list, SPObject *from, bool onlyvisible, bool onlysensitive, bool ingroups, GSList const *exclude) { for ( SPObject *child = from->firstChild() ; child; child = child->getNext() ) { if (SP_IS_ITEM(child)) { -- cgit v1.2.3 From 8ee9827502fadcae0b02fec434799e94ee115357 Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Tue, 25 Dec 2012 22:50:08 +0000 Subject: Convert a load more C-style pointer casts to GObject or C++ casts (merry christmas\!) (bzr r11986) --- src/widgets/gradient-vector.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'src/widgets/gradient-vector.cpp') diff --git a/src/widgets/gradient-vector.cpp b/src/widgets/gradient-vector.cpp index 51013a2cd..3a95b552a 100644 --- a/src/widgets/gradient-vector.cpp +++ b/src/widgets/gradient-vector.cpp @@ -609,7 +609,7 @@ static void update_stop_list( GtkWidget *vb, SPGradient *gradient, SPStop *new_s if (!combo_box) { return; } - GtkListStore *store = (GtkListStore *)gtk_combo_box_get_model (GTK_COMBO_BOX(combo_box)); + GtkListStore *store = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(combo_box))); if (!store) { return; } @@ -720,7 +720,7 @@ static SPStop *get_selected_stop( GtkWidget *vb) if (combo_box) { GtkTreeIter iter; if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX(combo_box), &iter)) { - GtkListStore *store = (GtkListStore *)gtk_combo_box_get_model (GTK_COMBO_BOX(combo_box)); + GtkListStore *store = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(combo_box))); gtk_tree_model_get (GTK_TREE_MODEL(store), &iter, 2, &stop, -1); } } @@ -931,7 +931,7 @@ static GtkWidget * sp_gradient_vector_widget_new(SPGradient *gradient, SPStop *s /* Adjustment */ GtkAdjustment *Offset_adj = NULL; - Offset_adj= (GtkAdjustment *) gtk_adjustment_new(0.0, 0.0, 1.0, 0.01, 0.01, 0.0); + Offset_adj= GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 1.0, 0.01, 0.01, 0.0)); g_object_set_data(G_OBJECT(vb), "offset", Offset_adj); SPStop *stop = get_selected_stop(vb); @@ -1197,10 +1197,10 @@ static void sp_gradient_vector_widget_destroy(GtkWidget *object, gpointer /*data static void sp_gradient_vector_widget_destroy(GtkObject *object, gpointer /*data*/) #endif { - SPObject *gradient = reinterpret_cast(g_object_get_data(G_OBJECT(object), "gradient")); + SPObject *gradient = SP_OBJECT(g_object_get_data(G_OBJECT(object), "gradient")); - sigc::connection *release_connection = (sigc::connection *)g_object_get_data(G_OBJECT(object), "gradient_release_connection"); - sigc::connection *modified_connection = (sigc::connection *)g_object_get_data(G_OBJECT(object), "gradient_modified_connection"); + sigc::connection *release_connection = static_cast(g_object_get_data(G_OBJECT(object), "gradient_release_connection")); + sigc::connection *modified_connection = static_cast(g_object_get_data(G_OBJECT(object), "gradient_modified_connection")); if (gradient) { g_assert( release_connection != NULL ); @@ -1316,7 +1316,7 @@ static void sp_gradient_vector_color_changed(SPColorSelector *csel, GObject *obj if (combo_box) { GtkTreeIter iter; if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX(combo_box), &iter)) { - GtkListStore *store = (GtkListStore *)gtk_combo_box_get_model (GTK_COMBO_BOX(combo_box)); + GtkListStore *store = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(combo_box))); Inkscape::UI::Widget::ColorPreview *cp = Gtk::manage(new Inkscape::UI::Widget::ColorPreview(sp_stop_get_rgba32(stop))); GdkPixbuf *pb = cp->toPixbuf(64, 16); -- cgit v1.2.3 From 0cdd007ebf8dcfbd39c1d36ab53f43617eb692df Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Mon, 25 Mar 2013 17:42:31 +0000 Subject: Workaround usage of deprecated glib symbols in 3rd party libraries Fixed bugs: - https://launchpad.net/bugs/1122774 (bzr r12243) --- src/widgets/gradient-vector.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'src/widgets/gradient-vector.cpp') diff --git a/src/widgets/gradient-vector.cpp b/src/widgets/gradient-vector.cpp index 3a95b552a..e15f81e0f 100644 --- a/src/widgets/gradient-vector.cpp +++ b/src/widgets/gradient-vector.cpp @@ -22,10 +22,9 @@ #ifdef HAVE_CONFIG_H # include "config.h" #endif -#ifdef HAVE_STRING_H -#endif -#include "ui/widget/color-preview.h" + #include "gradient-vector.h" +#include "ui/widget/color-preview.h" #include "verbs.h" #include #include "macros.h" -- cgit v1.2.3 From 16ac2bbcaba3dde76484f5161a433b39f8a31a12 Mon Sep 17 00:00:00 2001 From: Kris De Gussem Date: Sun, 28 Apr 2013 13:06:53 +0200 Subject: minor cppcheck stuff (bzr r12307) --- src/widgets/gradient-vector.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'src/widgets/gradient-vector.cpp') diff --git a/src/widgets/gradient-vector.cpp b/src/widgets/gradient-vector.cpp index e15f81e0f..118d8a68a 100644 --- a/src/widgets/gradient-vector.cpp +++ b/src/widgets/gradient-vector.cpp @@ -1001,8 +1001,6 @@ static GtkWidget * sp_gradient_vector_widget_new(SPGradient *gradient, SPStop *s GtkWidget * sp_gradient_vector_editor_new(SPGradient *gradient, SPStop *stop) { - GtkWidget *wid; - if (dlg == NULL) { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); @@ -1044,7 +1042,7 @@ GtkWidget * sp_gradient_vector_editor_new(SPGradient *gradient, SPStop *stop) gtk_container_set_border_width(GTK_CONTAINER(dlg), PAD); - wid = static_cast(sp_gradient_vector_widget_new(gradient, stop)); + GtkWidget *wid = static_cast(sp_gradient_vector_widget_new(gradient, stop)); g_object_set_data(G_OBJECT(dlg), "gradient-vector-widget", wid); /* Connect signals */ gtk_widget_show(wid); -- cgit v1.2.3 From bf4a1d2d49850170b936c30cfe2b30e798716406 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Sat, 3 Aug 2013 03:03:43 +0200 Subject: Cleaned up. (bzr r11608.1.117) --- src/widgets/gradient-vector.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src/widgets/gradient-vector.cpp') diff --git a/src/widgets/gradient-vector.cpp b/src/widgets/gradient-vector.cpp index 118d8a68a..e9fc426f6 100644 --- a/src/widgets/gradient-vector.cpp +++ b/src/widgets/gradient-vector.cpp @@ -369,7 +369,7 @@ static void sp_gvs_rebuild_gui_full(SPGradientVectorSelector *gvs) unsigned long sp_gradient_to_hhssll(SPGradient *gr) { SPStop *stop = gr->getFirstStop(); - unsigned long rgba = sp_stop_get_rgba32(stop); + unsigned long rgba = stop->get_rgba32(); float hsl[3]; sp_color_rgb_to_hsl_floatv (hsl, SP_RGBA32_R_F(rgba), SP_RGBA32_G_F(rgba), SP_RGBA32_B_F(rgba)); @@ -635,7 +635,7 @@ static void update_stop_list( GtkWidget *vb, SPGradient *gradient, SPStop *new_s if (SP_IS_STOP(sl->data)){ SPStop *stop = SP_STOP(sl->data); Inkscape::XML::Node *repr = reinterpret_cast(sl->data)->getRepr(); - Inkscape::UI::Widget::ColorPreview *cpv = Gtk::manage(new Inkscape::UI::Widget::ColorPreview(sp_stop_get_rgba32(stop))); + Inkscape::UI::Widget::ColorPreview *cpv = Gtk::manage(new Inkscape::UI::Widget::ColorPreview(stop->get_rgba32())); GdkPixbuf *pb = cpv->toPixbuf(64, 16); gtk_list_store_append (store, &iter); @@ -791,8 +791,8 @@ static void sp_grd_ed_add_stop(GtkWidget */*widget*/, GtkWidget *vb) newstop->offset = (stop->offset + next->offset) * 0.5 ; - guint32 const c1 = sp_stop_get_rgba32(stop); - guint32 const c2 = sp_stop_get_rgba32(next); + guint32 const c1 = stop->get_rgba32(); + guint32 const c2 = next->get_rgba32(); guint32 cnew = sp_average_color(c1, c2); Inkscape::CSSOStringStream os; @@ -1315,7 +1315,7 @@ static void sp_gradient_vector_color_changed(SPColorSelector *csel, GObject *obj if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX(combo_box), &iter)) { GtkListStore *store = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(combo_box))); - Inkscape::UI::Widget::ColorPreview *cp = Gtk::manage(new Inkscape::UI::Widget::ColorPreview(sp_stop_get_rgba32(stop))); + Inkscape::UI::Widget::ColorPreview *cp = Gtk::manage(new Inkscape::UI::Widget::ColorPreview(stop->get_rgba32())); GdkPixbuf *pb = cp->toPixbuf(64, 16); gtk_list_store_set (store, &iter, 0, pb, /*1, repr->attribute("id"),*/ 2, stop, -1); -- cgit v1.2.3 From 0eb7cf56b9229a6bcc6c79574d2ac58413c46049 Mon Sep 17 00:00:00 2001 From: kris-degussem <> Date: Fri, 17 Jan 2014 20:27:53 +0100 Subject: i18n. Fix for Bug #1269943 (Context for message Offset:). Fixed bugs: - https://launchpad.net/bugs/1269943 (bzr r12952) --- src/widgets/gradient-vector.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/widgets/gradient-vector.cpp') diff --git a/src/widgets/gradient-vector.cpp b/src/widgets/gradient-vector.cpp index e9fc426f6..17ac887c4 100644 --- a/src/widgets/gradient-vector.cpp +++ b/src/widgets/gradient-vector.cpp @@ -923,7 +923,7 @@ static GtkWidget * sp_gradient_vector_widget_new(SPGradient *gradient, SPStop *s #endif /* Label */ - GtkWidget *l = gtk_label_new(_("Offset:")); + GtkWidget *l = gtk_label_new(C_("Gradient","Offset:")); gtk_misc_set_alignment(GTK_MISC(l), 1.0, 0.5); gtk_box_pack_start(GTK_BOX(hb),l, FALSE, FALSE, AUX_BETWEEN_BUTTON_GROUPS); gtk_widget_show(l); -- cgit v1.2.3