convert interface <> internal values for all automation

fixes Send-Fader, Gain-Automation and various Plugin-Slider ranges
This commit is contained in:
Robin Gareus 2014-11-01 07:25:47 +01:00
parent c855d17e09
commit 52f44dc4da
3 changed files with 19 additions and 24 deletions

View file

@ -69,13 +69,14 @@ AutomationController::create(
const Evoral::Parameter& param, const Evoral::Parameter& param,
boost::shared_ptr<AutomationControl> ac) boost::shared_ptr<AutomationControl> ac)
{ {
double const lo = ac->internal_to_interface(param.min());
double const up = ac->internal_to_interface(param.max());
Gtk::Adjustment* adjustment = manage ( Gtk::Adjustment* adjustment = manage (
new Gtk::Adjustment ( new Gtk::Adjustment (
param.normal(), ac->internal_to_interface(param.normal()),
param.min(), lo, up,
param.max(), // TODO we should use explicit step-sizes if provided by Plugin::ParameterDescriptor
(param.max() - param.min()) / 100.0, (up - lo) / 100, (up - lo) / 10
(param.max() - param.min()) / 10.0
) )
); );
@ -94,7 +95,7 @@ AutomationController::get_label (double& xpos)
void void
AutomationController::display_effective_value() AutomationController::display_effective_value()
{ {
double const interface_value = _controllable->get_value(); double const interface_value = _controllable->internal_to_interface(_controllable->get_value());
if (_adjustment->get_value () != interface_value) { if (_adjustment->get_value () != interface_value) {
_ignore_change = true; _ignore_change = true;
@ -107,7 +108,7 @@ void
AutomationController::value_adjusted () AutomationController::value_adjusted ()
{ {
if (!_ignore_change) { if (!_ignore_change) {
_controllable->set_value (_adjustment->get_value()); _controllable->set_value (_controllable->interface_to_internal(_adjustment->get_value()));
} }
} }

View file

@ -662,12 +662,6 @@ GenericPluginUI::build_control_ui (guint32 port_index, boost::shared_ptr<Automat
Adjustment* adj = control_ui->controller->adjustment(); Adjustment* adj = control_ui->controller->adjustment();
boost::shared_ptr<PluginInsert::PluginControl> pc = boost::dynamic_pointer_cast<PluginInsert::PluginControl> (control_ui->control); boost::shared_ptr<PluginInsert::PluginControl> pc = boost::dynamic_pointer_cast<PluginInsert::PluginControl> (control_ui->control);
adj->set_lower (desc.lower);
adj->set_upper (desc.upper);
adj->set_step_increment (desc.step);
adj->set_page_increment (desc.largestep);
if (desc.integer_step) { if (desc.integer_step) {
control_ui->clickbox = new ClickBox (adj, "PluginUIClickBox"); control_ui->clickbox = new ClickBox (adj, "PluginUIClickBox");
Gtkmm2ext::set_size_request_to_display_given_text (*control_ui->clickbox, "g9999999", 2, 2); Gtkmm2ext::set_size_request_to_display_given_text (*control_ui->clickbox, "g9999999", 2, 2);
@ -687,7 +681,7 @@ GenericPluginUI::build_control_ui (guint32 port_index, boost::shared_ptr<Automat
} }
adj->set_value (plugin->get_parameter (port_index)); adj->set_value (mcontrol->internal_to_interface(plugin->get_parameter (port_index)));
/* XXX memory leak: SliderController not destroyed by ControlUI /* XXX memory leak: SliderController not destroyed by ControlUI
destructor, and manage() reports object hierarchy destructor, and manage() reports object hierarchy

View file

@ -522,14 +522,14 @@ ProcessorEntry::Control::Control (boost::shared_ptr<AutomationControl> c, string
box.add (_slider); box.add (_slider);
_slider.show (); _slider.show ();
double const lo = c->lower (); double const lo = c->internal_to_interface(c->lower ());
double const up = c->upper (); double const up = c->internal_to_interface(c->upper ());
_adjustment.set_lower (lo); _adjustment.set_lower (lo);
_adjustment.set_upper (up); _adjustment.set_upper (up);
_adjustment.set_step_increment ((up - lo) / 100); _adjustment.set_step_increment ((up - lo) / 100);
_adjustment.set_page_increment ((up - lo) / 10); _adjustment.set_page_increment ((up - lo) / 10);
_slider.set_default_value (c->normal ()); _slider.set_default_value (c->internal_to_interface(c->normal ()));
_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &Control::slider_adjusted)); _adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &Control::slider_adjusted));
c->Changed.connect (_connection, MISSING_INVALIDATOR, boost::bind (&Control::control_changed, this), gui_context ()); c->Changed.connect (_connection, MISSING_INVALIDATOR, boost::bind (&Control::control_changed, this), gui_context ());
@ -581,7 +581,7 @@ ProcessorEntry::Control::slider_adjusted ()
return; return;
} }
c->set_value ( _adjustment.get_value () ); c->set_value ( c->interface_to_internal(_adjustment.get_value ()) );
set_tooltip (); set_tooltip ();
} }
@ -617,7 +617,7 @@ ProcessorEntry::Control::control_changed ()
} else { } else {
_adjustment.set_value (c->get_value ()); _adjustment.set_value (c->internal_to_interface(c->get_value ()));
stringstream s; stringstream s;
s.precision (1); s.precision (1);