summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-05-04 16:12:26 +0200
committerRobin Gareus <robin@gareus.org>2017-05-04 16:13:10 +0200
commited4d17a8ff9000d66af91f4db33fd16cc388691e (patch)
tree54984cf0913c511e6fd8ed927c61c3460dcf213c
parentc784f7096611da43db0604a7641253773d5f1515 (diff)
Update Tempo Tapping:
* Allow tap with keyboard (Space, Enter) * Ignore double-clicks (2nd rapid event skewed calculation)
-rw-r--r--gtk2_ardour/tempo_dialog.cc28
-rw-r--r--gtk2_ardour/tempo_dialog.h5
2 files changed, 28 insertions, 5 deletions
diff --git a/gtk2_ardour/tempo_dialog.cc b/gtk2_ardour/tempo_dialog.cc
index db21474630..875b23c2f6 100644
--- a/gtk2_ardour/tempo_dialog.cc
+++ b/gtk2_ardour/tempo_dialog.cc
@@ -246,7 +246,8 @@ TempoDialog::init (const Timecode::BBT_Time& when, double bpm, double end_bpm, d
tap_tempo_button.show ();
get_vbox()->set_spacing (6);
get_vbox()->pack_end (tap_tempo_button);
- bpm_spinner.grab_focus ();
+ tap_tempo_button.can_focus ();
+ tap_tempo_button.grab_focus ();
set_name ("MetricDialog");
@@ -263,6 +264,7 @@ TempoDialog::init (const Timecode::BBT_Time& when, double bpm, double end_bpm, d
tempo_type.signal_changed().connect (sigc::mem_fun (*this, &TempoDialog::tempo_type_change));
lock_style.signal_changed().connect (sigc::mem_fun (*this, &TempoDialog::lock_style_change));
tap_tempo_button.signal_button_press_event().connect (sigc::mem_fun (*this, &TempoDialog::tap_tempo_button_press), false);
+ tap_tempo_button.signal_key_press_event().connect (sigc::mem_fun (*this, &TempoDialog::tap_tempo_key_press), false);
tap_tempo_button.signal_focus_out_event().connect (sigc::mem_fun (*this, &TempoDialog::tap_tempo_focus_out));
tempo_type_change();
@@ -412,7 +414,27 @@ TempoDialog::lock_style_change ()
}
bool
-TempoDialog::tap_tempo_button_press (GdkEventButton *ev)
+TempoDialog::tap_tempo_key_press (GdkEventKey*)
+{
+ tap_tempo ();
+ return false;
+}
+
+bool
+TempoDialog::tap_tempo_button_press (GdkEventButton* ev)
+{
+ if (ev->type == GDK_2BUTTON_PRESS || ev->type == GDK_3BUTTON_PRESS) {
+ return true;
+ }
+ if (ev->button != 1) {
+ return true;
+ }
+ tap_tempo ();
+ return false; // grab focus
+}
+
+void
+TempoDialog::tap_tempo ()
{
double t;
@@ -446,8 +468,6 @@ TempoDialog::tap_tempo_button_press (GdkEventButton *ev)
}
tap_count++;
last_t = t;
-
- return true;
}
bool
diff --git a/gtk2_ardour/tempo_dialog.h b/gtk2_ardour/tempo_dialog.h
index 06c9732fe5..baa671df43 100644
--- a/gtk2_ardour/tempo_dialog.h
+++ b/gtk2_ardour/tempo_dialog.h
@@ -58,9 +58,12 @@ private:
void pulse_change ();
void tempo_type_change ();
void lock_style_change ();
- bool tap_tempo_button_press (GdkEventButton* );
+ bool tap_tempo_key_press (GdkEventKey*);
+ bool tap_tempo_button_press (GdkEventButton*);
bool tap_tempo_focus_out (GdkEventFocus* );
+ void tap_tempo ();
+
typedef std::map<std::string,float> NoteTypes;
NoteTypes note_types;