summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor_drag.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2015-02-12 14:28:44 -0500
committerPaul Davis <paul@linuxaudiosystems.com>2015-02-13 16:21:57 -0500
commit456374c99564f7e1eefcf8572e6180ee01ef9b27 (patch)
tree21091e9c1df089eb043f1309bb8615812aa67768 /gtk2_ardour/editor_drag.cc
parent994dff91a263b038b3d5990e727b93d0dbdb9d9c (diff)
implement axis-limited dragging
Diffstat (limited to 'gtk2_ardour/editor_drag.cc')
-rw-r--r--gtk2_ardour/editor_drag.cc25
1 files changed, 22 insertions, 3 deletions
diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc
index 7747f3fffb..497baf5896 100644
--- a/gtk2_ardour/editor_drag.cc
+++ b/gtk2_ardour/editor_drag.cc
@@ -394,8 +394,6 @@ Drag::motion_handler (GdkEvent* event, bool from_autoscroll)
} else {
_initially_vertical = false;
}
-
- cerr << "IV = " << _initially_vertical << endl;
}
if (!from_autoscroll) {
@@ -556,6 +554,7 @@ RegionMotionDrag::RegionMotionDrag (Editor* e, ArdourCanvas::Item* i, RegionView
, _total_x_delta (0)
, _last_pointer_time_axis_view (0)
, _last_pointer_layer (0)
+ , _single_axis (false)
{
DEBUG_TRACE (DEBUG::Drags, "New RegionMotionDrag\n");
}
@@ -565,6 +564,10 @@ RegionMotionDrag::start_grab (GdkEvent* event, Gdk::Cursor* cursor)
{
Drag::start_grab (event, cursor);
+ if (Keyboard::modifier_state_contains (event->button.state, Keyboard::TertiaryModifier)) {
+ _single_axis = true;
+ }
+
show_verbose_cursor_time (_last_frame_position);
pair<TimeAxisView*, double> const tv = _editor->trackview_by_y_position (current_pointer_y ());
@@ -639,6 +642,10 @@ RegionMotionDrag::compute_x_delta (GdkEvent const * event, framepos_t* pending_r
bool
RegionMotionDrag::y_movement_allowed (int delta_track, double delta_layer) const
{
+ if (_y_constrained) {
+ return false;
+ }
+
for (list<DraggingView>::const_iterator i = _views.begin(); i != _views.end(); ++i) {
int const n = i->time_axis_view + delta_track;
if (n < 0 || n >= int (_time_axis_views.size())) {
@@ -683,6 +690,18 @@ RegionMotionDrag::motion (GdkEvent* event, bool first_move)
pair<TimeAxisView*, double> const r = _editor->trackview_by_y_position (current_pointer_y ());
TimeAxisView* tv = r.first;
+ if (first_move) {
+ if (_single_axis) {
+ if (initially_vertical()) {
+ _y_constrained = false;
+ _x_constrained = true;
+ } else {
+ _y_constrained = true;
+ _x_constrained = false;
+ }
+ }
+ }
+
if (tv && tv->view()) {
double layer = r.second;
@@ -1002,7 +1021,7 @@ RegionMoveDrag::finished (GdkEvent* ev, bool movement_occurred)
bool const changed_position = (_last_frame_position != _primary->region()->position());
bool const changed_tracks = (_time_axis_views[_views.front().time_axis_view] != &_views.front().view->get_time_axis_view());
framecnt_t const drag_delta = _primary->region()->position() - _last_frame_position;
-
+
if (_copy) {
finished_copy (