diff options
Diffstat (limited to 'gtk/gtkscale.c')
-rw-r--r-- | gtk/gtkscale.c | 67 |
1 files changed, 51 insertions, 16 deletions
diff --git a/gtk/gtkscale.c b/gtk/gtkscale.c index 34e3127412..e1099d1ca3 100644 --- a/gtk/gtkscale.c +++ b/gtk/gtkscale.c @@ -28,7 +28,6 @@ #include "gtkcontainer.h" #include "gtkscale.h" - enum { ARG_0, ARG_DIGITS, @@ -260,25 +259,29 @@ gtk_scale_set_value_pos (GtkScale *scale, } } -gint -gtk_scale_get_value_width (GtkScale *scale) +void +gtk_scale_get_value_size (GtkScale *scale, + gint *width, + gint *height) { GtkRange *range; - gchar buffer[128]; - gfloat value; - gint temp; - gint return_val; - gint digits; - gint i, j; - g_return_val_if_fail (scale != NULL, 0); - g_return_val_if_fail (GTK_IS_SCALE (scale), 0); + g_return_if_fail (scale != NULL); + g_return_if_fail (GTK_IS_SCALE (scale)); - return_val = 0; if (scale->draw_value) { + PangoLayout *layout; + PangoRectangle logical_rect; + gchar buffer[128]; + gfloat value; + gint digits; + gint i, j; + range = GTK_RANGE (scale); + layout = gtk_widget_create_pango_layout (GTK_WIDGET (scale)); + value = ABS (range->adjustment->lower); if (value == 0) value = 1; digits = log10 (value) + 1; @@ -296,8 +299,14 @@ gtk_scale_get_value_width (GtkScale *scale) buffer[i++] = '0'; buffer[i] = '\0'; - return_val = gdk_string_measure (GTK_WIDGET (scale)->style->font, buffer); + pango_layout_set_text (layout, buffer, i); + pango_layout_get_extents (layout, NULL, &logical_rect); + if (width) + *width = logical_rect.width / PANGO_SCALE; + if (height) + *height = logical_rect.width / PANGO_SCALE; + value = ABS (range->adjustment->upper); if (value == 0) value = 1; digits = log10 (value) + 1; @@ -315,11 +324,37 @@ gtk_scale_get_value_width (GtkScale *scale) buffer[i++] = '0'; buffer[i] = '\0'; - temp = gdk_string_measure (GTK_WIDGET (scale)->style->font, buffer); - return_val = MAX (return_val, temp); + pango_layout_set_text (layout, buffer, i); + pango_layout_get_extents (layout, NULL, &logical_rect); + + if (width) + *width = MAX (*width, logical_rect.width / PANGO_SCALE); + if (height) + *height = MAX (*height, logical_rect.height / PANGO_SCALE); + + pango_layout_unref (layout); } + else + { + if (width) + *width = 0; + if (height) + *height = 0; + } + +} + +gint +gtk_scale_get_value_width (GtkScale *scale) +{ + gint width; + + g_return_val_if_fail (scale != NULL, 0); + g_return_val_if_fail (GTK_IS_SCALE (scale), 0); + + gtk_scale_get_value_size (scale, &width, NULL); - return return_val; + return width; } void |