Vkeybd: improve velocity dropdown usability
Limit velocity dropdown to a subset of most used values, but allow to select any value using mouse-wheel
This commit is contained in:
parent
bc776eac97
commit
24b46d1f75
@ -62,11 +62,22 @@ VirtualKeyboardWindow::VirtualKeyboardWindow ()
|
||||
sprintf (buf, "%d", c + 1);
|
||||
_midi_channel.append_text_item (buf);
|
||||
}
|
||||
for (int v = 1; v < 128; ++v) {
|
||||
|
||||
#if 0
|
||||
for (int v = 0; v <= 128; v += 16) {
|
||||
char buf[16];
|
||||
sprintf (buf, "%d", v);
|
||||
sprintf (buf, "%d", std::min (127, std::max (1, v)));
|
||||
_piano_velocity.append_text_item (buf);
|
||||
}
|
||||
#else
|
||||
_piano_velocity.append_text_item ("8");
|
||||
_piano_velocity.append_text_item ("32");
|
||||
_piano_velocity.append_text_item ("64");
|
||||
_piano_velocity.append_text_item ("82");
|
||||
_piano_velocity.append_text_item ("100");
|
||||
_piano_velocity.append_text_item ("127");
|
||||
#endif
|
||||
|
||||
for (int k = -1; k < 8; ++k) {
|
||||
char buf[16];
|
||||
sprintf (buf, "%d", k);
|
||||
@ -101,7 +112,7 @@ VirtualKeyboardWindow::VirtualKeyboardWindow ()
|
||||
set_tooltip (_midi_channel, _("Set the MIDI Channel of the produced MIDI events"));
|
||||
set_tooltip (_piano_octave_key, _("The center octave, and lowest octave for keyboard control. Change with Arrow left/right."));
|
||||
set_tooltip (_piano_octave_range, _("Available octave range, centered around the key-octave."));
|
||||
set_tooltip (_piano_velocity, _("The default velocity to use with keyboard control, and when y-axis click-position is disabled."));
|
||||
set_tooltip (_piano_velocity, _("The velocity to use with keyboard control. Use mouse-scroll for fine-grained control"));
|
||||
set_tooltip (_transpose_output, _("Chromatic transpose note events. Notes transposed outside the range of 0,,127 are discarded."));
|
||||
|
||||
set_tooltip (_send_panic, _("Send MIDI Panic message for current channel"));
|
||||
@ -161,8 +172,8 @@ VirtualKeyboardWindow::VirtualKeyboardWindow ()
|
||||
|
||||
tbl->attach (*manage (new ArdourVSpacer), col, col + 1, 0, 2, SHRINK, FILL, 4, 0);
|
||||
++col;
|
||||
tbl->attach (_piano_velocity, col, col + 1, 0, 1, SHRINK, SHRINK, 4, 0);
|
||||
tbl->attach (*manage (new Label (_("Vel."))), col, col + 1, 1, 2, SHRINK, SHRINK, 4, 0);
|
||||
tbl->attach (_piano_velocity, col, col + 1, 0, 1, SHRINK, SHRINK, 4, 0);
|
||||
tbl->attach (*manage (new Label (_("Velocity"))), col, col + 1, 1, 2, SHRINK, SHRINK, 4, 0);
|
||||
++col;
|
||||
|
||||
tbl->attach (*manage (new ArdourVSpacer), col, col + 1, 0, 2, SHRINK, FILL, 4, 0);
|
||||
@ -181,6 +192,10 @@ VirtualKeyboardWindow::VirtualKeyboardWindow ()
|
||||
vbox->pack_start (_piano, true, true);
|
||||
add (*vbox);
|
||||
|
||||
set_size_request_to_display_given_text (_piano_octave_key, "88", 19, 2);
|
||||
set_size_request_to_display_given_text (_piano_octave_range, "88", 19, 2);
|
||||
set_size_request_to_display_given_text (_piano_velocity, "888", 19, 2);
|
||||
|
||||
/* GUI signals */
|
||||
|
||||
_pitch_adjustment.signal_value_changed ().connect (sigc::mem_fun (*this, &VirtualKeyboardWindow::pitch_slider_adjusted));
|
||||
@ -196,6 +211,9 @@ VirtualKeyboardWindow::VirtualKeyboardWindow ()
|
||||
|
||||
_send_panic.signal_button_release_event ().connect (sigc::mem_fun (*this, &VirtualKeyboardWindow::send_panic_message), false);
|
||||
|
||||
_piano_velocity.disable_scrolling ();
|
||||
_piano_velocity.signal_scroll_event().connect (sigc::mem_fun(*this, &VirtualKeyboardWindow::on_velocity_scroll_event), false);
|
||||
|
||||
/* piano keyboard signals */
|
||||
|
||||
_piano.NoteOn.connect (sigc::mem_fun (*this, &VirtualKeyboardWindow::note_on_event_handler));
|
||||
@ -393,6 +411,26 @@ VirtualKeyboardWindow::send_panic_message (GdkEventButton*)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
VirtualKeyboardWindow::on_velocity_scroll_event (GdkEventScroll* ev)
|
||||
{
|
||||
int v = PBD::atoi (_piano_velocity.get_text ());
|
||||
switch (ev->direction) {
|
||||
case GDK_SCROLL_DOWN:
|
||||
v = std::min (127, v + 1);
|
||||
break;
|
||||
case GDK_SCROLL_UP:
|
||||
v = std::max (1, v - 1);
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
char buf[16];
|
||||
sprintf (buf, "%d", v);
|
||||
_piano_velocity.set_active (buf);
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
VirtualKeyboardWindow::update_velocity_settings ()
|
||||
{
|
||||
|
@ -126,6 +126,7 @@ private:
|
||||
void cc_key_changed (size_t);
|
||||
void update_cc (size_t, int);
|
||||
bool send_panic_message (GdkEventButton*);
|
||||
bool on_velocity_scroll_event (GdkEventScroll*);
|
||||
|
||||
APianoKeyboard _piano;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user