summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJohn Smith <john.smith7545@yahoo.com>2012-05-17 00:54:20 +0000
committerJohn Smith <removethis.john.q.public@bigmail.com>2012-05-17 00:54:20 +0000
commit15256efe98e5a35b9195d91e4d586a32d9967eb1 (patch)
treef6cb11f3677689d5ec789485c0d46e0f83a1d03c /src
parentDrop some GtkObject usage (diff)
downloadinkscape-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.cpp9
-rw-r--r--src/widgets/gradient-vector.cpp25
-rw-r--r--src/widgets/gradient-vector.h4
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