summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Fletcher <colin.m.fletcher@googlemail.com>2015-03-09 19:19:16 +0000
committerColin Fletcher <colin.m.fletcher@googlemail.com>2015-03-09 19:19:16 +0000
commit37b0e8ac90aae8d5359f67a7a32bfe78ad6422af (patch)
tree83703827b06406f0e045f584a18a36b1a8ed95dc
parentf7a2df1c9a8c540f7e5778561c8527c525874b84 (diff)
Use ev->time rather than g_get_monotonic_time() for tap tempo
Connect signal_button_press_event of 'Tap Tempo' button rather than signal_clicked so we can use the time member of GdkEventButton to calculate the tapped tempo. It seems to me that this is the right thing to do.
-rw-r--r--gtk2_ardour/tempo_dialog.cc12
-rw-r--r--gtk2_ardour/tempo_dialog.h4
2 files changed, 9 insertions, 7 deletions
diff --git a/gtk2_ardour/tempo_dialog.cc b/gtk2_ardour/tempo_dialog.cc
index 18b5e144cb..e11644131b 100644
--- a/gtk2_ardour/tempo_dialog.cc
+++ b/gtk2_ardour/tempo_dialog.cc
@@ -178,7 +178,7 @@ TempoDialog::init (const Timecode::BBT_Time& when, double bpm, double note_type,
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
@@ -258,17 +258,18 @@ TempoDialog::pulse_change ()
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) {
@@ -287,6 +288,7 @@ TempoDialog::tap_tempo ()
average_interval = 0;
}
last_tap = now;
+ return false;
}
MeterDialog::MeterDialog (TempoMap& map, framepos_t frame, const string&)
diff --git a/gtk2_ardour/tempo_dialog.h b/gtk2_ardour/tempo_dialog.h
index da924ac859..67e6e6ec76 100644
--- a/gtk2_ardour/tempo_dialog.h
+++ b/gtk2_ardour/tempo_dialog.h
@@ -53,12 +53,12 @@ private:
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;