diff options
| author | John Smith <john.smith7545@yahoo.com> | 2012-05-17 00:54:20 +0000 |
|---|---|---|
| committer | John Smith <removethis.john.q.public@bigmail.com> | 2012-05-17 00:54:20 +0000 |
| commit | 15256efe98e5a35b9195d91e4d586a32d9967eb1 (patch) | |
| tree | f6cb11f3677689d5ec789485c0d46e0f83a1d03c /src | |
| parent | Drop some GtkObject usage (diff) | |
| download | inkscape-15256efe98e5a35b9195d91e4d586a32d9967eb1.tar.gz inkscape-15256efe98e5a35b9195d91e4d586a32d9967eb1.zip | |
Fix for 950677 : ellipsize function with ustring
(bzr r11371)
Diffstat (limited to 'src')
| -rw-r--r-- | src/widgets/gradient-toolbar.cpp | 9 | ||||
| -rw-r--r-- | src/widgets/gradient-vector.cpp | 25 | ||||
| -rw-r--r-- | src/widgets/gradient-vector.h | 4 |
3 files changed, 18 insertions, 20 deletions
diff --git a/src/widgets/gradient-toolbar.cpp b/src/widgets/gradient-toolbar.cpp index 44b0c6c1c..295f211b0 100644 --- a/src/widgets/gradient-toolbar.cpp +++ b/src/widgets/gradient-toolbar.cpp @@ -194,11 +194,10 @@ gboolean gr_vector_list(GtkWidget *combo_box, SPDesktop *desktop, bool selection SPGradient *gradient = SP_GRADIENT(gl->data); gl = g_slist_remove(gl, gradient); - gchar *label = gr_prepare_label(gradient); + Glib::ustring label = gr_prepare_label(gradient); GdkPixbuf *pixb = sp_gradient_to_pixbuf(gradient, 64, 16); gtk_list_store_append(store, &iter); - gtk_list_store_set(store, &iter, 0, label, 1, pixb, 2, gradient, -1); - g_free(label); + gtk_list_store_set(store, &iter, 0, label.c_str(), 1, pixb, 2, gradient, -1); if (gradient == gr_selected) { pos = idx; @@ -835,10 +834,10 @@ static gboolean update_stop_list( GtkWidget *stop_combo, SPGradient *gradient, S Inkscape::XML::Node *repr = reinterpret_cast<SPItem *>(sl->data)->getRepr(); Inkscape::UI::Widget::ColorPreview *cpv = Gtk::manage(new Inkscape::UI::Widget::ColorPreview(sp_stop_get_rgba32(stop))); GdkPixbuf *pb = cpv->toPixbuf(32, 16); - const gchar *label = gr_ellipse_text(repr->attribute("id"), 25); + Glib::ustring label = gr_ellipsize_text(repr->attribute("id"), 25); gtk_list_store_append(store, &iter); - gtk_list_store_set(store, &iter, 0, label, 1, pb, 2, stop, -1); + gtk_list_store_set(store, &iter, 0, label.c_str(), 1, pb, 2, stop, -1); sensitive = FALSE; } } 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; diff --git a/src/widgets/gradient-vector.h b/src/widgets/gradient-vector.h index ee69a9318..9a26ab046 100644 --- a/src/widgets/gradient-vector.h +++ b/src/widgets/gradient-vector.h @@ -77,8 +77,8 @@ GtkWidget *sp_gradient_vector_editor_new (SPGradient *gradient, SPStop *stop = N guint32 sp_average_color(guint32 c1, guint32 c2, gdouble p = 0.5); -gchar *gr_prepare_label (SPObject *obj); -gchar *gr_ellipse_text (gchar const *src, guint maxlen); +Glib::ustring gr_prepare_label (SPObject *obj); +Glib::ustring gr_ellipsize_text(Glib::ustring const &src, size_t maxlen); #endif // SEEN_GRADIENT_VECTOR_H |
