more tweaking of color management.
[ardour.git] / gtk2_ardour / automation_controller.cc
index a7922d2f00302413e6691b4c93d4743aadfd941d..6acf37f953c63485490a46a82c6819bb5f7039d0 100644 (file)
@@ -126,19 +126,8 @@ AutomationController::create(boost::shared_ptr<Automatable>       printer,
        const double lo        = ac->internal_to_interface(desc.lower);
        const double up        = ac->internal_to_interface(desc.upper);
        const double normal    = ac->internal_to_interface(desc.normal);
-       double       smallstep = desc.smallstep;
-       double       largestep = desc.largestep;
-       if (smallstep == 0.0) {
-               smallstep = up / 1000.;
-       } else {
-               smallstep = ac->internal_to_interface(desc.lower + smallstep);
-       }
-
-       if (largestep == 0.0) {
-               largestep = up / 40.;
-       } else {
-               largestep = ac->internal_to_interface(desc.lower + largestep);
-       }
+       const double smallstep = ac->internal_to_interface(desc.lower + desc.smallstep);
+       const double largestep = ac->internal_to_interface(desc.lower + desc.largestep);
 
        Gtk::Adjustment* adjustment = manage (
                new Gtk::Adjustment (normal, lo, up, smallstep, largestep));
@@ -208,16 +197,22 @@ AutomationController::toggled ()
 {
        ArdourButton* but = dynamic_cast<ArdourButton*>(_widget);
        if (but) {
-               start_touch();
+               if (_controllable->session().transport_rolling()) {
+                       if (_controllable->automation_state() == Touch) {
+                               _controllable->set_automation_state(Write);
+                       }
+                       if (_controllable->list()) {
+                               _controllable->list()->set_in_write_pass(true, false, _controllable->session().audible_frame());
+                       }
+               }
                const bool was_active = _controllable->get_value() >= 0.5;
-               if (was_active) {
+               if (was_active && but->get_active()) {
                        _adjustment->set_value(0.0);
                        but->set_active(false);
-               } else {
+               } else if (!was_active && !but->get_active()) {
                        _adjustment->set_value(1.0);
                        but->set_active(true);
                }
-               end_touch();
        }
 }