diff --git a/gtk/gtkscale.c b/gtk/gtkscale.c index 907996ec3c..c2974cf2a3 100644 --- a/gtk/gtkscale.c +++ b/gtk/gtkscale.c @@ -382,7 +382,7 @@ gtk_scale_allocate_value (GtkScale *scale) case GTK_POS_TOP: value_alloc.x = slider_center_x - value_alloc.width / 2; - value_alloc.y = slider_bounds.origin.y - value_alloc.height; + value_alloc.y = 0; break; case GTK_POS_BOTTOM: @@ -582,7 +582,7 @@ gtk_scale_size_allocate (GtkWidget *widget, &marks_height, NULL, NULL, NULL); marks_rect.x = 0; - marks_rect.y = 0; + marks_rect.y = range_rect.y - marks_height; marks_rect.width = range_rect.width; marks_rect.height = marks_height; gtk_widget_size_allocate (priv->top_marks_widget, &marks_rect, -1); @@ -1436,11 +1436,12 @@ gtk_scale_measure (GtkWidget *widget, GtkScale *scale = GTK_SCALE (widget); GtkScalePrivate *priv = gtk_scale_get_instance_private (scale); GtkOrientation scale_orientation; + int range_minimum, range_natural, scale_minimum = 0, scale_natural = 0; GTK_WIDGET_CLASS (gtk_scale_parent_class)->measure (widget, orientation, for_size, - minimum, natural, + &range_minimum, &range_natural, minimum_baseline, natural_baseline); scale_orientation = gtk_orientable_get_orientation (GTK_ORIENTABLE (widget)); @@ -1462,8 +1463,8 @@ gtk_scale_measure (GtkWidget *widget, marks_size = MAX (top_marks_size, bottom_marks_size); - *minimum = MAX (*minimum, marks_size); - *natural = MAX (*natural, marks_size); + scale_minimum = MAX (scale_minimum, marks_size); + scale_natural = MAX (scale_natural, marks_size); } if (priv->value_widget) @@ -1477,29 +1478,32 @@ gtk_scale_measure (GtkWidget *widget, { if (orientation == GTK_ORIENTATION_HORIZONTAL) { - *minimum = MAX (*minimum, min); - *natural = MAX (*natural, nat); + scale_minimum = MAX (scale_minimum, min); + scale_natural = MAX (scale_natural, nat); } else { - *minimum += min; - *natural += nat; + scale_minimum += min; + scale_natural += nat; } } else { if (orientation == GTK_ORIENTATION_HORIZONTAL) { - *minimum += min; - *natural += nat; + scale_minimum += min; + scale_natural += nat; } else { - *minimum = MAX (*minimum, min); - *natural = MAX (*natural, nat); + scale_minimum = MAX (scale_minimum, min); + scale_natural = MAX (scale_natural, nat); } } } + + *minimum = MAX (range_minimum, scale_minimum); + *natural = MAX (range_natural, scale_natural); } static void