diff --git a/gtk2_ardour/gain_meter.cc b/gtk2_ardour/gain_meter.cc index 2633d4b1ac..ac137044bf 100644 --- a/gtk2_ardour/gain_meter.cc +++ b/gtk2_ardour/gain_meter.cc @@ -111,6 +111,8 @@ GainMeterBase::GainMeterBase (Session* s, bool horizontal, int fader_length, int , _data_type (DataType::AUDIO) , _clear_meters (true) , _meter_peaked (false) + , _unscaled_fader_length (fader_length) + , _unscaled_fader_girth (fader_girth) { using namespace Menu_Helpers; @@ -217,8 +219,8 @@ GainMeterBase::GainMeterBase (Session* s, bool horizontal, int fader_length, int RedrawMetrics.connect (sigc::mem_fun(*this, &GainMeterBase::redraw_metrics)); UI::instance()->theme_changed.connect (sigc::mem_fun(*this, &GainMeterBase::on_theme_changed)); - UIConfiguration::instance().ColorsChanged.connect (sigc::bind(sigc::mem_fun (*this, &GainMeterBase::color_handler), false)); - UIConfiguration::instance().DPIReset.connect (sigc::bind(sigc::mem_fun (*this, &GainMeterBase::color_handler), true)); + UIConfiguration::instance().ColorsChanged.connect (sigc::mem_fun (*this, &GainMeterBase::color_handler)); + UIConfiguration::instance().DPIReset.connect (sigc::mem_fun (*this, &GainMeterBase::reset_dpi)); } GainMeterBase::~GainMeterBase () @@ -383,7 +385,7 @@ GainMeterBase::setup_meters (int len) if (len == 0) { assert (gain_slider); Gtk::Requisition sz; - sz = gain_slider->size_request (); + sz = gain_slider->size_request (); // XXX len = gain_slider->orientation () == FaderWidget::VERT ? sz.height : sz.width; } @@ -925,11 +927,22 @@ GainMeterBase::update_meters() } } -void GainMeterBase::color_handler(bool /*dpi*/) +void +GainMeterBase::color_handler() { setup_meters(); } +void +GainMeterBase::reset_dpi () +{ + int length = rint (_unscaled_fader_length * UIConfiguration::instance().get_ui_scale()); + int girth = rint (_unscaled_fader_girth * UIConfiguration::instance().get_ui_scale()); + dynamic_cast(gain_slider)->update_min_size (length, girth); + + setup_meters(); +} + void GainMeterBase::set_width (Width w, int len) { @@ -979,7 +992,6 @@ GainMeter::GainMeter (Session* s, int fader_length) gain_display_box.pack_start (peak_display, true, true); meter_metric_area.set_name ("AudioTrackMetrics"); - meter_metric_area.set_size_request(PX_SCALE(24, 24), -1); gain_automation_state_button.set_name ("mixer strip button"); @@ -987,8 +999,6 @@ GainMeter::GainMeter (Session* s, int fader_length) gain_automation_state_button.set_can_focus (false); - gain_automation_state_button.set_size_request (PX_SCALE(12, 15), PX_SCALE(12, 15)); - fader_vbox.set_spacing (0); fader_vbox.pack_start (*gain_slider, true, true); @@ -997,20 +1007,17 @@ GainMeter::GainMeter (Session* s, int fader_length) hbox.pack_start (fader_alignment, true, true); - set_spacing (PX_SCALE(2, 2)); - pack_start (gain_display_box, Gtk::PACK_SHRINK); pack_start (hbox, true, true); meter_alignment.set (0.5, 0.5, 0.0, 1.0); meter_alignment.add (*level_meter); + reset_dpi (); + meter_metric_area.signal_expose_event().connect ( sigc::mem_fun(*this, &GainMeter::meter_metrics_expose)); - meter_ticks1_area.set_size_request (PX_SCALE(3, 3), -1); - meter_ticks2_area.set_size_request (PX_SCALE(3, 3), -1); - meter_ticks1_area.signal_expose_event().connect ( sigc::mem_fun(*this, &GainMeter::meter_ticks1_expose)); meter_ticks2_area.signal_expose_event().connect ( @@ -1023,6 +1030,20 @@ GainMeter::GainMeter (Session* s, int fader_length) meter_metric_area.set_no_show_all (); } + +void +GainMeter::reset_dpi () +{ + meter_metric_area.set_size_request(PX_SCALE(24, 24), -1); + gain_automation_state_button.set_size_request (PX_SCALE(12, 15), PX_SCALE(12, 15)); + set_spacing (PX_SCALE(2, 2)); + meter_ticks1_area.set_size_request (PX_SCALE(3, 3), -1); + meter_ticks2_area.set_size_request (PX_SCALE(3, 3), -1); + if (route()) { + GainMeterBase::reset_dpi (); + } +} + #undef PX_SCALE GainMeter::~GainMeter () { } diff --git a/gtk2_ardour/gain_meter.h b/gtk2_ardour/gain_meter.h index af1f04c1a0..374b6e6476 100644 --- a/gtk2_ardour/gain_meter.h +++ b/gtk2_ardour/gain_meter.h @@ -210,19 +210,24 @@ protected: void redraw_metrics (); void on_theme_changed (); - void color_handler(bool); + void color_handler(); + virtual void reset_dpi (); ARDOUR::DataType _data_type; ARDOUR::ChanCount _previous_amp_output_streams; std::shared_ptr route(); private: - bool level_meter_button_press (GdkEventButton *); - PBD::ScopedConnection _level_meter_connection; bool _clear_meters; bool _meter_peaked; + + int _unscaled_fader_length; + int _unscaled_fader_girth; + + PBD::ScopedConnection _level_meter_connection; + }; class GainMeter : public GainMeterBase, public Gtk::VBox @@ -243,6 +248,8 @@ class GainMeter : public GainMeterBase, public Gtk::VBox protected: void hide_all_meters (); + void reset_dpi (); + gint meter_metrics_expose (GdkEventExpose *); gint meter_ticks1_expose (GdkEventExpose *); gint meter_ticks2_expose (GdkEventExpose *);