summaryrefslogtreecommitdiff
path: root/gtk2_ardour/gtk_pianokeyboard.c
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2010-08-03 19:22:57 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2010-08-03 19:22:57 +0000
commitb1f5a6a68d0b62a61684b2c011a97de825256a59 (patch)
tree856af95d148d2c0b395fac1d3483159d54ee5253 /gtk2_ardour/gtk_pianokeyboard.c
parentbd69ec8b25e825e0bf6399e19e34e553189a0c28 (diff)
a bunch of tweaks for the step entry process (computer keyboard input now works, for example)
git-svn-id: svn://localhost/ardour2/branches/3.0@7532 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/gtk_pianokeyboard.c')
-rw-r--r--gtk2_ardour/gtk_pianokeyboard.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/gtk2_ardour/gtk_pianokeyboard.c b/gtk2_ardour/gtk_pianokeyboard.c
index b3cfa4f410..bc51edb371 100644
--- a/gtk2_ardour/gtk_pianokeyboard.c
+++ b/gtk2_ardour/gtk_pianokeyboard.c
@@ -47,6 +47,7 @@
enum {
NOTE_ON_SIGNAL,
NOTE_OFF_SIGNAL,
+ REST_SIGNAL,
LAST_SIGNAL
};
@@ -183,6 +184,12 @@ release_key(PianoKeyboard *pk, int key)
return 1;
}
+static void
+rest (PianoKeyboard* pk)
+{
+ g_signal_emit_by_name(GTK_WIDGET(pk), "rest");
+}
+
static void
stop_unsustained_notes(PianoKeyboard *pk)
{
@@ -249,6 +256,8 @@ bind_keys_qwerty(PianoKeyboard *pk)
{
clear_notes(pk);
+ bind_key(pk, "space", 128);
+
/* Lower keyboard row - "zxcvbnm". */
bind_key(pk, "z", 12); /* C0 */
bind_key(pk, "s", 13);
@@ -300,6 +309,8 @@ bind_keys_azerty(PianoKeyboard *pk)
{
clear_notes(pk);
+ bind_key(pk, "space", 128);
+
/* Lower keyboard row - "wxcvbn,". */
bind_key(pk, "w", 12); /* C0 */
bind_key(pk, "s", 13);
@@ -367,6 +378,14 @@ keyboard_event_handler(GtkWidget *mk, GdkEventKey *event, gpointer notused)
return FALSE;
}
+ if (note == 128) {
+ if (event->type == GDK_KEY_RELEASE) {
+ rest (pk);
+ }
+
+ return TRUE;
+ }
+
note += pk->octave * 12;
assert(note >= 0);
@@ -586,6 +605,10 @@ piano_keyboard_class_init(PianoKeyboardClass *klass)
G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
0, NULL, NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT);
+ piano_keyboard_signals[REST_SIGNAL] = g_signal_new ("rest",
+ G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
+ 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+
widget_klass = (GtkWidgetClass*) klass;
widget_klass->expose_event = piano_keyboard_expose;
@@ -621,6 +644,7 @@ piano_keyboard_get_type(void)
sizeof (PianoKeyboard),
0, /* n_preallocs */
(GInstanceInitFunc) piano_keyboard_init,
+ 0, /* value_table */
};
mk_type = g_type_register_static(GTK_TYPE_DRAWING_AREA, "PianoKeyboard", &mk_info, 0);