Use ev->time rather than g_get_monotonic_time() for tap tempo
authorColin Fletcher <colin.m.fletcher@googlemail.com>
Mon, 9 Mar 2015 19:19:16 +0000 (19:19 +0000)
committerColin Fletcher <colin.m.fletcher@googlemail.com>
Mon, 9 Mar 2015 19:19:16 +0000 (19:19 +0000)
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.

gtk2_ardour/tempo_dialog.cc
gtk2_ardour/tempo_dialog.h

index 18b5e144cbc9a758834fbca92db2b09132e29d6c..e11644131b4c4bf73590154edf8d685058648711 100644 (file)
@@ -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&)
index da924ac8594ac7313ad8d391ebba96fe6efdbc0a..67e6e6ec76fb1904cc6fd46d7968fd50eb278698 100644 (file)
@@ -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;