when_beat_entry.signal_activate().connect (sigc::bind (sigc::mem_fun (*this, &TempoDialog::response), RESPONSE_ACCEPT));
when_beat_entry.signal_key_release_event().connect (sigc::mem_fun (*this, &TempoDialog::entry_key_release), false);
pulse_selector.signal_changed().connect (sigc::mem_fun (*this, &TempoDialog::pulse_change));
- tap_tempo_button.signal_clicked().connect (sigc::mem_fun (*this, &TempoDialog::tap_tempo));
+ tap_tempo_button.signal_button_press_event().connect (sigc::mem_fun (*this, &TempoDialog::tap_tempo_button_press), false);
}
bool
set_response_sensitive (RESPONSE_ACCEPT, is_user_input_valid());
}
-void
-TempoDialog::tap_tempo ()
+
+bool
+TempoDialog::tap_tempo_button_press (GdkEventButton *ev)
{
gint64 now;
- now = g_get_monotonic_time (); // microseconds
+ now = ev->time; // milliseconds
if (last_tap > 0) {
double interval, bpm;
static const double decay = 0.5;
- interval = (now - last_tap) * 1.0e-6;
+ interval = (now - last_tap) * 1.0e-3;
if (interval <= 6.0) {
// >= 10 bpm, say
if (average_interval > 0) {
average_interval = 0;
}
last_tap = now;
+ return false;
}
MeterDialog::MeterDialog (TempoMap& map, framepos_t frame, const string&)
bool bpm_button_release (GdkEventButton* );
bool entry_key_release (GdkEventKey* );
void pulse_change ();
- void tap_tempo ();
+ bool tap_tempo_button_press (GdkEventButton* );
typedef std::map<std::string,float> NoteTypes;
NoteTypes note_types;
- gint64 last_tap;
+ guint32 last_tap;
double average_interval;
Gtk::ComboBoxText pulse_selector;