From e39a8fc9681a35b95e6d0f9b4e1a9b31d932f262 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Fri, 1 Jun 2012 00:41:28 +0000 Subject: [PATCH] Make faders visually desensitised when their tracks are in automation-play. git-svn-id: svn://localhost/ardour2/branches/3.0@12518 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/gain_meter.cc | 10 +++- gtk2_ardour/gain_meter.h | 3 +- gtk2_ardour/icons/fader_belt_desensitised.png | Bin 0 -> 2949 bytes .../icons/fader_belt_h_desensitised.png | Bin 0 -> 2372 bytes .../icons/fader_belt_h_thin_desensitised.png | Bin 0 -> 929 bytes gtk2_ardour/option_editor.cc | 6 +++ gtk2_ardour/option_editor.h | 1 + gtk2_ardour/processor_box.cc | 15 ++++-- gtk2_ardour/processor_box.h | 3 +- gtk2_ardour/route_time_axis.cc | 8 ++- gtk2_ardour/route_time_axis.h | 1 + libs/gtkmm2ext/gtkmm2ext/pixfader.h | 17 ++++-- libs/gtkmm2ext/gtkmm2ext/slider_controller.h | 4 +- libs/gtkmm2ext/pixfader.cc | 50 +++++++++++------- libs/gtkmm2ext/slider_controller.cc | 19 ++++--- 15 files changed, 98 insertions(+), 39 deletions(-) create mode 100644 gtk2_ardour/icons/fader_belt_desensitised.png create mode 100644 gtk2_ardour/icons/fader_belt_h_desensitised.png create mode 100644 gtk2_ardour/icons/fader_belt_h_thin_desensitised.png diff --git a/gtk2_ardour/gain_meter.cc b/gtk2_ardour/gain_meter.cc index 9f4e286f3a..166d29ef2c 100644 --- a/gtk2_ardour/gain_meter.cc +++ b/gtk2_ardour/gain_meter.cc @@ -62,6 +62,7 @@ sigc::signal GainMeterBase::ResetGroupPeakDisplays; GainMeter::MetricPatterns GainMeter::metric_patterns; Glib::RefPtr GainMeter::slider; +Glib::RefPtr GainMeter::slider_desensitised; void @@ -70,10 +71,15 @@ GainMeter::setup_slider_pix () if ((slider = ::get_icon ("fader_belt")) == 0) { throw failed_constructor(); } + + if ((slider_desensitised = ::get_icon ("fader_belt_desensitised")) == 0) { + throw failed_constructor(); + } } GainMeterBase::GainMeterBase (Session* s, const Glib::RefPtr& pix, + const Glib::RefPtr& pix_desensitised, bool horizontal, int fader_length) : gain_adjustment (gain_to_slider_position_with_max (1.0, Config->get_max_gain()), 0.0, 1.0, 0.01, 0.1) @@ -95,11 +101,13 @@ GainMeterBase::GainMeterBase (Session* s, if (horizontal) { gain_slider = manage (new HSliderController (pix, + pix_desensitised, &gain_adjustment, fader_length, false)); } else { gain_slider = manage (new VSliderController (pix, + pix_desensitised, &gain_adjustment, fader_length, false)); @@ -839,7 +847,7 @@ GainMeterBase::on_theme_changed() } GainMeter::GainMeter (Session* s, int fader_length) - : GainMeterBase (s, slider, false, fader_length) + : GainMeterBase (s, slider, slider_desensitised, false, fader_length) , gain_display_box(true, 0) , hbox(true, 2) { diff --git a/gtk2_ardour/gain_meter.h b/gtk2_ardour/gain_meter.h index e706606c76..4536bb691b 100644 --- a/gtk2_ardour/gain_meter.h +++ b/gtk2_ardour/gain_meter.h @@ -65,7 +65,7 @@ namespace Gtk { class GainMeterBase : virtual public sigc::trackable, ARDOUR::SessionHandlePtr { public: - GainMeterBase (ARDOUR::Session*, const Glib::RefPtr& pix, + GainMeterBase (ARDOUR::Session*, const Glib::RefPtr&, const Glib::RefPtr &, bool horizontal, int); virtual ~GainMeterBase (); @@ -231,6 +231,7 @@ class GainMeter : public GainMeterBase, public Gtk::VBox std::vector _types; static Glib::RefPtr slider; + static Glib::RefPtr slider_desensitised; }; #endif /* __ardour_gtk_gain_meter_h__ */ diff --git a/gtk2_ardour/icons/fader_belt_desensitised.png b/gtk2_ardour/icons/fader_belt_desensitised.png new file mode 100644 index 0000000000000000000000000000000000000000..9c7094e03908b32feead4cea20fc258c50dfd8d7 GIT binary patch literal 2949 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 literal 0 HcmV?d00001 diff --git a/gtk2_ardour/icons/fader_belt_h_desensitised.png b/gtk2_ardour/icons/fader_belt_h_desensitised.png new file mode 100644 index 0000000000000000000000000000000000000000..d2952d051eec646cef94e5022df75c80a84f9889 GIT binary patch literal 2372 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 |gSYqB zKyngLPXDcW0ad_Zx9^MdkZobm;WV#Fv8?g`TH{r_-H)WE%hCVnpzf1aO@kM{tGqWA^?I39l|`j;#Jle7c*IO;0nRlD7HPWP88V*s%k>xuU!U~#;e?$%V)!Ko3* z=|-Fos6n9p-b$@#=9xJFVdkLV)S_HVmUCR}xk7*JI%rS;lVhv8 z?%#C*dI2kE?Noi$HZ}kOrPSHtUCwc+6%f!Q{d+LS`KiXi29W+`oc(5(OuOR`CY_|i zyqJHhOS$NCGcmXr6u}o~j+gP0(hhW#(ig%g4FdQJ9Ux|TJ^&V;00000NkvXXu0mjf DFMF$` literal 0 HcmV?d00001 diff --git a/gtk2_ardour/option_editor.cc b/gtk2_ardour/option_editor.cc index 3e1fa73ca3..ca8fa0a2cf 100644 --- a/gtk2_ardour/option_editor.cc +++ b/gtk2_ardour/option_editor.cc @@ -176,7 +176,13 @@ FaderOption::FaderOption (string const & i, string const & n, sigc::slot throw failed_constructor (); } + _pix_desensitised = ::get_icon (X_("fader_belt_h_desensitised")); + if (_pix_desensitised == 0) { + throw failed_constructor (); + } + _db_slider = manage (new HSliderController (_pix, + _pix_desensitised, &_db_adjustment, 115, false)); diff --git a/gtk2_ardour/option_editor.h b/gtk2_ardour/option_editor.h index c70e6c6bab..5d6a48a024 100644 --- a/gtk2_ardour/option_editor.h +++ b/gtk2_ardour/option_editor.h @@ -362,6 +362,7 @@ private: Gtk::Adjustment _db_adjustment; Gtkmm2ext::HSliderController* _db_slider; Glib::RefPtr _pix; + Glib::RefPtr _pix_desensitised; Gtk::Entry _db_display; Gtk::Label _label; Gtk::HBox _box; diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc index d9c21dcc9b..c698aeed06 100644 --- a/gtk2_ardour/processor_box.cc +++ b/gtk2_ardour/processor_box.cc @@ -91,6 +91,7 @@ RefPtr ProcessorBox::rename_action; RefPtr ProcessorBox::edit_action; RefPtr ProcessorBox::edit_generic_action; Glib::RefPtr ProcessorEntry::_slider_pixbuf; +Glib::RefPtr ProcessorEntry::_slider_pixbuf_desensitised; ProcessorEntry::ProcessorEntry (ProcessorBox* parent, boost::shared_ptr p, Width w) : _button (ArdourButton::led_default_elements) @@ -121,7 +122,13 @@ ProcessorEntry::ProcessorEntry (ProcessorBox* parent, boost::shared_ptr p = _processor->what_can_be_automated (); for (set::iterator i = p.begin(); i != p.end(); ++i) { - Control* c = new Control (_slider_pixbuf, _processor->automation_control (*i), _processor->describe_parameter (*i)); + Control* c = new Control ( + _slider_pixbuf, + _slider_pixbuf_desensitised, + _processor->automation_control (*i), + _processor->describe_parameter (*i) + ); + _controls.push_back (c); if (boost::dynamic_pointer_cast (_processor) == 0) { @@ -301,6 +308,8 @@ ProcessorEntry::setup_slider_pix () { _slider_pixbuf = ::get_icon ("fader_belt_h_thin"); assert (_slider_pixbuf); + _slider_pixbuf_desensitised = ::get_icon ("fader_belt_h_thin_desensitised"); + assert (_slider_pixbuf_desensitised); } void @@ -398,10 +407,10 @@ ProcessorEntry::toggle_control_visibility (Control* c) _parent->update_gui_object_state (this); } -ProcessorEntry::Control::Control (Glib::RefPtr s, boost::shared_ptr c, string const & n) +ProcessorEntry::Control::Control (Glib::RefPtr s, Glib::RefPtr sd, boost::shared_ptr c, string const & n) : _control (c) , _adjustment (gain_to_slider_position_with_max (1.0, Config->get_max_gain()), 0, 1, 0.01, 0.1) - , _slider (s, &_adjustment, 0, false) + , _slider (s, sd, &_adjustment, 0, false) , _button (ArdourButton::Element (ArdourButton::Text | ArdourButton::Indicator)) , _ignore_ui_adjustment (false) , _visible (false) diff --git a/gtk2_ardour/processor_box.h b/gtk2_ardour/processor_box.h index 0e6582bb2f..a8a84e636c 100644 --- a/gtk2_ardour/processor_box.h +++ b/gtk2_ardour/processor_box.h @@ -140,6 +140,7 @@ protected: virtual void setup_visuals (); static Glib::RefPtr _slider_pixbuf; + static Glib::RefPtr _slider_pixbuf_desensitised; private: void led_clicked(); @@ -157,7 +158,7 @@ private: class Control { public: - Control (Glib::RefPtr, boost::shared_ptr, std::string const &); + Control (Glib::RefPtr, Glib::RefPtr, boost::shared_ptr, std::string const &); void set_pixel_width (int); void set_visible (bool); diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc index d1a97630d5..fc898b8f75 100644 --- a/gtk2_ardour/route_time_axis.cc +++ b/gtk2_ardour/route_time_axis.cc @@ -86,6 +86,7 @@ using namespace std; using std::list; Glib::RefPtr RouteTimeAxisView::slider; +Glib::RefPtr RouteTimeAxisView::slider_desensitised; void RouteTimeAxisView::setup_slider_pix () @@ -93,6 +94,10 @@ RouteTimeAxisView::setup_slider_pix () if ((slider = ::get_icon ("fader_belt_h")) == 0) { throw failed_constructor (); } + + if ((slider_desensitised = ::get_icon ("fader_belt_h_desensitised")) == 0) { + throw failed_constructor (); + } } RouteTimeAxisView::RouteTimeAxisView (PublicEditor& ed, Session* sess, Canvas& canvas) @@ -112,7 +117,7 @@ RouteTimeAxisView::RouteTimeAxisView (PublicEditor& ed, Session* sess, Canvas& c , playlist_action_menu (0) , mode_menu (0) , color_mode_menu (0) - , gm (sess, slider, true, 115) + , gm (sess, slider, slider_desensitised, true, 115) { } @@ -124,6 +129,7 @@ RouteTimeAxisView::set_route (boost::shared_ptr rt) gm.set_controls (_route, _route->shared_peak_meter(), _route->amp()); gm.get_level_meter().set_no_show_all(); gm.get_level_meter().setup_meters(50); + gm.update_gain_sensitive (); string str = gui_property ("height"); if (!str.empty()) { diff --git a/gtk2_ardour/route_time_axis.h b/gtk2_ardour/route_time_axis.h index 3cfd8c8774..f18d3361e0 100644 --- a/gtk2_ardour/route_time_axis.h +++ b/gtk2_ardour/route_time_axis.h @@ -296,6 +296,7 @@ protected: GainMeterBase gm; static Glib::RefPtr slider; + static Glib::RefPtr slider_desensitised; XMLNode* underlay_xml_node; bool set_underlay_state(); diff --git a/libs/gtkmm2ext/gtkmm2ext/pixfader.h b/libs/gtkmm2ext/gtkmm2ext/pixfader.h index e32fe7550b..9f1e4b75ca 100644 --- a/libs/gtkmm2ext/gtkmm2ext/pixfader.h +++ b/libs/gtkmm2ext/gtkmm2ext/pixfader.h @@ -32,7 +32,7 @@ namespace Gtkmm2ext { class PixFader : public Gtk::DrawingArea { public: - PixFader (Glib::RefPtr belt_image, Gtk::Adjustment& adjustment, int orientation, int); + PixFader (Glib::RefPtr, Glib::RefPtr, Gtk::Adjustment& adjustment, int orientation, int); virtual ~PixFader (); void set_fader_length (int); @@ -58,10 +58,17 @@ class PixFader : public Gtk::DrawingArea HORIZ=2, }; - private: - Cairo::RefPtr belt_context; - Cairo::RefPtr belt_surface; - Glib::RefPtr pixbuf; + private: + + enum State { + NORMAL, + DESENSITISED, + STATES + }; + + Cairo::RefPtr belt_context[STATES]; + Cairo::RefPtr belt_surface[STATES]; + Glib::RefPtr pixbuf[STATES]; int span, girth; int _orien; float left_r; diff --git a/libs/gtkmm2ext/gtkmm2ext/slider_controller.h b/libs/gtkmm2ext/gtkmm2ext/slider_controller.h index d6afefbdfc..64dd977e9b 100644 --- a/libs/gtkmm2ext/gtkmm2ext/slider_controller.h +++ b/libs/gtkmm2ext/gtkmm2ext/slider_controller.h @@ -39,7 +39,7 @@ namespace Gtkmm2ext { class SliderController : public Gtkmm2ext::PixFader { public: - SliderController (Glib::RefPtr image, Gtk::Adjustment* adj, int orientation, int); + SliderController (Glib::RefPtr, Glib::RefPtr, Gtk::Adjustment* adj, int orientation, int); virtual ~SliderController () {} @@ -66,6 +66,7 @@ class VSliderController : public SliderController { public: VSliderController (Glib::RefPtr image, + Glib::RefPtr image_desensitised, Gtk::Adjustment *adj, int, bool with_numeric = true); }; @@ -74,6 +75,7 @@ class HSliderController : public SliderController { public: HSliderController (Glib::RefPtr image, + Glib::RefPtr image_desensitised, Gtk::Adjustment *adj, int, bool with_numeric = true); }; diff --git a/libs/gtkmm2ext/pixfader.cc b/libs/gtkmm2ext/pixfader.cc index e146f7aa60..02597f331e 100644 --- a/libs/gtkmm2ext/pixfader.cc +++ b/libs/gtkmm2ext/pixfader.cc @@ -28,14 +28,19 @@ using namespace Gtkmm2ext; using namespace Gtk; using namespace std; -PixFader::PixFader (Glib::RefPtr belt, Gtk::Adjustment& adj, int orientation, int fader_length) - +PixFader::PixFader ( + Glib::RefPtr belt, + Glib::RefPtr belt_desensitised, + Gtk::Adjustment& adj, + int orientation, + int fader_length + ) : adjustment (adj), - pixbuf (belt), _orien(orientation) { - Cairo::Format format; - + pixbuf[NORMAL] = belt; + pixbuf[DESENSITISED] = belt_desensitised; + dragging = false; default_value = adjustment.get_value(); last_drawn = -1; @@ -44,9 +49,9 @@ PixFader::PixFader (Glib::RefPtr belt, Gtk::Adjustment& adj, int or view.y = 0; if (orientation == VERT) { - view.width = girth = pixbuf->get_width(); + view.width = girth = pixbuf[0]->get_width(); } else { - view.height = girth = pixbuf->get_height(); + view.height = girth = pixbuf[0]->get_height(); } set_fader_length (fader_length); @@ -56,16 +61,21 @@ PixFader::PixFader (Glib::RefPtr belt, Gtk::Adjustment& adj, int or adjustment.signal_value_changed().connect (mem_fun (*this, &PixFader::adjustment_changed)); adjustment.signal_changed().connect (mem_fun (*this, &PixFader::adjustment_changed)); - if (pixbuf->get_has_alpha()) { - format = Cairo::FORMAT_ARGB32; - } else { - format = Cairo::FORMAT_RGB24; - } - belt_surface = Cairo::ImageSurface::create (format, pixbuf->get_width(), pixbuf->get_height()); - belt_context = Cairo::Context::create (belt_surface); - Gdk::Cairo::set_source_pixbuf (belt_context, pixbuf, 0.0, 0.0); - belt_context->paint(); + for (int i = 0; i < STATES; ++i) { + Cairo::Format format; + + if (pixbuf[i]->get_has_alpha()) { + format = Cairo::FORMAT_ARGB32; + } else { + format = Cairo::FORMAT_RGB24; + } + belt_surface[i] = Cairo::ImageSurface::create (format, pixbuf[i]->get_width(), pixbuf[i]->get_height()); + belt_context[i] = Cairo::Context::create (belt_surface[i]); + Gdk::Cairo::set_source_pixbuf (belt_context[i], pixbuf[i], 0.0, 0.0); + belt_context[i]->paint(); + } + left_r = 0; left_g = 0; left_b = 0; @@ -96,6 +106,8 @@ PixFader::set_border_colors (uint32_t left, uint32_t right) bool PixFader::on_expose_event (GdkEventExpose* ev) { + int const pi = get_sensitive() ? NORMAL : DESENSITISED; + Cairo::RefPtr context = get_window()->create_cairo_context(); int srcx, srcy; int const ds = display_span (); @@ -103,9 +115,9 @@ PixFader::on_expose_event (GdkEventExpose* ev) /* account for fader lengths that are shorter than the fader pixbuf */ if (_orien == VERT) { - offset_into_pixbuf += pixbuf->get_height() / 2 - view.height; + offset_into_pixbuf += pixbuf[pi]->get_height() / 2 - view.height; } else { - offset_into_pixbuf += pixbuf->get_width() / 2 - view.width; + offset_into_pixbuf += pixbuf[pi]->get_width() / 2 - view.width; } context->rectangle (ev->area.x, ev->area.y, ev->area.width, ev->area.height); @@ -122,7 +134,7 @@ PixFader::on_expose_event (GdkEventExpose* ev) /* fader */ context->save(); - context->set_source (belt_surface, -srcx, -srcy); + context->set_source (belt_surface[pi], -srcx, -srcy); context->rectangle (0, 0, get_width(), get_height()); context->clip (); context->paint(); diff --git a/libs/gtkmm2ext/slider_controller.cc b/libs/gtkmm2ext/slider_controller.cc index f86fd19820..c55697a2ee 100644 --- a/libs/gtkmm2ext/slider_controller.cc +++ b/libs/gtkmm2ext/slider_controller.cc @@ -28,9 +28,14 @@ using namespace Gtkmm2ext; using namespace PBD; -SliderController::SliderController (Glib::RefPtr image, Gtk::Adjustment *adj, int orientation, int fader_length) - - : PixFader (image, *adj, orientation, fader_length), +SliderController::SliderController ( + Glib::RefPtr image, + Glib::RefPtr image_desensitised, + Gtk::Adjustment *adj, + int orientation, + int fader_length + ) + : PixFader (image, image_desensitised, *adj, orientation, fader_length), spin (*adj, 0, 2) { spin.set_name ("SliderControllerValue"); @@ -55,11 +60,11 @@ SliderController::on_button_press_event (GdkEventButton *ev) return PixFader::on_button_press_event (ev); } -VSliderController::VSliderController (Glib::RefPtr image, +VSliderController::VSliderController (Glib::RefPtr image, Glib::RefPtr image_desensitised, Gtk::Adjustment *adj, int fader_length, bool with_numeric) - : SliderController (image, adj, VERT, fader_length) + : SliderController (image, image_desensitised, adj, VERT, fader_length) { if (with_numeric) { spin_frame.add (spin); @@ -70,11 +75,11 @@ VSliderController::VSliderController (Glib::RefPtr image, } } -HSliderController::HSliderController (Glib::RefPtr image, +HSliderController::HSliderController (Glib::RefPtr image, Glib::RefPtr image_desensitised, Gtk::Adjustment *adj, int fader_length, bool with_numeric) - : SliderController (image, adj, HORIZ, fader_length) + : SliderController (image, image_desensitised, adj, HORIZ, fader_length) { if (with_numeric) { spin_frame.add (spin);