Update Gain/Meter when changing DPI

This commit is contained in:
Robin Gareus
2025-03-06 20:25:56 +01:00
parent 349a3cf039
commit 78120d86b5
2 changed files with 43 additions and 15 deletions

View File

@@ -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<ArdourFader*>(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 () { }

View File

@@ -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<ARDOUR::Route> 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 *);