remove duplicate/wrong includes in last commit.
[ardour.git] / libs / gtkmm2ext / auto_spin.cc
index 0830eca77e6a61232fd426d43fdb63dc87122f67..2e051b5be80089b9a54a2f5da7260c7690e3e17f 100644 (file)
@@ -33,7 +33,7 @@ const unsigned int AutoSpin::initial_timer_interval = 500;   /* msecs */
 const unsigned int AutoSpin::timer_interval = 20;            /* msecs */
 const unsigned int AutoSpin::climb_timer_calls = 5;    /* between climbing */
 
-AutoSpin::AutoSpin (Gtk::Adjustment &adjr, gfloat cr) 
+AutoSpin::AutoSpin (Gtk::Adjustment &adjr, gfloat cr, bool round_to_steps_yn
        : adjustment (adjr),
          climb_rate (cr)
 
@@ -44,13 +44,14 @@ AutoSpin::AutoSpin (Gtk::Adjustment &adjr, gfloat cr)
        have_timer = false;
        need_timer = false;
        timer_calls = 0;
+       round_to_steps = round_to_steps_yn;
 }
 
 void
 AutoSpin::stop_timer ()
 {
        if (have_timer) {
-               gtk_timeout_remove (timeout_tag);
+               g_source_remove (timeout_tag);
                have_timer = false;     
        }
 }
@@ -150,7 +151,7 @@ AutoSpin::start_spinning (bool decrement, bool page)
        
        have_timer = true;
        timer_calls = 0;
-       timeout_tag = gtk_timeout_add (initial_timer_interval,
+       timeout_tag = g_timeout_add (initial_timer_interval,
                                       AutoSpin::_timer,
                                       this);
 }
@@ -164,7 +165,10 @@ AutoSpin::_timer (void *arg)
 void
 AutoSpin::set_value (gfloat value)
 {
-       adjustment.set_value (value);
+       if (round_to_steps)
+               adjustment.set_value (floor((value / step_increment) + 0.5f) * step_increment);
+       else
+               adjustment.set_value (value);
 }
 
 bool
@@ -193,7 +197,7 @@ AutoSpin::adjust_value (gfloat increment)
                }
        }
 
-       adjustment.set_value (val);
+       set_value(val);
        return done;
 }
 
@@ -212,7 +216,7 @@ AutoSpin::timer ()
                   request a much more frequent update.
                */
                
-               timeout_tag = gtk_timeout_add (timer_interval,
+               timeout_tag = g_timeout_add (timer_interval,
                                               _timer,
                                               this);
                have_timer = true;
@@ -253,6 +257,8 @@ AutoSpin::set_bounds (gfloat init, gfloat up, gfloat down, bool with_reset)
 {
        adjustment.set_upper(up);
        adjustment.set_lower(down);
+
+       initial = init;
        
        adjustment.changed ();