+
+ gtk_widget_style_get (GTK_WIDGET (range),
+ "trough-side-details", &trough_side_details,
+ "trough-under-steppers", &trough_under_steppers,
+ "stepper-size", &stepper_size,
+ "stepper-spacing", &stepper_spacing,
+ NULL);
+
+ if (stepper_spacing > 0)
+ trough_under_steppers = FALSE;
+
+ if (! trough_under_steppers)
+ {
+ gint offset = 0;
+ gint shorter = 0;
+
+ if (range->has_stepper_a)
+ offset += stepper_size;
+
+ if (range->has_stepper_b)
+ offset += stepper_size;
+
+ shorter += offset;
+
+ if (range->has_stepper_c)
+ shorter += stepper_size;
+
+ if (range->has_stepper_d)
+ shorter += stepper_size;
+
+ if (range->has_stepper_a || range->has_stepper_b)
+ {
+ offset += stepper_spacing;
+ shorter += stepper_spacing;
+ }
+
+ if (range->has_stepper_c || range->has_stepper_d)
+ {
+ shorter += stepper_spacing;
+ }
+
+ if (range->orientation == GTK_ORIENTATION_HORIZONTAL)
+ {
+ x += offset;
+ width -= shorter;
+ }
+ else
+ {
+ y += offset;
+ height -= shorter;
+ }
+ }
+
+ if (! trough_side_details)
+ {
+ gtk_paint_box (widget->style,
+ widget->window,
+ sensitive ? GTK_STATE_ACTIVE : GTK_STATE_INSENSITIVE,
+ GTK_SHADOW_IN,
+ &area, GTK_WIDGET(range), "trough",
+ x, y,
+ width, height);
+ }
+ else
+ {
+ gint trough_change_pos_x = width;
+ gint trough_change_pos_y = height;
+
+ if (range->orientation == GTK_ORIENTATION_HORIZONTAL)
+ trough_change_pos_x = (range->layout->slider.x +
+ range->layout->slider.width / 2 -
+ (x - widget->allocation.x));
+ else
+ trough_change_pos_y = (range->layout->slider.y +
+ range->layout->slider.height / 2 -
+ (y - widget->allocation.y));
+
+ gtk_paint_box (widget->style,
+ widget->window,
+ sensitive ? GTK_STATE_ACTIVE : GTK_STATE_INSENSITIVE,
+ GTK_SHADOW_IN,
+ &area, GTK_WIDGET (range),
+ should_invert (range) ? "trough-upper" : "trough-lower",
+ x, y,
+ trough_change_pos_x, trough_change_pos_y);
+
+ if (range->orientation == GTK_ORIENTATION_HORIZONTAL)
+ trough_change_pos_y = 0;
+ else
+ trough_change_pos_x = 0;
+
+ gtk_paint_box (widget->style,
+ widget->window,
+ sensitive ? GTK_STATE_ACTIVE : GTK_STATE_INSENSITIVE,
+ GTK_SHADOW_IN,
+ &area, GTK_WIDGET (range),
+ should_invert (range) ? "trough-lower" : "trough-upper",
+ x + trough_change_pos_x, y + trough_change_pos_y,
+ width - trough_change_pos_x,
+ height - trough_change_pos_y);
+ }
+
+ if (range->layout->show_fill_level &&
+ range->adjustment->upper - range->adjustment->page_size -
+ range->adjustment->lower != 0)
+ {
+ gdouble fill_level = range->layout->fill_level;
+ gint fill_x = x;
+ gint fill_y = y;
+ gint fill_width = width;
+ gint fill_height = height;
+ gchar *fill_detail;
+
+ fill_level = CLAMP (fill_level, range->adjustment->lower,
+ range->adjustment->upper -
+ range->adjustment->page_size);
+
+ if (range->orientation == GTK_ORIENTATION_HORIZONTAL)
+ {
+ fill_x = widget->allocation.x + range->layout->trough.x;
+ fill_width = (range->layout->slider.width +
+ (fill_level - range->adjustment->lower) /
+ (range->adjustment->upper -
+ range->adjustment->lower -
+ range->adjustment->page_size) *
+ (range->layout->trough.width -
+ range->layout->slider.width));
+
+ if (should_invert (range))
+ fill_x += range->layout->trough.width - fill_width;
+ }
+ else
+ {
+ fill_y = widget->allocation.y + range->layout->trough.y;
+ fill_height = (range->layout->slider.height +
+ (fill_level - range->adjustment->lower) /
+ (range->adjustment->upper -
+ range->adjustment->lower -
+ range->adjustment->page_size) *
+ (range->layout->trough.height -
+ range->layout->slider.height));
+
+ if (should_invert (range))
+ fill_y += range->layout->trough.height - fill_height;
+ }
+
+ if (fill_level < range->adjustment->upper - range->adjustment->page_size)
+ fill_detail = "trough-fill-level-full";
+ else
+ fill_detail = "trough-fill-level";
+
+ gtk_paint_box (widget->style,
+ widget->window,
+ sensitive ? GTK_STATE_ACTIVE : GTK_STATE_INSENSITIVE,
+ GTK_SHADOW_OUT,
+ &area, GTK_WIDGET (range), fill_detail,
+ fill_x, fill_y,
+ fill_width, fill_height);
+ }
+