GtkRange: Fix drawing of fill-level

Compute the proportion of the range that should be filled to match the
fill level, and use it to compute the starting point and length of the
area between the slider and the fill level.

https://bugzilla.gnome.org/show_bug.cgi?id=734741
This commit is contained in:
Marcus Karlsson 2015-03-24 22:31:52 +01:00 committed by Matthias Clasen
parent 7719784733
commit abf3d78b57

View File

@ -2116,6 +2116,7 @@ gtk_range_draw (GtkWidget *widget,
gint fill_y = y; gint fill_y = y;
gint fill_width = width; gint fill_width = width;
gint fill_height = height; gint fill_height = height;
gdouble fill_proportion = 0.0;
gtk_style_context_save (context); gtk_style_context_save (context);
gtk_style_context_add_class (context, GTK_STYLE_CLASS_PROGRESSBAR); gtk_style_context_add_class (context, GTK_STYLE_CLASS_PROGRESSBAR);
@ -2124,33 +2125,36 @@ gtk_range_draw (GtkWidget *widget,
gtk_adjustment_get_upper (priv->adjustment) - gtk_adjustment_get_upper (priv->adjustment) -
gtk_adjustment_get_page_size (priv->adjustment)); gtk_adjustment_get_page_size (priv->adjustment));
if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) fill_proportion = (fill_level - gtk_adjustment_get_lower (priv->adjustment)) /
{
fill_x = priv->trough.x;
fill_width = (priv->slider.width +
(fill_level - gtk_adjustment_get_lower (priv->adjustment)) /
(gtk_adjustment_get_upper (priv->adjustment) - (gtk_adjustment_get_upper (priv->adjustment) -
gtk_adjustment_get_lower (priv->adjustment) - gtk_adjustment_get_lower (priv->adjustment) -
gtk_adjustment_get_page_size (priv->adjustment)) * gtk_adjustment_get_page_size (priv->adjustment));
(priv->trough.width -
priv->slider.width));
if (should_invert (range)) if (priv->orientation == GTK_ORIENTATION_HORIZONTAL)
fill_x += priv->trough.width - fill_width; {
if (!should_invert (range))
{
fill_x = priv->slider.x + (priv->slider.width / 2);
fill_width = (width * fill_proportion) - fill_x + x;
} }
else else
{ {
fill_y = priv->trough.y; fill_x = x + width * (1.0 - fill_proportion);
fill_height = (priv->slider.height + fill_width = priv->slider.x + (priv->slider.width / 2) - fill_x;
(fill_level - gtk_adjustment_get_lower (priv->adjustment)) / }
(gtk_adjustment_get_upper (priv->adjustment) - }
gtk_adjustment_get_lower (priv->adjustment) - else
gtk_adjustment_get_page_size (priv->adjustment)) * {
(priv->trough.height - if (!should_invert (range))
priv->slider.height)); {
fill_y = priv->slider.y + (priv->slider.height / 2);
if (should_invert (range)) fill_height = (height * fill_proportion) - fill_y + y;
fill_y += priv->trough.height - fill_height; }
else
{
fill_y = y + height * (1.0 - fill_proportion);
fill_height = priv->slider.y + (priv->slider.height / 2) - fill_y;
}
} }
gtk_render_background (context, cr, fill_x, fill_y, fill_width, fill_height); gtk_render_background (context, cr, fill_x, fill_y, fill_width, fill_height);