diff options
author | Colin Fletcher <colin.m.fletcher@googlemail.com> | 2015-03-09 19:19:16 +0000 |
---|---|---|
committer | Colin Fletcher <colin.m.fletcher@googlemail.com> | 2015-03-09 19:19:16 +0000 |
commit | 37b0e8ac90aae8d5359f67a7a32bfe78ad6422af (patch) | |
tree | 83703827b06406f0e045f584a18a36b1a8ed95dc | |
parent | f7a2df1c9a8c540f7e5778561c8527c525874b84 (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.cc | 12 | ||||
-rw-r--r-- | gtk2_ardour/tempo_dialog.h | 4 |
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; |