summaryrefslogtreecommitdiff
path: root/gtk/gtkrange.c
diff options
context:
space:
mode:
authorCosimo Cecchi <cosimoc@gnome.org>2016-02-27 13:31:26 -0800
committerCosimo Cecchi <cosimoc@gnome.org>2016-02-29 10:45:13 -0800
commit424f17c0fbd6a97132c73a3fb7f3fb374615384d (patch)
tree7bbf59f26b381eebeefb26446b70a9ab310474e9 /gtk/gtkrange.c
parent0468ff15459b4e01ca57e4a057908de70e502456 (diff)
downloadgtk+-424f17c0fbd6a97132c73a3fb7f3fb374615384d.tar.gz
range: don't use gtk_range_set_min_slider_size()
The way this method is used from the GtkRange subclasses doesn't really work well when the slider properties change as a consequence of e.g. a style class being applied (e.g. the fine-tune style class). In fact, there's no need to read the minimum slider size out of band, and we can obtain the same result in a way that always work by setting a private property on GtkRange.
Diffstat (limited to 'gtk/gtkrange.c')
-rw-r--r--gtk/gtkrange.c44
1 files changed, 33 insertions, 11 deletions
diff --git a/gtk/gtkrange.c b/gtk/gtkrange.c
index d712346340..edb9ba4ee4 100644
--- a/gtk/gtkrange.c
+++ b/gtk/gtkrange.c
@@ -128,6 +128,7 @@ struct _GtkRangePrivate
guint flippable : 1;
guint inverted : 1;
guint slider_size_fixed : 1;
+ guint slider_use_min_size : 1;
guint trough_click_forward : 1; /* trough click was on the forward side of slider */
/* Stepper sensitivity */
@@ -1110,6 +1111,19 @@ gtk_range_get_flippable (GtkRange *range)
return range->priv->flippable;
}
+void
+gtk_range_set_slider_use_min_size (GtkRange *range,
+ gboolean use_min_size)
+{
+ GtkRangePrivate *priv = range->priv;
+
+ if (use_min_size != priv->slider_use_min_size)
+ {
+ priv->slider_use_min_size = use_min_size;
+ gtk_css_gadget_queue_resize (priv->slider_gadget);
+ }
+}
+
/**
* gtk_range_set_slider_size_fixed:
* @range: a #GtkRange
@@ -3425,11 +3439,13 @@ gtk_range_compute_slider_position (GtkRange *range,
{
GtkRangePrivate *priv = range->priv;
GtkAllocation trough_content_alloc;
- int slider_width, slider_height;
+ int slider_width, slider_height, min_slider_size;
measure_one_gadget (priv->slider_gadget, &slider_width, &slider_height);
gtk_css_gadget_get_content_box (priv->trough_gadget, &trough_content_alloc);
+ min_slider_size = priv->min_slider_size;
+
if (priv->orientation == GTK_ORIENTATION_VERTICAL)
{
gint y, bottom, top, height;
@@ -3440,6 +3456,9 @@ gtk_range_compute_slider_position (GtkRange *range,
slider_rect->x = trough_content_alloc.x + (int) floor ((trough_content_alloc.width - slider_width) / 2);
slider_rect->width = slider_width;
+ if (priv->slider_use_min_size)
+ min_slider_size = slider_height;
+
/* Compute slider position/length */
top = trough_content_alloc.y;
bottom = top + trough_content_alloc.height;
@@ -3447,8 +3466,8 @@ gtk_range_compute_slider_position (GtkRange *range,
/* Scale slider half extends over the trough edge */
if (GTK_IS_SCALE (range))
{
- top -= priv->min_slider_size / 2;
- bottom += priv->min_slider_size / 2;
+ top -= min_slider_size / 2;
+ bottom += min_slider_size / 2;
}
/* slider height is the fraction (page_size /
@@ -3459,11 +3478,11 @@ gtk_range_compute_slider_position (GtkRange *range,
height = ((bottom - top) * (gtk_adjustment_get_page_size (priv->adjustment) /
(gtk_adjustment_get_upper (priv->adjustment) - gtk_adjustment_get_lower (priv->adjustment))));
else
- height = priv->min_slider_size;
+ height = min_slider_size;
- if (height < priv->min_slider_size ||
+ if (height < min_slider_size ||
priv->slider_size_fixed)
- height = priv->min_slider_size;
+ height = min_slider_size;
height = MIN (height, trough_content_alloc.height);
@@ -3491,6 +3510,9 @@ gtk_range_compute_slider_position (GtkRange *range,
slider_rect->y = trough_content_alloc.y + (int) floor ((trough_content_alloc.height - slider_height) / 2);
slider_rect->height = slider_height;
+ if (priv->slider_use_min_size)
+ min_slider_size = slider_width;
+
/* Compute slider position/length */
left = trough_content_alloc.x;
right = left + trough_content_alloc.width;
@@ -3498,8 +3520,8 @@ gtk_range_compute_slider_position (GtkRange *range,
/* Scale slider half extends over the trough edge */
if (GTK_IS_SCALE (range))
{
- left -= priv->min_slider_size / 2;
- right += priv->min_slider_size / 2;
+ left -= min_slider_size / 2;
+ right += min_slider_size / 2;
}
/* slider width is the fraction (page_size /
@@ -3510,11 +3532,11 @@ gtk_range_compute_slider_position (GtkRange *range,
width = ((right - left) * (gtk_adjustment_get_page_size (priv->adjustment) /
(gtk_adjustment_get_upper (priv->adjustment) - gtk_adjustment_get_lower (priv->adjustment))));
else
- width = priv->min_slider_size;
+ width = min_slider_size;
- if (width < priv->min_slider_size ||
+ if (width < min_slider_size ||
priv->slider_size_fixed)
- width = priv->min_slider_size;
+ width = min_slider_size;
width = MIN (width, trough_content_alloc.width);