$Id$
*/
-#include <gtkmm2ext/auto_spin.h>
#include <cmath>
+#include "gtkmm2ext/auto_spin.h"
+#include "gtkmm2ext/keyboard.h"
using namespace Gtkmm2ext;
using namespace std;
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)
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;
}
}
gint
-AutoSpin::stop_spinning (GdkEventButton *ev)
+AutoSpin::stop_spinning (GdkEventButton */*ev*/)
{
need_timer = false;
stop_timer ();
stop_spinning (0);
- if (ev->state & GDK_SHIFT_MASK) {
+ if (ev->state & Keyboard::TertiaryModifier) {
/* use page shift */
shifted = true;
}
- if (ev->state & GDK_CONTROL_MASK) {
+ if (ev->state & Keyboard::PrimaryModifier) {
/* go to upper/lower bound on button1/button2 */
control = true;
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);
}
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
}
}
- adjustment.set_value (val);
+ set_value(val);
return done;
}
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;
{
adjustment.set_upper(up);
adjustment.set_lower(down);
+
+ initial = init;
adjustment.changed ();