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
This commit is contained in:
parent
09be35c5cb
commit
62d5585e34
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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__ */
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -116,6 +116,7 @@ class Meterbridge :
|
|||
void on_size_request (Gtk::Requisition*);
|
||||
|
||||
void parameter_changed (std::string const & p);
|
||||
void on_theme_changed ();
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -149,6 +149,7 @@ CONFIG_VARIABLE (bool, super_rapid_clock_update, "super-rapid-clock-update", fal
|
|||
|
||||
CONFIG_VARIABLE (float, meter_hold, "meter-hold", 100.0f)
|
||||
CONFIG_VARIABLE (float, meter_falloff, "meter-falloff", 32.0f)
|
||||
CONFIG_VARIABLE (MeterLineUp, meter_line_up_level, "meter-line-up-level", MeteringLineUp18)
|
||||
|
||||
/* miscellany */
|
||||
|
||||
|
|
|
@ -367,6 +367,13 @@ namespace ARDOUR {
|
|||
MeteringRoute ///< meter what is going through the route
|
||||
};
|
||||
|
||||
enum MeterLineUp {
|
||||
MeteringLineUp24,
|
||||
MeteringLineUp20,
|
||||
MeteringLineUp18,
|
||||
MeteringLineUp15
|
||||
};
|
||||
|
||||
enum PFLPosition {
|
||||
/** PFL signals come from before pre-fader processors */
|
||||
PFLFromBeforeProcessors,
|
||||
|
@ -567,6 +574,7 @@ std::istream& operator>>(std::istream& o, ARDOUR::HeaderFormat& sf);
|
|||
std::istream& operator>>(std::istream& o, ARDOUR::AutoConnectOption& sf);
|
||||
std::istream& operator>>(std::istream& o, ARDOUR::EditMode& sf);
|
||||
std::istream& operator>>(std::istream& o, ARDOUR::MonitorModel& sf);
|
||||
std::istream& operator>>(std::istream& o, ARDOUR::MeterLineUp& sf);
|
||||
std::istream& operator>>(std::istream& o, ARDOUR::PFLPosition& sf);
|
||||
std::istream& operator>>(std::istream& o, ARDOUR::AFLPosition& sf);
|
||||
std::istream& operator>>(std::istream& o, ARDOUR::RemoteModel& sf);
|
||||
|
@ -588,6 +596,7 @@ std::ostream& operator<<(std::ostream& o, const ARDOUR::HeaderFormat& sf);
|
|||
std::ostream& operator<<(std::ostream& o, const ARDOUR::AutoConnectOption& sf);
|
||||
std::ostream& operator<<(std::ostream& o, const ARDOUR::EditMode& sf);
|
||||
std::ostream& operator<<(std::ostream& o, const ARDOUR::MonitorModel& sf);
|
||||
std::ostream& operator<<(std::ostream& o, const ARDOUR::MeterLineUp& sf);
|
||||
std::ostream& operator<<(std::ostream& o, const ARDOUR::PFLPosition& sf);
|
||||
std::ostream& operator<<(std::ostream& o, const ARDOUR::AFLPosition& sf);
|
||||
std::ostream& operator<<(std::ostream& o, const ARDOUR::RemoteModel& sf);
|
||||
|
|
|
@ -61,6 +61,7 @@ setup_enum_writer ()
|
|||
ColorMode _ColorMode;
|
||||
MeterFalloff _MeterFalloff;
|
||||
MeterHold _MeterHold;
|
||||
MeterLineUp _MeterLineUp;
|
||||
EditMode _EditMode;
|
||||
RegionPoint _RegionPoint;
|
||||
Placement _Placement;
|
||||
|
@ -205,6 +206,12 @@ setup_enum_writer ()
|
|||
REGISTER_ENUM (MeterHoldLong);
|
||||
REGISTER (_MeterHold);
|
||||
|
||||
REGISTER_ENUM (MeteringLineUp24);
|
||||
REGISTER_ENUM (MeteringLineUp20);
|
||||
REGISTER_ENUM (MeteringLineUp18);
|
||||
REGISTER_ENUM (MeteringLineUp15);
|
||||
REGISTER (_MeterLineUp);
|
||||
|
||||
REGISTER_ENUM (Slide);
|
||||
REGISTER_ENUM (Splice);
|
||||
REGISTER_ENUM (Lock);
|
||||
|
@ -652,6 +659,20 @@ std::ostream& operator<<(std::ostream& o, const MonitorModel& var)
|
|||
return o << s;
|
||||
}
|
||||
|
||||
std::istream& operator>>(std::istream& o, MeterLineUp& var)
|
||||
{
|
||||
std::string s;
|
||||
o >> s;
|
||||
var = (MeterLineUp) string_2_enum (s, var);
|
||||
return o;
|
||||
}
|
||||
|
||||
std::ostream& operator<<(std::ostream& o, const MeterLineUp& var)
|
||||
{
|
||||
std::string s = enum_2_string (var);
|
||||
return o << s;
|
||||
}
|
||||
|
||||
std::istream& operator>>(std::istream& o, PFLPosition& var)
|
||||
{
|
||||
std::string s;
|
||||
|
|
Loading…
Reference in New Issue