update interface for processor-box faders step/page
[ardour.git] / gtk2_ardour / processor_box.cc
index 6c6f62ed58c5e1a1626afc70190c69ff8f9d1d34..361945d5e0f8de57f93317dbcb8b4750cf39e4ee 100644 (file)
@@ -521,14 +521,30 @@ ProcessorEntry::Control::Control (boost::shared_ptr<AutomationControl> c, string
                box.add (_slider);
                _slider.show ();
 
-               double const lo = c->internal_to_interface(c->lower ());
-               double const up = c->internal_to_interface(c->upper ());
-               
+               const ARDOUR::ParameterDescriptor& desc = c->desc();
+               double const lo = c->internal_to_interface(desc.lower);
+               double const up = c->internal_to_interface(desc.upper);
+               double const normal = c->internal_to_interface(desc.normal);
+               double smallstep = desc.smallstep;
+               double largestep = desc.largestep;
+
+               if (smallstep == 0.0) {
+                       smallstep = up / 1000.;
+               } else {
+                       smallstep = c->internal_to_interface(desc.lower + smallstep);
+               }
+
+               if (largestep == 0.0) {
+                       largestep = up / 40.;
+               } else {
+                       largestep = c->internal_to_interface(desc.lower + largestep);
+               }
+
                _adjustment.set_lower (lo);
                _adjustment.set_upper (up);
-               _adjustment.set_step_increment ((up - lo) / 100);
-               _adjustment.set_page_increment ((up - lo) / 10);
-               _slider.set_default_value (c->internal_to_interface(c->normal ()));
+               _adjustment.set_step_increment (smallstep);
+               _adjustment.set_page_increment (largestep);
+               _slider.set_default_value (normal);
                
                _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 ());