[ardour-dev] another automation patch

gerard van dongen gml at xs4all.nl
Fri Jul 16 15:24:11 PDT 2004


This one (hopefully) fixes bugs with line-dragging
(against current CVS btw)

cheers
Gerard



Index: gtk_ardour/automation_line.h
===================================================================
RCS file: /home/las/cvsroot/ardour/ardour/gtk_ardour/automation_line.h,v
retrieving revision 1.29
diff -u -r1.29 automation_line.h
--- gtk_ardour/automation_line.h        19 Jun 2004 13:36:10 -0000       
1.29
+++ gtk_ardour/automation_line.h        16 Jul 2004 21:12:52 -0000
@@ -176,7 +176,7 @@
         void determine_visible_control_points (GtkCanvasPoints*);
         void sync_model_from (ControlPoint&);
         void sync_model_with_view_point (ControlPoint&);
-       void sync_model_with_view_line (ControlPoint&, ControlPoint&);
+       void sync_model_with_view_line (unsigned long, unsigned long);
         void modify_view (ControlPoint&, double, double, bool with_push);

         virtual void change_model (ARDOUR::AutomationList::iterator,  
double x, double y);


Index: gtk_ardour/automation_line.cc
===================================================================
RCS file: /home/las/cvsroot/ardour/ardour/gtk_ardour/automation_line.cc,v
retrieving revision 1.59
diff -u -r1.59 automation_line.cc
--- gtk_ardour/automation_line.cc       9 Jul 2004 16:24:40 -0000        
1.59
+++ gtk_ardour/automation_line.cc       16 Jul 2004 21:13:45 -0000
@@ -485,30 +485,17 @@
  }

  void
-AutomationLine::sync_model_with_view_line (ControlPoint& start,  
ControlPoint& end)
+AutomationLine::sync_model_with_view_line (unsigned long start, unsigned  
long end)
  {
-       double delta;
-       double first;
-       double last;
-
-       first = first_drag_fraction;
-       last = last_drag_fraction;
-
-       /* convert the visual position of the start and end of drag into
-          model coordinates.
-       */
-
-       view_to_model_y (first);
-       view_to_model_y (last);
-
-       /* how far did we move ? */
-
-       delta = last - first;

-       /* change all model points in the range by that amount */
+       ControlPoint *p;

-       update_pending = true;
-       change_model_range (start.model, end.model, 0, delta);
+       for (unsigned long i = start; i <= end; ++i) {
+               p = nth(i);
+               sync_model_with_view_point(*p);
+       }
+
+
  }

  void
@@ -590,7 +577,7 @@

         update_pending = true;

-       while (!p->can_slide && p != &cp && lasti) {
+       while (p != &cp && lasti) {
                 sync_model_with_view_point (*p);
                 --lasti;
                 p = nth (lasti);
@@ -921,12 +908,11 @@

         ControlPoint *cp;

-       cp = nth (i1);
-       modify_view_point (*cp, trackview.editor.unit_to_frame  
(cp->get_x()), ((_height - cp->get_y()) /_height) + ydelta, with_push);
+       for (unsigned long i = i1 ; i <= i2; i++) {
+               cp = nth (i);
+               modify_view_point (*cp, trackview.editor.unit_to_frame  
(cp->get_x()), ((_height - cp->get_y()) /_height) + ydelta, with_push);
+       }

-       cp = nth (i2);
-       modify_view_point (*cp, trackview.editor.unit_to_frame  
(cp->get_x()), ((_height - cp->get_y()) / _height) + ydelta, with_push);
-
         update_line ();

         drags++;
@@ -940,7 +926,7 @@
                 if (cp) {
                         sync_model_from (*cp);
                 } else {
-                       sync_model_with_view_line  
(*control_points[line_drag_cp1], *control_points[line_drag_cp2]);
+                       sync_model_with_view_line (line_drag_cp1,  
line_drag_cp2);
                 }

                 update_pending = false;



More information about the Ardour-Dev mailing list