summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2013-07-05 22:18:04 +0200
committerRobin Gareus <robin@gareus.org>2013-07-10 15:27:11 +0200
commit62d5585e34d410c9c5feb7cf7b4742360c2187b0 (patch)
tree3ca7125166d46d2205187867a8f499aa009fcda8 /gtk2_ardour
parent09be35c5cbfc218f9a83842e10f41db14ba4abea (diff)
prepare meter configuration..
- rework metric/tick image cache invalidation - flush cache - send signal to queue redraws (TODO) selectively flush cache // cache per size, style - add four common line up levels
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/gain_meter.cc17
-rw-r--r--gtk2_ardour/gain_meter.h1
-rw-r--r--gtk2_ardour/level_meter.cc33
-rw-r--r--gtk2_ardour/meter_patterns.cc12
-rw-r--r--gtk2_ardour/meter_patterns.h1
-rw-r--r--gtk2_ardour/meter_strip.cc15
-rw-r--r--gtk2_ardour/meter_strip.h2
-rw-r--r--gtk2_ardour/meterbridge.cc16
-rw-r--r--gtk2_ardour/meterbridge.h1
-rw-r--r--gtk2_ardour/rc_option_editor.cc14
10 files changed, 95 insertions, 17 deletions
diff --git a/gtk2_ardour/gain_meter.cc b/gtk2_ardour/gain_meter.cc
index 5ddfdc18f4..a398c7c833 100644
--- a/gtk2_ardour/gain_meter.cc
+++ b/gtk2_ardour/gain_meter.cc
@@ -130,6 +130,7 @@ GainMeterBase::GainMeterBase (Session* s, bool horizontal, int fader_length, int
ResetAllPeakDisplays.connect (sigc::mem_fun(*this, &GainMeterBase::reset_peak_display));
ResetRoutePeakDisplays.connect (sigc::mem_fun(*this, &GainMeterBase::reset_route_peak_display));
ResetGroupPeakDisplays.connect (sigc::mem_fun(*this, &GainMeterBase::reset_group_peak_display));
+ RedrawMetrics.connect (sigc::mem_fun(*this, &GainMeterBase::redraw_metrics));
UI::instance()->theme_changed.connect (sigc::mem_fun(*this, &GainMeterBase::on_theme_changed));
ColorsChanged.connect (sigc::bind(sigc::mem_fun (*this, &GainMeterBase::color_handler), false));
@@ -851,11 +852,7 @@ GainMeterBase::update_meters()
void GainMeterBase::color_handler(bool dpi)
{
- meter_clear_pattern_cache();
setup_meters();
- meter_metric_area.queue_draw ();
- meter_ticks1_area.queue_draw ();
- meter_ticks2_area.queue_draw ();
}
void
@@ -873,7 +870,11 @@ GainMeterBase::set_width (Width w, int len)
void
GainMeterBase::on_theme_changed()
{
- meter_clear_pattern_cache();
+}
+
+void
+GainMeterBase::redraw_metrics()
+{
meter_metric_area.queue_draw ();
meter_ticks1_area.queue_draw ();
meter_ticks2_area.queue_draw ();
@@ -1062,10 +1063,6 @@ GainMeter::meter_configuration_changed (ChanCount c)
set_meter_strip_name ("AudioMidiTrackMetricsInactive");
}
}
-
- meter_clear_pattern_cache();
- meter_metric_area.queue_draw ();
- meter_ticks1_area.queue_draw ();
- meter_ticks2_area.queue_draw ();
+ meter_clear_pattern_cache(); // XXX only once
}
diff --git a/gtk2_ardour/gain_meter.h b/gtk2_ardour/gain_meter.h
index 19e03b82ee..c48d250947 100644
--- a/gtk2_ardour/gain_meter.h
+++ b/gtk2_ardour/gain_meter.h
@@ -184,6 +184,7 @@ class GainMeterBase : virtual public sigc::trackable, ARDOUR::SessionHandlePtr
void reset_route_peak_display (ARDOUR::Route*);
void reset_group_peak_display (ARDOUR::RouteGroup*);
+ void redraw_metrics ();
void on_theme_changed ();
void color_handler(bool);
ARDOUR::DataType _data_type;
diff --git a/gtk2_ardour/level_meter.cc b/gtk2_ardour/level_meter.cc
index 04bfdb8fd6..7a32b473f3 100644
--- a/gtk2_ardour/level_meter.cc
+++ b/gtk2_ardour/level_meter.cc
@@ -133,6 +133,10 @@ LevelMeter::parameter_changed (string p)
(*i).meter->set_hold_count ((uint32_t) floor(Config->get_meter_hold()));
}
}
+ else if (p == "meter-line-up-level") {
+ color_changed = true;
+ setup_meters (meter_length, regular_meter_width, thin_meter_width);
+ }
}
void
@@ -188,7 +192,7 @@ LevelMeter::setup_meters (int len, int initial_width, int thin_width)
for (int32_t n = nmeters-1; nmeters && n >= 0 ; --n) {
uint32_t c[10];
- float stp[4] = {55.0, 77.5, 92.5, 100.0};
+ float stp[4];
if (n < nmidi) {
c[0] = ARDOUR_UI::config()->canvasvar_MidiMeterColor0.get();
c[1] = ARDOUR_UI::config()->canvasvar_MidiMeterColor1.get();
@@ -205,6 +209,33 @@ LevelMeter::setup_meters (int len, int initial_width, int thin_width)
stp[2] = 115.0 * 100.0 / 128.0;
stp[3] = 115.0 * 112.0 / 128.0;
} else {
+ switch (Config->get_meter_line_up_level()) {
+ case MeteringLineUp24:
+ stp[0] = 42.0;
+ stp[1] = 77.5;
+ stp[2] = 92.5;
+ stp[3] = 100.0;
+ break;
+ case MeteringLineUp20:
+ stp[0] = 50.0;
+ stp[1] = 77.5;
+ stp[2] = 92.5;
+ stp[3] = 100.0;
+ break;
+ default:
+ case MeteringLineUp18:
+ stp[0] = 55.0;
+ stp[1] = 77.5;
+ stp[2] = 92.5;
+ stp[3] = 100.0;
+ break;
+ case MeteringLineUp15:
+ stp[0] = 62.5;
+ stp[1] = 77.5;
+ stp[2] = 92.5;
+ stp[3] = 100.0;
+ break;
+ }
c[0] = ARDOUR_UI::config()->canvasvar_MeterColor0.get();
c[1] = ARDOUR_UI::config()->canvasvar_MeterColor1.get();
c[2] = ARDOUR_UI::config()->canvasvar_MeterColor2.get();
diff --git a/gtk2_ardour/meter_patterns.cc b/gtk2_ardour/meter_patterns.cc
index 9b90931e73..c34c492f75 100644
--- a/gtk2_ardour/meter_patterns.cc
+++ b/gtk2_ardour/meter_patterns.cc
@@ -22,6 +22,7 @@
#include <gtkmm2ext/utils.h>
#include <gtkmm2ext/rgb_macros.h>
+#include <ardour/rc_configuration.h>
#include "ardour_ui.h"
#include "utils.h"
#include "logmeter.h"
@@ -41,6 +42,7 @@ static const int max_pattern_metric_size = 1026;
sigc::signal<void> ResetAllPeakDisplays;
sigc::signal<void,ARDOUR::Route*> ResetRoutePeakDisplays;
sigc::signal<void,ARDOUR::RouteGroup*> ResetGroupPeakDisplays;
+sigc::signal<void> RedrawMetrics;
cairo_pattern_t*
meter_render_ticks (Gtk::Widget& w, vector<ARDOUR::DataType> types)
@@ -98,6 +100,9 @@ meter_render_ticks (Gtk::Widget& w, vector<ARDOUR::DataType> types)
points.insert (std::pair<int,float>(-50, 0.5));
points.insert (std::pair<int,float>(-40, 0.5));
points.insert (std::pair<int,float>(-30, 0.5));
+ if (Config->get_meter_line_up_level() == MeteringLineUp24) {
+ points.insert (std::pair<int,float>(-24, 0.5));
+ }
points.insert (std::pair<int,float>(-25, 0.5));
points.insert (std::pair<int,float>(-20, 1.0));
@@ -276,7 +281,11 @@ meter_render_metrics (Gtk::Widget& w, vector<DataType> types)
points.insert (std::pair<int,float>(-30, 0.5));
points.insert (std::pair<int,float>(-20, 1.0));
if (types.size() == 1) {
- points.insert (std::pair<int,float>(-25, 0.5));
+ if (Config->get_meter_line_up_level() == MeteringLineUp24) {
+ points.insert (std::pair<int,float>(-24, 0.5));
+ } else {
+ points.insert (std::pair<int,float>(-25, 0.5));
+ }
points.insert (std::pair<int,float>(-15, 1.0));
}
points.insert (std::pair<int,float>(-18, 1.0));
@@ -476,4 +485,5 @@ gint meter_expose_metrics (GdkEventExpose *ev, std::vector<ARDOUR::DataType> typ
void meter_clear_pattern_cache() {
metric_patterns.clear();
ticks_patterns.clear();
+ RedrawMetrics();
}
diff --git a/gtk2_ardour/meter_patterns.h b/gtk2_ardour/meter_patterns.h
index ae89a7866d..b793a9cc3c 100644
--- a/gtk2_ardour/meter_patterns.h
+++ b/gtk2_ardour/meter_patterns.h
@@ -30,6 +30,7 @@
extern sigc::signal<void> ResetAllPeakDisplays;
extern sigc::signal<void,ARDOUR::Route*> ResetRoutePeakDisplays;
extern sigc::signal<void,ARDOUR::RouteGroup*> ResetGroupPeakDisplays;
+extern sigc::signal<void> RedrawMetrics;
cairo_pattern_t* meter_render_ticks (Gtk::Widget& w, std::vector<ARDOUR::DataType> types);
cairo_pattern_t* meter_render_metrics (Gtk::Widget& w, std::vector<ARDOUR::DataType> types);
diff --git a/gtk2_ardour/meter_strip.cc b/gtk2_ardour/meter_strip.cc
index 011bbe554e..faaa07b566 100644
--- a/gtk2_ardour/meter_strip.cc
+++ b/gtk2_ardour/meter_strip.cc
@@ -71,6 +71,7 @@ MeterStrip::MeterStrip (int metricmode)
set_size_request_to_display_given_text (meter_metric_area, "-8888", 1, 0);
meter_metric_area.signal_expose_event().connect (
sigc::mem_fun(*this, &MeterStrip::meter_metrics_expose));
+ RedrawMetrics.connect (sigc::mem_fun(*this, &MeterStrip::redraw_metrics));
meterbox.pack_start(meter_metric_area, true, false);
@@ -174,6 +175,7 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr<ARDOUR::Route> rt)
ResetAllPeakDisplays.connect (sigc::mem_fun(*this, &MeterStrip::reset_peak_display));
ResetRoutePeakDisplays.connect (sigc::mem_fun(*this, &MeterStrip::reset_route_peak_display));
ResetGroupPeakDisplays.connect (sigc::mem_fun(*this, &MeterStrip::reset_group_peak_display));
+ RedrawMetrics.connect (sigc::mem_fun(*this, &MeterStrip::redraw_metrics));
meter_configuration_changed (_route->shared_peak_meter()->input_streams ());
@@ -249,8 +251,6 @@ MeterStrip::fast_update ()
void
MeterStrip::on_theme_changed()
{
- meter_clear_pattern_cache();
-
if (level_meter && _route) {
int meter_width = 6;
if (_route->shared_peak_meter()->input_streams().n_total() == 1) {
@@ -258,9 +258,6 @@ MeterStrip::on_theme_changed()
}
level_meter->setup_meters (220, meter_width, 6);
}
- meter_metric_area.queue_draw();
- meter_ticks1_area.queue_draw();
- meter_ticks2_area.queue_draw();
}
void
@@ -412,3 +409,11 @@ MeterStrip::peak_button_release (GdkEventButton* ev)
}
return true;
}
+
+void
+MeterStrip::redraw_metrics ()
+{
+ meter_metric_area.queue_draw();
+ meter_ticks1_area.queue_draw();
+ meter_ticks2_area.queue_draw();
+}
diff --git a/gtk2_ardour/meter_strip.h b/gtk2_ardour/meter_strip.h
index 454a3af6f1..c50c810fcf 100644
--- a/gtk2_ardour/meter_strip.h
+++ b/gtk2_ardour/meter_strip.h
@@ -111,6 +111,8 @@ class MeterStrip : public Gtk::VBox, public RouteUI
static int max_pattern_metric_size; // == FastMeter::max_pattern_metric_size
bool peak_button_release (GdkEventButton*);
+
+ void redraw_metrics ();
};
#endif /* __ardour_mixer_strip__ */
diff --git a/gtk2_ardour/meterbridge.cc b/gtk2_ardour/meterbridge.cc
index 99b80fb668..782a8f84fc 100644
--- a/gtk2_ardour/meterbridge.cc
+++ b/gtk2_ardour/meterbridge.cc
@@ -51,6 +51,8 @@
#include "route_sorter.h"
#include "actions.h"
#include "gui_thread.h"
+#include "global_signals.h"
+#include "meter_patterns.h"
#include "i18n.h"
@@ -200,6 +202,10 @@ Meterbridge::Meterbridge ()
Gtk::Viewport* viewport = (Gtk::Viewport*) scroller.get_child();
viewport->set_shadow_type(Gtk::SHADOW_NONE);
viewport->set_border_width(0);
+
+ UI::instance()->theme_changed.connect (sigc::mem_fun(*this, &Meterbridge::on_theme_changed));
+ ColorsChanged.connect (sigc::mem_fun (*this, &Meterbridge::on_theme_changed));
+ DPIReset.connect (sigc::mem_fun (*this, &Meterbridge::on_theme_changed));
}
Meterbridge::~Meterbridge ()
@@ -398,6 +404,7 @@ Meterbridge::set_session (Session* s)
_session->DirtyChanged.connect (_session_connections, invalidator (*this), boost::bind (&Meterbridge::update_title, this), gui_context());
_session->StateSaved.connect (_session_connections, invalidator (*this), boost::bind (&Meterbridge::update_title, this), gui_context());
_session->config.ParameterChanged.connect (*this, invalidator (*this), ui_bind (&Meterbridge::parameter_changed, this, _1), gui_context());
+ Config->ParameterChanged.connect (*this, invalidator (*this), ui_bind (&Meterbridge::parameter_changed, this, _1), gui_context());
if (_visible) {
show_window();
@@ -654,4 +661,13 @@ Meterbridge::parameter_changed (std::string const & p)
_show_midi = _session->config.get_show_midi_on_meterbridge();
sync_order_keys(MixerSort);
}
+ else if (p == "meter-line-up-level") {
+ meter_clear_pattern_cache();
+ }
+}
+
+void
+Meterbridge::on_theme_changed ()
+{
+ meter_clear_pattern_cache();
}
diff --git a/gtk2_ardour/meterbridge.h b/gtk2_ardour/meterbridge.h
index 56ace71aa9..faa107c14e 100644
--- a/gtk2_ardour/meterbridge.h
+++ b/gtk2_ardour/meterbridge.h
@@ -116,6 +116,7 @@ class Meterbridge :
void on_size_request (Gtk::Requisition*);
void parameter_changed (std::string const & p);
+ void on_theme_changed ();
};
#endif
diff --git a/gtk2_ardour/rc_option_editor.cc b/gtk2_ardour/rc_option_editor.cc
index da0e55c7a2..f447589398 100644
--- a/gtk2_ardour/rc_option_editor.cc
+++ b/gtk2_ardour/rc_option_editor.cc
@@ -1923,6 +1923,20 @@ RCOptionEditor::RCOptionEditor ()
mfo->add (METER_FALLOFF_FASTEST, _("fastest"));
add_option (S_("Preferences|GUI"), mfo);
+
+ ComboOption<MeterLineUp>* mlu = new ComboOption<MeterLineUp> (
+ "meter-line-up-level",
+ _("Meter Line Up Level"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_meter_line_up_level),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_meter_line_up_level)
+ );
+
+ mlu->add (MeteringLineUp24, _("-24dB"));
+ mlu->add (MeteringLineUp20, _("-20dB"));
+ mlu->add (MeteringLineUp18, _("-18dB"));
+ mlu->add (MeteringLineUp15, _("-15dB"));
+
+ add_option (S_("Preferences|GUI"), mlu);
}
void