diff --git a/gtk2_ardour/automation_line.cc b/gtk2_ardour/automation_line.cc index f743c022bb..4d5ce9a4cd 100644 --- a/gtk2_ardour/automation_line.cc +++ b/gtk2_ardour/automation_line.cc @@ -94,6 +94,7 @@ AutomationLine::AutomationLine (const string& name, :_name (name) , _height (0) , _line_color_name ("automation line") + , _insensitive_line_color (0x0) , _view_index_offset (0) , alist (al) , _visible (Line) @@ -147,11 +148,7 @@ AutomationLine::set_sensitive (bool yn) { _sensitive = yn; - if (yn) { - set_line_color (_line_color_name); - } else { - set_line_color (UIConfiguration::instance().color ("nonexistent")); - } + set_line_color (_line_color_name, _line_color_mod); for (auto & cp : control_points) { if (yn) { @@ -299,14 +296,15 @@ void AutomationLine::set_line_color (string const & color_name, string color_mod) { _line_color_name = color_name; + _line_color_mod = color_mod; if (_sensitive) { line->set_outline_color (UIConfiguration::instance().color (color_name)); } else { - line->set_outline_color (UIConfiguration::instance().color (color_name + " insensitive")); + line->set_outline_color (_insensitive_line_color); } - /* The fill color is used to shade the area under some + /* The fill color (and thus the color_mod) is used to shade the area under some * automation lines */ @@ -331,16 +329,9 @@ AutomationLine::set_colors () } void -AutomationLine::set_line_color (uint32_t color) +AutomationLine::set_insensitive_line_color (uint32_t color) { - line->set_outline_color (color); - line->set_fill (false); - - if (_control_points_inherit_color) { - for (auto & cp : control_points) { - cp->set_color (); - } - } + _insensitive_line_color = color; } uint32_t diff --git a/gtk2_ardour/automation_line.h b/gtk2_ardour/automation_line.h index 6f574e288c..ef863e1d28 100644 --- a/gtk2_ardour/automation_line.h +++ b/gtk2_ardour/automation_line.h @@ -114,7 +114,7 @@ public: guint32 height() const { return _height; } void set_line_color (std::string const & color, std::string color_mode = std::string()); - void set_line_color (uint32_t color); + void set_insensitive_line_color (uint32_t color); uint32_t get_line_color() const; uint32_t get_line_fill_color() const; uint32_t get_line_selected_color() const; @@ -195,6 +195,7 @@ protected: guint32 _height; std::string _line_color_name; std::string _line_color_mod; + uint32_t _insensitive_line_color; uint32_t _view_index_offset; std::shared_ptr alist; diff --git a/gtk2_ardour/midi_cue_view.cc b/gtk2_ardour/midi_cue_view.cc index 79f9a586a3..fbf2a31b0b 100644 --- a/gtk2_ardour/midi_cue_view.cc +++ b/gtk2_ardour/midi_cue_view.cc @@ -280,6 +280,28 @@ MidiCueView::swap_automation_channel (int new_channel) } } +Gtkmm2ext::Color +MidiCueView::line_color_for (Evoral::Parameter const & param) +{ + UIConfiguration& uic (UIConfiguration::instance()); + + switch (param.type()) { + case MidiCCAutomation: + switch (param.id()) { + case MIDI_CTL_MSB_EXPRESSION: + return uic.color ("pianoroll: insensitive expression line"); + case MIDI_CTL_MSB_MODWHEEL: + return uic.color ("pianoroll: insensitive modulation line"); + } + break; + case MidiPitchBenderAutomation: + return uic.color ("pianoroll: insensitive bender line"); + case MidiChannelPressureAutomation: + return uic.color ("pianoroll: insensitive pressure line"); + } + + return 0xff0000ff; +} void MidiCueView::update_automation_display (Evoral::Parameter const & param, SelectionOperation op) { @@ -349,6 +371,7 @@ MidiCueView::update_automation_display (Evoral::Parameter const & param, Selecti ac->alist(), ac->desc())); line->set_sensitive (false); + line->set_insensitive_line_color (line_color_for (param)); AutomationDisplayState cad (ac, line, false); diff --git a/gtk2_ardour/midi_cue_view.h b/gtk2_ardour/midi_cue_view.h index 4af11ac0ce..b87d7fa73f 100644 --- a/gtk2_ardour/midi_cue_view.h +++ b/gtk2_ardour/midi_cue_view.h @@ -125,4 +125,5 @@ class MidiCueView : public MidiView void unset_active_automation (); bool midi_canvas_group_event (GdkEvent*); + Gtkmm2ext::Color line_color_for (Evoral::Parameter const &); };