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 /gtk2_ardour | |
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.
Diffstat (limited to 'gtk2_ardour')
-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; |