diff --git a/app/tools/gimppaintoptions-gui.c b/app/tools/gimppaintoptions-gui.c index 7955438ef7..23aef019e6 100644 --- a/app/tools/gimppaintoptions-gui.c +++ b/app/tools/gimppaintoptions-gui.c @@ -524,6 +524,8 @@ gimp_paint_options_gui_scale_with_buttons (GObject *config, scale = gimp_prop_spin_scale_new (config, prop_name, NULL, step_increment, page_increment, digits); + gimp_spin_scale_set_constrain_drag (GIMP_SPIN_SCALE (scale), TRUE); + gimp_prop_widget_set_factor (scale, factor, step_increment, page_increment, digits); gimp_spin_scale_set_scale_limits (GIMP_SPIN_SCALE (scale), diff --git a/app/widgets/gimpspinscale.c b/app/widgets/gimpspinscale.c index 2b11e1b9b4..31769a6693 100644 --- a/app/widgets/gimpspinscale.c +++ b/app/widgets/gimpspinscale.c @@ -62,6 +62,8 @@ struct _GimpSpinScalePrivate guint mnemonic_keyval; gboolean mnemonics_visible; + gboolean constrain_drag; + gboolean scale_limits_set; gdouble scale_lower; gdouble scale_upper; @@ -721,6 +723,9 @@ gimp_spin_scale_change_value (GtkWidget *widget, value = RINT (value); value /= power; + if (private->constrain_drag) + value = rint (value); + gtk_adjustment_set_value (adjustment, value); } @@ -1338,3 +1343,35 @@ gimp_spin_scale_get_gamma (GimpSpinScale *scale) return GET_PRIVATE (scale)->gamma; } + +/** + * gimp_spin_scale_set_constrain_drag: + * @scale: the #GimpSpinScale. + * @constrain: whether constraining to integer values when dragging with + * pointer. + * + * If @constrain_drag is TRUE, dragging the scale with the pointer will + * only result into integer values. It will still possible to set the + * scale to fractional values (if the spin scale "digits" is above 0) + * for instance with keyboard edit. + */ +void +gimp_spin_scale_set_constrain_drag (GimpSpinScale *scale, + gboolean constrain) +{ + GimpSpinScalePrivate *private; + + g_return_if_fail (GIMP_IS_SPIN_SCALE (scale)); + + private = GET_PRIVATE (scale); + + private->constrain_drag = constrain; +} + +gboolean +gimp_spin_scale_get_constrain_drag (GimpSpinScale *scale) +{ + g_return_val_if_fail (GIMP_IS_SPIN_SCALE (scale), 1.0); + + return GET_PRIVATE (scale)->constrain_drag; +} diff --git a/app/widgets/gimpspinscale.h b/app/widgets/gimpspinscale.h index 4435cf50b0..0693ac2745 100644 --- a/app/widgets/gimpspinscale.h +++ b/app/widgets/gimpspinscale.h @@ -66,5 +66,8 @@ void gimp_spin_scale_set_gamma (GimpSpinScale *scale, gdouble gamma); gdouble gimp_spin_scale_get_gamma (GimpSpinScale *scale); +void gimp_spin_scale_set_constrain_drag (GimpSpinScale *scale, + gboolean constrain); +gboolean gimp_spin_scale_get_constrain_drag (GimpSpinScale *scale); #endif /* __GIMP_SPIN_SCALE_H__ */