[ardour-dev] patch for plugin automation

gerard van dongen gml at xs4all.nl
Thu Jul 8 09:57:26 PDT 2004


The diff also includes the fix I sent previously for marking the line  
dirty after editing it.



diff -u -r1.30 automation_event.cc
--- libs/ardour/automation_event.cc     19 Jun 2004 13:36:10 -0000       
1.30
+++ libs/ardour/automation_event.cc     8 Jul 2004 15:42:15 -0000
@@ -146,6 +146,7 @@
  void
  AutomationList::maybe_signal_changed ()
  {
+
         if (_frozen) {
                 changed_when_thawed = true;
         } else {
@@ -391,7 +392,10 @@
                         save_state (_("removed event"));
                 }
         }
+
+       mark_dirty();
         maybe_signal_changed ();
+
  }

  void
@@ -405,6 +409,7 @@
                         save_state (_("removed multiple events"));
                 }
         }
+       mark_dirty();
         maybe_signal_changed ();
  }

@@ -433,6 +438,7 @@
         }

         if (erased) {
+               mark_dirty();
                 maybe_signal_changed ();
         }
  }
@@ -445,12 +451,16 @@
            points after end are later than (end)->when.
         */

+
         {
+
                 LockMonitor lm (lock, __LINE__, __FILE__);

                 while (start != end) {
+
                         (*start)->when += xdelta;
                         (*start)->value += ydelta;
+
                         ++start;
                 }

@@ -458,7 +468,7 @@
                         save_state (_("event range adjusted"));
                 }
         }
-
+       mark_dirty();
         maybe_signal_changed ();
  }

@@ -478,7 +488,7 @@
                         save_state (_("event adjusted"));
                 }
         }
-
+       mark_dirty();
         maybe_signal_changed ();
  }

@@ -527,7 +537,8 @@
  {
         _frozen = false;
         if (changed_when_thawed) {
-                StateChanged(Change(0)); /* EMIT SIGNAL */
+
+               StateChanged(Change(0)); /* EMIT SIGNAL */
         }
  }

@@ -711,10 +722,14 @@
         double uval, lval;
         double fraction;

+
+
         if (events.empty()) {
                 return default_value;
         }

+
+
         /* XXX OPTIMIZE ME by caching the range iterators */

         range = equal_range (events.begin(), events.end(), &cp, cmp);
@@ -728,12 +743,13 @@
                         lpos = (*range.first)->when;
                         lval = (*range.first)->value;
                 }  else {
-                       lpos = 0;
-                       lval = default_value;
+                       //we're before the first point
+                       return  lval = default_value;
                 }

                 if (range.second == events.end()) {
-                       return default_value;
+                       //we're after the last point
+                       return events.back()->value;
                 }

                 upos = (*range.second)->when;
@@ -771,6 +787,7 @@
                 }
         }

+       mark_dirty();
         maybe_signal_changed ();

         return nal;
@@ -834,6 +851,7 @@
                 }
         }

+       mark_dirty();
         maybe_signal_changed ();

         return nal;
@@ -936,6 +954,7 @@
                 }
         }

+       mark_dirty();
         maybe_signal_changed ();
         return true;
  }




More information about the Ardour-Dev mailing list