X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_drag.cc;h=1f7447ca0ed00166b0e2def9edf1f456f3ab9774;hb=e57c4d4c43c0d302c0b06128e0ba10c4683ee8fe;hp=03b9d576425b12ecdd96ddf630ebd6866a364007;hpb=ba0e0d390e7f6461e57b81b7570f1ae42cd74dce;p=ardour.git diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index 03b9d57642..1f7447ca0e 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -145,21 +145,25 @@ Drag::end_grab (GdkEvent* event) _editor->hide_verbose_canvas_cursor(); - update_selection (); - _ending = false; return _had_movement; } nframes64_t -Drag::adjusted_current_frame () const +Drag::adjusted_current_frame (GdkEvent* event) const { + nframes64_t pos = 0; + if (_current_pointer_frame > _pointer_frame_offset) { - return _current_pointer_frame - _pointer_frame_offset; + pos = _current_pointer_frame - _pointer_frame_offset; } - return 0; + if (!Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) { + _editor->snap_to (pos); + } + + return pos; } bool @@ -201,7 +205,7 @@ Drag::motion_handler (GdkEvent* event, bool from_autoscroll) if (event->motion.state & Gdk::BUTTON1_MASK || event->motion.state & Gdk::BUTTON2_MASK) { if (!from_autoscroll) { - _editor->maybe_autoscroll (&event->motion); + _editor->maybe_autoscroll (&event->motion, allow_vertical_autoscroll ()); } motion (event, _had_movement != old_had_movement); @@ -247,14 +251,6 @@ RegionDrag::region_going_away (RegionView* v) _views.remove (v); } -void -RegionDrag::update_selection () -{ - list s; - copy (_views.begin(), _views.end(), back_inserter (s)); - _editor->selection->set (s); -} - RegionMotionDrag::RegionMotionDrag (Editor* e, ArdourCanvas::Item* i, RegionView* p, list const & v, bool b) : RegionDrag (e, i, p, v), _dest_trackview (0), @@ -724,11 +720,10 @@ RegionMoveDrag::motion (GdkEvent* event, bool first_move) } void -RegionMoveDrag::finished (GdkEvent* event, bool movement_occurred) +RegionMoveDrag::finished (GdkEvent* /*event*/, bool movement_occurred) { bool nocommit = true; vector copies; - RouteTimeAxisView* source_tv; boost::shared_ptr ds; boost::shared_ptr from_playlist; list new_views; @@ -739,8 +734,8 @@ RegionMoveDrag::finished (GdkEvent* event, bool movement_occurred) pair insert_result, frozen_insert_result; nframes64_t drag_delta; bool changed_tracks, changed_position; - pair tvp; map final; + RouteTimeAxisView* source_tv; if (!movement_occurred) { /* just a click */ @@ -793,7 +788,7 @@ RegionMoveDrag::finished (GdkEvent* event, bool movement_occurred) drag_delta = _primary->region()->position() - _last_frame_position; - _editor->track_canvas->update_now (); + _editor->update_canvas_now (); /* make a list of where each region ended up */ final = find_time_axis_views (); @@ -1061,7 +1056,7 @@ RegionMotionDrag::copy_regions (GdkEvent* event) ..only if the mouse is in rapid motion at the time of the grab. something to do with regionview creation raking so long? */ - _editor->track_canvas->update_now(); + _editor->update_canvas_now(); } bool @@ -1248,9 +1243,9 @@ RegionMotionDrag::find_time_axis_views () void -RegionInsertDrag::finished (GdkEvent* event, bool movement_occurred) +RegionInsertDrag::finished (GdkEvent* /*event*/, bool /*movement_occurred*/) { - _editor->track_canvas->update_now (); + _editor->update_canvas_now (); map final = find_time_axis_views (); @@ -1285,7 +1280,7 @@ struct RegionSelectionByPosition { }; void -RegionSpliceDrag::motion (GdkEvent* event, bool) +RegionSpliceDrag::motion (GdkEvent* /*event*/, bool) { RouteTimeAxisView* tv; layer_t layer; @@ -1343,7 +1338,7 @@ RegionSpliceDrag::motion (GdkEvent* event, bool) } void -RegionSpliceDrag::finished (GdkEvent* event, bool) +RegionSpliceDrag::finished (GdkEvent* /*event*/, bool) { } @@ -1366,7 +1361,7 @@ RegionCreateDrag::start_grab (GdkEvent* event, Gdk::Cursor *) void -RegionCreateDrag::motion (GdkEvent* event, bool first_move) +RegionCreateDrag::motion (GdkEvent* /*event*/, bool first_move) { if (first_move) { // TODO: create region-create-drag region view here @@ -1420,7 +1415,7 @@ RegionCreateDrag::finished (GdkEvent* event, bool movement_occurred) void -RegionGainDrag::motion (GdkEvent* event, bool) +RegionGainDrag::motion (GdkEvent* /*event*/, bool) { } @@ -1513,12 +1508,8 @@ TrimDrag::motion (GdkEvent* event, bool first_move) _editor->snap_to (_current_pointer_frame); } - if (_current_pointer_frame == _last_pointer_frame) { - return; - } - if (first_move) { - + string trim_type; switch (_operation) { @@ -1555,6 +1546,10 @@ TrimDrag::motion (GdkEvent* event, bool first_move) } } + if (_current_pointer_frame == _last_pointer_frame) { + return; + } + if (left_direction) { frame_delta = (_last_pointer_frame - _current_pointer_frame); } else { @@ -1694,11 +1689,7 @@ MeterMarkerDrag::start_grab (GdkEvent* event, Gdk::Cursor* cursor) void MeterMarkerDrag::motion (GdkEvent* event, bool) { - nframes64_t adjusted_frame = adjusted_current_frame (); - - if (!Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) { - _editor->snap_to (adjusted_frame); - } + nframes64_t const adjusted_frame = adjusted_current_frame (event); if (adjusted_frame == _last_pointer_frame) { return; @@ -1750,7 +1741,7 @@ TempoMarkerDrag::TempoMarkerDrag (Editor* e, ArdourCanvas::Item* i, bool c) : Drag (e, i), _copy (c) { - TempoMarker* _marker = reinterpret_cast (_item->get_data ("marker")); + _marker = reinterpret_cast (_item->get_data ("marker")); assert (_marker); } @@ -1788,11 +1779,7 @@ TempoMarkerDrag::start_grab (GdkEvent* event, Gdk::Cursor* cursor) void TempoMarkerDrag::motion (GdkEvent* event, bool) { - nframes64_t adjusted_frame = adjusted_current_frame (); - - if (!Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) { - _editor->snap_to (adjusted_frame); - } + nframes64_t const adjusted_frame = adjusted_current_frame (event); if (adjusted_frame == _last_pointer_frame) { return; @@ -1885,14 +1872,8 @@ CursorDrag::start_grab (GdkEvent* event, Gdk::Cursor* c) void CursorDrag::motion (GdkEvent* event, bool) { - nframes64_t adjusted_frame = adjusted_current_frame (); - - if (!Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) { - if (_cursor == _editor->playhead_cursor) { - _editor->snap_to (adjusted_frame); - } - } - + nframes64_t const adjusted_frame = adjusted_current_frame (event); + if (adjusted_frame == _last_pointer_frame) { return; } @@ -1902,7 +1883,7 @@ CursorDrag::motion (GdkEvent* event, bool) _editor->show_verbose_time_cursor (_cursor->current_frame, 10); #ifdef GTKOSX - _editor->track_canvas->update_now (); + _editor->update_canvas_now (); #endif _editor->UpdateAllTransportClocks (_cursor->current_frame); @@ -1950,11 +1931,7 @@ FadeInDrag::motion (GdkEvent* event, bool) { nframes64_t fade_length; - nframes64_t pos = adjusted_current_frame (); - - if (!Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) { - _editor->snap_to (pos); - } + nframes64_t const pos = adjusted_current_frame (event); boost::shared_ptr region = _primary->region (); @@ -1989,8 +1966,8 @@ FadeInDrag::finished (GdkEvent* event, bool movement_occurred) nframes64_t fade_length; - nframes64_t const pos = adjusted_current_frame (); - + nframes64_t const pos = adjusted_current_frame (event); + boost::shared_ptr region = _primary->region (); if (pos < (region->position() + 64)) { @@ -2046,11 +2023,7 @@ FadeOutDrag::motion (GdkEvent* event, bool) { nframes64_t fade_length; - nframes64_t pos = adjusted_current_frame (); - - if (!Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) { - _editor->snap_to (pos); - } + nframes64_t const pos = adjusted_current_frame (event); boost::shared_ptr region = _primary->region (); @@ -2087,11 +2060,7 @@ FadeOutDrag::finished (GdkEvent* event, bool movement_occurred) nframes64_t fade_length; - nframes64_t pos = adjusted_current_frame (); - - if (!Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) { - _editor->snap_to (pos); - } + nframes64_t const pos = adjusted_current_frame (event); boost::shared_ptr region = _primary->region (); @@ -2239,13 +2208,9 @@ MarkerDrag::motion (GdkEvent* event, bool) Location *real_location; Location *copy_location = 0; - nframes64_t newframe = adjusted_current_frame (); + nframes64_t const newframe = adjusted_current_frame (event); nframes64_t next = newframe; - - if (!Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) { - _editor->snap_to (newframe, 0, true); - } if (_current_pointer_frame == _last_pointer_frame) { return; @@ -2380,7 +2345,7 @@ MarkerDrag::motion (GdkEvent* event, bool) _editor->show_verbose_time_cursor (newframe, 10); #ifdef GTKOSX - _editor->track_canvas->update_now (); + _editor->update_canvas_now (); #endif _editor->edit_point_clock.set (copy_location->start()); } @@ -2463,13 +2428,13 @@ ControlPointDrag::ControlPointDrag (Editor* e, ArdourCanvas::Item* i) _cumulative_x_drag (0), _cumulative_y_drag (0) { - ControlPoint* _point = reinterpret_cast (_item->get_data ("control_point")); + _point = reinterpret_cast (_item->get_data ("control_point")); assert (_point); } void -ControlPointDrag::start_grab (GdkEvent* event, Gdk::Cursor* cursor) +ControlPointDrag::start_grab (GdkEvent* event, Gdk::Cursor* /*cursor*/) { Drag::start_grab (event, _editor->fader_cursor); @@ -2567,6 +2532,18 @@ ControlPointDrag::finished (GdkEvent* event, bool movement_occurred) _point->line().end_drag (_point); } +bool +ControlPointDrag::active (Editing::MouseMode m) +{ + if (m == Editing::MouseGain) { + /* always active in mouse gain */ + return true; + } + + /* otherwise active if the point is on an automation line (ie not if its on a region gain line) */ + return dynamic_cast (&(_point->line())) != 0; +} + LineDrag::LineDrag (Editor* e, ArdourCanvas::Item* i) : Drag (e, i), _line (0), @@ -2575,7 +2552,7 @@ LineDrag::LineDrag (Editor* e, ArdourCanvas::Item* i) } void -LineDrag::start_grab (GdkEvent* event, Gdk::Cursor* cursor) +LineDrag::start_grab (GdkEvent* event, Gdk::Cursor* /*cursor*/) { _line = reinterpret_cast (_item->get_data ("line")); assert (_line); @@ -2794,7 +2771,7 @@ TimeFXDrag::motion (GdkEvent* event, bool) } void -TimeFXDrag::finished (GdkEvent* event, bool movement_occurred) +TimeFXDrag::finished (GdkEvent* /*event*/, bool movement_occurred) { _primary->get_time_axis_view().hide_timestretch (); @@ -2830,6 +2807,27 @@ TimeFXDrag::finished (GdkEvent* event, bool movement_occurred) } } +void +ScrubDrag::start_grab (GdkEvent* event, Gdk::Cursor *) +{ + Drag::start_grab (event); +} + +void +ScrubDrag::motion (GdkEvent* /*event*/, bool) +{ + _editor->scrub (); +} + +void +ScrubDrag::finished (GdkEvent* /*event*/, bool movement_occurred) +{ + if (movement_occurred && _editor->session) { + /* make sure we stop */ + _editor->session->request_transport_speed (0.0); + } +} + SelectionDrag::SelectionDrag (Editor* e, ArdourCanvas::Item* i, Operation o) : Drag (e, i), _operation (o), @@ -2902,12 +2900,8 @@ SelectionDrag::motion (GdkEvent* event, bool first_move) nframes64_t end = 0; nframes64_t length; - nframes64_t pending_position = adjusted_current_frame (); + nframes64_t const pending_position = adjusted_current_frame (event); - if (!Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) { - _editor->snap_to (pending_position); - } - /* only alter selection if the current frame is different from the last frame position (adjusted) */ @@ -3002,7 +2996,7 @@ SelectionDrag::motion (GdkEvent* event, bool first_move) break; } - if (event->button.x >= _editor->horizontal_adjustment.get_value() + _editor->canvas_width) { + if (event->button.x >= _editor->horizontal_adjustment.get_value() + _editor->_canvas_width) { _editor->start_canvas_autoscroll (1, 0); } @@ -3157,7 +3151,7 @@ RangeMarkerBarDrag::motion (GdkEvent* event, bool first_move) break; } - if (event->button.x >= _editor->horizontal_adjustment.get_value() + _editor->canvas_width) { + if (event->button.x >= _editor->horizontal_adjustment.get_value() + _editor->_canvas_width) { _editor->start_canvas_autoscroll (1, 0); } @@ -3187,6 +3181,7 @@ RangeMarkerBarDrag::finished (GdkEvent* event, bool movement_occurred) if (movement_occurred) { motion (event, false); + _drag_rect->hide(); switch (_operation) { case CreateRangeMarker: @@ -3208,15 +3203,12 @@ RangeMarkerBarDrag::finished (GdkEvent* event, bool movement_occurred) XMLNode &after = _editor->session->locations()->get_state(); _editor->session->add_command(new MementoCommand(*(_editor->session->locations()), &before, &after)); _editor->commit_reversible_command (); - - _drag_rect->hide(); break; } case CreateTransportMarker: // popup menu to pick loop or punch _editor->new_transport_marker_context_menu (&event->button, _item); - break; } } else {