summaryrefslogtreecommitdiff
path: root/gtk/gtkscale.c
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/gtkscale.c')
-rw-r--r--gtk/gtkscale.c67
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