diff --git a/gtk2_ardour/ardour3_ui_dark.rc.in b/gtk2_ardour/ardour3_ui_dark.rc.in index 7840ac7007..a945cd8240 100644 --- a/gtk2_ardour/ardour3_ui_dark.rc.in +++ b/gtk2_ardour/ardour3_ui_dark.rc.in @@ -352,6 +352,12 @@ style "solo_button_active" = "small_button" fg[PRELIGHT] = { 0, 0, 0 } } +style "mixer_invert_button" = "small_button" +{ + bg[ACTIVE] = { 1.0, 0.749, 0.247 } + fg[ACTIVE] = { 0, 0, 0 } +} + style "mixer_solo_button" = "solo_button" { font_name = "@FONT_SMALLER@" @@ -1430,8 +1436,8 @@ widget "*MixerSoloButton-active" style:highest "mixer_solo_button_active" widget "*TrackLoopButton*" style:highest "track_loop_button" widget "*PanAutomationLineSelector*" style:highest "multiline_combo" widget "*EditorTimeButton*" style:highest "time_button" -widget "*MixerPhaseInvertButton*" style:highest "very_small_button" -widget "*MixerPhaseInvertButton.*" style:highest "very_small_button" +widget "*MixerInvertButton*" style:highest "mixer_invert_button" +widget "*MixerInvertButton.*" style:highest "mixer_invert_button" widget "*MixerAutomationRecordingButton*" style:highest "very_small_button" widget "*MixerAutomationRecordingButton.*" style:highest "very_small_button" widget "*MixerAutomationModeButton*" style:highest "very_small_button" diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc index b7d0536ce1..abfa792f4b 100644 --- a/gtk2_ardour/mixer_strip.cc +++ b/gtk2_ardour/mixer_strip.cc @@ -84,7 +84,7 @@ MixerStrip::MixerStrip (Mixer_UI& mx, Session* sess, bool in_mixer) , panners (sess) , _mono_button (_("Mono")) , button_table (3, 2) - , middle_button_table (1, 2) + , middle_button_table (2, 2) , bottom_button_table (1, 2) , meter_point_label (_("pre")) , comment_button (_("Comments")) @@ -183,6 +183,7 @@ MixerStrip::init () mute_button->set_name ("MixerMuteButton"); solo_button->set_name ("MixerSoloButton"); + invert_button->set_name ("MixerInvertButton"); button_table.set_homogeneous (true); button_table.set_spacings (0); @@ -194,6 +195,7 @@ MixerStrip::init () middle_button_table.set_spacings (0); middle_button_table.attach (*mute_button, 0, 1, 0, 1); middle_button_table.attach (*solo_button, 1, 2, 0, 1); + middle_button_table.attach (*invert_button, 0, 2, 1, 2); bottom_button_table.set_col_spacings (0); bottom_button_table.set_homogeneous (true); @@ -1727,7 +1729,9 @@ MixerStrip::revert_to_default_display () void MixerStrip::set_button_names () { - switch (_width) { + invert_button_label.set_text (X_("Ø")); + + switch (_width) { case Wide: rec_enable_button_label.set_text (_("Rec")); mute_button_label.set_text (_("Mute")); diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc index f5bf2f9208..60fead1e21 100644 --- a/gtk2_ardour/route_ui.cc +++ b/gtk2_ardour/route_ui.cc @@ -108,6 +108,13 @@ RouteUI::init () multiple_mute_change = false; multiple_solo_change = false; + invert_button = manage (new BindableToggleButton ()); + // mute_button->set_self_managed (true); + invert_button->set_name ("InvertButton"); + invert_button->add (invert_button_label); + invert_button_label.show (); + UI::instance()->set_tip (invert_button, _("Invert (Phase reverse) this track"), ""); + mute_button = manage (new BindableToggleButton ()); // mute_button->set_self_managed (true); mute_button->set_name ("MuteButton"); @@ -151,6 +158,9 @@ RouteUI::init () solo_button->signal_button_release_event().connect (sigc::mem_fun(*this, &RouteUI::solo_release), false); mute_button->signal_button_press_event().connect (sigc::mem_fun(*this, &RouteUI::mute_press), false); mute_button->signal_button_release_event().connect (sigc::mem_fun(*this, &RouteUI::mute_release), false); + invert_button->signal_button_press_event().connect (sigc::mem_fun(*this, &RouteUI::invert_press), false); + invert_button->signal_button_release_event().connect (sigc::mem_fun(*this, &RouteUI::invert_release), false); + } void @@ -222,6 +232,7 @@ RouteUI::set_route (boost::shared_ptr rp) solo_button->unset_flags (Gtk::CAN_FOCUS); mute_button->show(); + invert_button->show (); if (_route->is_monitor()) { solo_button->hide (); @@ -237,6 +248,18 @@ RouteUI::set_route (boost::shared_ptr rp) map_frozen (); } +bool +RouteUI::invert_press (GdkEventButton* ev) +{ + return false; +} + +bool +RouteUI::invert_release (GdkEventButton* ev) +{ + return false; +} + bool RouteUI::mute_press (GdkEventButton* ev) { diff --git a/gtk2_ardour/route_ui.h b/gtk2_ardour/route_ui.h index 458910bd69..66d2629634 100644 --- a/gtk2_ardour/route_ui.h +++ b/gtk2_ardour/route_ui.h @@ -85,6 +85,7 @@ class RouteUI : public virtual AxisView bool multiple_mute_change; bool multiple_solo_change; + BindableToggleButton* invert_button; BindableToggleButton* mute_button; BindableToggleButton* solo_button; BindableToggleButton* rec_enable_button; /* audio tracks */ @@ -92,6 +93,7 @@ class RouteUI : public virtual AxisView Gtk::Label solo_button_label; Gtk::Label mute_button_label; + Gtk::Label invert_button_label; Gtk::Label rec_enable_button_label; void send_blink (bool); @@ -104,12 +106,13 @@ class RouteUI : public virtual AxisView Gtk::Menu* solo_menu; Gtk::Menu* sends_menu; - XMLNode *xml_node; void ensure_xml_node (); virtual XMLNode* get_automation_child_xml_node (Evoral::Parameter param); + bool invert_press(GdkEventButton*); + bool invert_release(GdkEventButton*); bool mute_press(GdkEventButton*); bool mute_release(GdkEventButton*); bool solo_press(GdkEventButton*);