X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_drag.cc;h=654cca2a162d7cfb9409265c4eed782ca4d4e789;hb=dfef8b7f6257364053e13ab4d5e317b703abd0af;hp=dc0a109d885f89b333382d02f1df5911474d1070;hpb=7db12f6b128eef0d63dd6a8eda3d04f4dab1fc79;p=ardour.git diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index dc0a109d88..654cca2a16 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -293,16 +293,9 @@ Drag::start_grab (GdkEvent* event, Gdk::Cursor *cursor) _was_rolling = false; } - switch (_editor->snap_type()) { - case SnapToRegionStart: - case SnapToRegionEnd: - case SnapToRegionSync: - case SnapToRegionBoundary: - _editor->build_region_boundary_cache (); - break; - default: - break; - } +// if ( UIConfiguration::instance().get_snap_to_region_start() || UIConfiguration::instance().get_snap_to_region_end() || UIConfiguration::instance().get_snap_to_region_sync() ) { +// _editor->build_region_boundary_cache (); +// } } /** Call to end a drag `successfully'. Ungrabs item and calls @@ -388,7 +381,7 @@ Drag::setup_snap_delta (MusicSample pos) { TempoMap& map (_editor->session()->tempo_map()); MusicSample snap (pos); - _editor->snap_to (snap, ARDOUR::RoundNearest, false, true); + _editor->snap_to (snap, ARDOUR::RoundNearest, ARDOUR::SnapToAny_Visual, true); _snap_delta = snap.sample - pos.sample; _snap_delta_music = 0.0; @@ -719,6 +712,8 @@ RegionMotionDrag::compute_x_delta (GdkEvent const * event, MusicSample* pending_ } } + _editor->set_snapped_cursor_position(pending_region_position->sample); + return dx; } @@ -2873,7 +2868,6 @@ void TrimDrag::start_grab (GdkEvent* event, Gdk::Cursor*) { TimeAxisView* tvp = &_primary->get_time_axis_view (); - RouteTimeAxisView* tv = dynamic_cast(tvp); samplepos_t const region_start = _primary->region()->position(); samplepos_t const region_end = _primary->region()->last_sample(); @@ -2935,7 +2929,6 @@ TrimDrag::motion (GdkEvent* event, bool first_move) RegionView* rv = _primary; TimeAxisView* tvp = &_primary->get_time_axis_view (); - RouteTimeAxisView* tv = dynamic_cast(tvp); pair >::iterator,bool> insert_result; sampleoffset_t sample_delta = 0; @@ -3231,7 +3224,7 @@ TrimDrag::setup_pointer_sample_offset () MeterMarkerDrag::MeterMarkerDrag (Editor* e, ArdourCanvas::Item* i, bool c) : Drag (e, i) , _copy (c) - , _old_snap_type (e->snap_type()) + , _old_grid_type (e->grid_type()) , _old_snap_mode (e->snap_mode()) , before_state (0) { @@ -3304,14 +3297,14 @@ MeterMarkerDrag::motion (GdkEvent* event, bool first_move) } /* only snap to bars. leave snap mode alone for audio locked meters.*/ if (_real_section->position_lock_style() != AudioTime) { - _editor->set_snap_to (SnapToBar); - _editor->set_snap_mode (SnapNormal); + _editor->set_grid_to (GridTypeBar); + _editor->set_snap_mode (SnapMagnetic); } } samplepos_t pf = adjusted_current_sample (event); - if (_real_section->position_lock_style() == AudioTime && _editor->snap_musical()) { + if (_real_section->position_lock_style() == AudioTime && _editor->grid_musical()) { /* never snap to music for audio locked */ pf = adjusted_current_sample (event, false); } @@ -3322,6 +3315,7 @@ MeterMarkerDrag::motion (GdkEvent* event, bool first_move) _marker->set_position (adjusted_current_sample (event, false)); show_verbose_cursor_time (_real_section->sample()); + _editor->set_snapped_cursor_position(_real_section->sample()); } void @@ -3335,7 +3329,7 @@ MeterMarkerDrag::finished (GdkEvent* event, bool movement_occurred) } /* reinstate old snap setting */ - _editor->set_snap_to (_old_snap_type); + _editor->set_grid_to (_old_grid_type); _editor->set_snap_mode (_old_snap_mode); TempoMap& map (_editor->session()->tempo_map()); @@ -3355,7 +3349,7 @@ MeterMarkerDrag::aborted (bool moved) _marker->set_position (_marker->meter().sample ()); if (moved) { /* reinstate old snap setting */ - _editor->set_snap_to (_old_snap_type); + _editor->set_grid_to (_old_grid_type); _editor->set_snap_mode (_old_snap_mode); _editor->session()->tempo_map().set_state (*before_state, Stateful::current_state_version); @@ -3472,7 +3466,7 @@ TempoMarkerDrag::motion (GdkEvent* event, bool first_move) } else if (_movable && !_real_section->locked_to_meter()) { samplepos_t pf; - if (_editor->snap_musical()) { + if (_editor->grid_musical()) { /* we can't snap to a grid that we are about to move. * gui_move_tempo() will sort out snap using the supplied beat divisions. */ @@ -3487,6 +3481,7 @@ TempoMarkerDrag::motion (GdkEvent* event, bool first_move) map.gui_set_tempo_position (_real_section, pf, sub_num); show_verbose_cursor_time (_real_section->sample()); + _editor->set_snapped_cursor_position(_real_section->sample()); } _marker->set_position (adjusted_current_sample (event, false)); } @@ -3605,7 +3600,7 @@ BBTRulerDrag::motion (GdkEvent* event, bool first_move) TempoMap& map (_editor->session()->tempo_map()); samplepos_t pf; - if (_editor->snap_musical()) { + if (_editor->grid_musical()) { pf = adjusted_current_sample (event, false); } else { pf = adjusted_current_sample (event); @@ -3753,7 +3748,7 @@ TempoTwistDrag::motion (GdkEvent* event, bool first_move) samplepos_t pf; - if (_editor->snap_musical()) { + if (_editor->grid_musical()) { pf = adjusted_current_sample (event, false); } else { pf = adjusted_current_sample (event); @@ -4611,6 +4606,7 @@ MarkerDrag::motion (GdkEvent* event, bool) assert (!_copied_locations.empty()); show_verbose_cursor_time (newframe); + _editor->set_snapped_cursor_position(newframe); } void @@ -5096,7 +5092,7 @@ RubberbandSelectDrag::motion (GdkEvent* event, bool) MusicSample grab (grab_sample (), 0); if (UIConfiguration::instance().get_rubberbanding_snaps_to_grid ()) { - _editor->snap_to_with_modifier (grab, event); + _editor->snap_to_with_modifier (grab, event, RoundNearest, SnapToGrid_Scaled); } else { grab.sample = raw_grab_sample (); } @@ -5679,12 +5675,16 @@ SelectionDrag::finished (GdkEvent* event, bool movement_occurred) /* XXX what if its a music time selection? */ if (s) { - if (s->get_play_range() && s->transport_rolling()) { - s->request_play_range (&_editor->selection->time, true); - } else if (!s->config.get_external_sync()) { - if (UIConfiguration::instance().get_follow_edits() && !s->transport_rolling()) { - s->request_locate (_editor->get_selection().time.start()); + + //if Follow Edits is on, maybe try to follow the range selection ... also consider range-audition mode + if ( !s->config.get_external_sync() && s->transport_rolling() ) { + if ( s->solo_selection_active() ) { + _editor->play_solo_selection(true); //play the newly selected range, and move solos to match + } else if ( UIConfiguration::instance().get_follow_edits() && s->get_play_range() ) { //already rolling a selected range + s->request_play_range (&_editor->selection->time, true); //play the newly selected range } + } else if ( !s->transport_rolling() && UIConfiguration::instance().get_follow_edits() ) { + s->request_locate (_editor->get_selection().time.start()); } if (_editor->get_selection().time.length() != 0) { @@ -6075,7 +6075,7 @@ NoteDrag::total_dx (GdkEvent * event) const /* possibly snap and return corresponding delta in quarter notes */ MusicSample snap (st, 0); - _editor->snap_to_with_modifier (snap, event); + _editor->snap_to_with_modifier (snap, event, RoundNearest, SnapToGrid_Unscaled); double ret = map.exact_qn_at_sample (snap.sample, snap.division) - n_qn - snap_delta_music (event->button.state); /* prevent the earliest note being dragged earlier than the region's start position */ @@ -6146,6 +6146,8 @@ NoteDrag::motion (GdkEvent * event, bool first_move) uint8_t new_note = min (max (_primary->note()->note() + note_delta, 0), 127); _region->show_verbose_cursor_for_new_note_value (_primary->note(), new_note); + + _editor->set_snapped_cursor_position( _region->source_beats_to_absolute_samples(_primary->note()->time()) ); } } } @@ -6958,16 +6960,11 @@ CrossfadeEdgeDrag::aborted (bool) RegionCutDrag::RegionCutDrag (Editor* e, ArdourCanvas::Item* item, samplepos_t pos) : Drag (e, item, true) - , line (new EditorCursor (*e)) { - line->set_position (pos); - line->show (); - line->track_canvas_item().reparent (_editor->_drag_motion_group); } RegionCutDrag::~RegionCutDrag () { - delete line; } void @@ -6980,10 +6977,6 @@ RegionCutDrag::start_grab (GdkEvent* event, Gdk::Cursor* c) void RegionCutDrag::motion (GdkEvent* event, bool) { - MusicSample pos (_drags->current_pointer_sample(), 0); - _editor->snap_to_with_modifier (pos, event); - - line->set_position (pos.sample); } void @@ -6994,7 +6987,6 @@ RegionCutDrag::finished (GdkEvent* event, bool) MusicSample pos (_drags->current_pointer_sample(), 0); _editor->snap_to_with_modifier (pos, event); - line->hide (); RegionSelection rs = _editor->get_regions_from_selection_and_mouse (pos.sample); @@ -7002,7 +6994,7 @@ RegionCutDrag::finished (GdkEvent* event, bool) return; } - _editor->split_regions_at (pos, rs, false); + _editor->split_regions_at (pos, rs); } void