[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