[ardour-dev] patch for constrained dragging of control points

gerard van dongen gml at xs4all.nl
Fri Jul 16 10:07:41 PDT 2004


This patch implements time-constrained (meta) and value-constrained  
(shift-meta) dragging of control points



Index: gtk_ardour/editor_mouse.cc
===================================================================
RCS file: /home/las/cvsroot/ardour/ardour/gtk_ardour/editor_mouse.cc,v
retrieving revision 1.205
diff -u -r1.205 editor_mouse.cc
--- gtk_ardour/editor_mouse.cc  19 Jun 2004 13:36:10 -0000      1.205
+++ gtk_ardour/editor_mouse.cc  16 Jul 2004 15:56:44 -0000
@@ -451,12 +451,12 @@
                                                 start_region_grab (item,  
event);
                                         }
                                         break;
-
+
                                 case AudioRegionViewNameHighlight:
                                         start_trim (item, event);
                                         return TRUE;
                                         break;
-
+
                                 case AudioRegionViewName:
                                         /* rename happens on button  
release */
                                         if  
(Keyboard::modifier_state_equals (event->button.state, Keyboard::Control))  
{
@@ -1349,8 +1349,15 @@
                 cursor = grabber_cursor;
         }

-       drag_info.x_constrained = Keyboard::modifier_state_contains  
(event->button.state, Keyboard::Meta);
-       drag_info.y_constrained = false;
+       drag_info.y_constrained = Keyboard::modifier_state_contains  
(event->button.state, Keyboard::ModifierMask  
(Keyboard::Meta|Keyboard::Shift));
+       if (!drag_info.y_constrained) {
+               drag_info.x_constrained =  
Keyboard::modifier_state_contains (event->button.state, Keyboard::Meta);
+       } else {
+               drag_info.x_constrained = false;
+       }
+
+       //      drag_info.x_constrained =  
Keyboard::modifier_state_contains (event->button.state, Keyboard::Meta);
+       //      drag_info.y_constrained = false;
         drag_info.grab_frame = event_frame(event, &drag_info.grab_x,  
&drag_info.grab_y);
         drag_info.last_pointer_frame = drag_info.grab_frame;
         drag_info.current_pointer_frame = drag_info.grab_frame;
@@ -1960,10 +1967,7 @@
         drag_info.data = control_point;
         drag_info.motion_callback =  
&Editor::control_point_drag_motion_callback;
         drag_info.finished_callback =  
&Editor::control_point_drag_finished_callback;
-       drag_info.y_constrained = Keyboard::modifier_state_contains  
(event->button.state, Keyboard::ModifierMask  
(Keyboard::Meta|Keyboard::Shift));
-       if (!drag_info.y_constrained) {
-               drag_info.x_constrained =  
Keyboard::modifier_state_contains (event->button.state, Keyboard::Meta);
-       }
+

         start_grab (event, fader_cursor);

@@ -1988,13 +1992,16 @@
         }

         gtk_canvas_item_w2i (cp->line.parent_group(), &cx, &cy);
-
+
         cx = max (0.0, cx);
+       cx = (drag_info.x_constrained ? cp->get_x() : cx);

         cy = max (0.0, cy);
         cy = min ((double) cp->line.height(), cy);
+       cy = (drag_info.y_constrained ? cp->get_y() : cy);
+
         float fraction = 1.0 - (cy / cp->line.height());
-
+
         bool push;

         if (Keyboard::modifier_state_contains (event->button.state,  
Keyboard::Control)) {
@@ -2003,7 +2010,7 @@
                 push = false;
         }

-       cp->line.point_drag (*cp, (jack_nframes_t) floor (cx *  
frames_per_unit), fraction, push);
+       cp->line.point_drag (*cp, (jack_nframes_t)  floor (cx *  
frames_per_unit), fraction, push);

         set_verbose_canvas_cursor_text (cp->line.get_verbose_cursor_string  
(fraction));
  }



More information about the Ardour-Dev mailing list