fix midi automation sliders
Allow controls to work without a list. see also34c1465
andb469cd2
This commit is contained in:
parent
8d8717800d
commit
d34bd9e6a0
|
@ -120,6 +120,7 @@ AutomationController::start_touch()
|
|||
void
|
||||
AutomationController::end_touch ()
|
||||
{
|
||||
if (!_controllable->alist()) return;
|
||||
if (_controllable->automation_state() == Touch) {
|
||||
|
||||
bool mark = false;
|
||||
|
|
|
@ -117,6 +117,7 @@ AutomationControl::set_automation_style (AutoStyle as)
|
|||
void
|
||||
AutomationControl::start_touch(double when)
|
||||
{
|
||||
if (!_list) return;
|
||||
if (!touching()) {
|
||||
if (alist()->automation_state() == Touch) {
|
||||
alist()->start_touch (when);
|
||||
|
@ -129,6 +130,7 @@ AutomationControl::start_touch(double when)
|
|||
void
|
||||
AutomationControl::stop_touch(bool mark, double when)
|
||||
{
|
||||
if (!_list) return;
|
||||
if (touching()) {
|
||||
set_touching (false);
|
||||
if (alist()->automation_state() == Touch) {
|
||||
|
|
|
@ -643,15 +643,17 @@ MidiTrack::set_parameter_automation_state (Evoral::Parameter param, AutoState st
|
|||
void
|
||||
MidiTrack::MidiControl::set_value(double val)
|
||||
{
|
||||
const Evoral::Parameter ¶meter = _list ? _list->parameter() : Control::parameter();
|
||||
|
||||
bool valid = false;
|
||||
if (isinf(val)) {
|
||||
cerr << "MIDIControl value is infinity" << endl;
|
||||
} else if (isnan(val)) {
|
||||
cerr << "MIDIControl value is NaN" << endl;
|
||||
} else if (val < _list->parameter().min()) {
|
||||
cerr << "MIDIControl value is < " << _list->parameter().min() << endl;
|
||||
} else if (val > _list->parameter().max()) {
|
||||
cerr << "MIDIControl value is > " << _list->parameter().max() << endl;
|
||||
} else if (val < parameter.min()) {
|
||||
cerr << "MIDIControl value is < " << parameter.min() << endl;
|
||||
} else if (val > parameter.max()) {
|
||||
cerr << "MIDIControl value is > " << parameter.max() << endl;
|
||||
} else {
|
||||
valid = true;
|
||||
}
|
||||
|
@ -660,14 +662,14 @@ MidiTrack::MidiControl::set_value(double val)
|
|||
return;
|
||||
}
|
||||
|
||||
assert(val <= _list->parameter().max());
|
||||
if ( ! automation_playback()) {
|
||||
assert(val <= parameter.max());
|
||||
if ( ! _list || ! automation_playback()) {
|
||||
size_t size = 3;
|
||||
uint8_t ev[3] = { _list->parameter().channel(), uint8_t (val), 0 };
|
||||
switch(_list->parameter().type()) {
|
||||
uint8_t ev[3] = { parameter.channel(), uint8_t (val), 0 };
|
||||
switch(parameter.type()) {
|
||||
case MidiCCAutomation:
|
||||
ev[0] += MIDI_CMD_CONTROL;
|
||||
ev[1] = _list->parameter().id();
|
||||
ev[1] = parameter.id();
|
||||
ev[2] = int(val);
|
||||
break;
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user