_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
{
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;
}
}
+ _editor->set_snapped_cursor_position(pending_region_position->sample);
+
return dx;
}
RouteTimeAxisView*
RegionMoveDrag::create_destination_time_axis (boost::shared_ptr<Region> region, TimeAxisView* original)
{
+ if (!ARDOUR_UI_UTILS::engine_is_running ()) {
+ return NULL;
+ }
+
/* Add a new track of the correct type, and return the RouteTimeAxisView that is created to display the
new track.
*/
TrimDrag::start_grab (GdkEvent* event, Gdk::Cursor*)
{
TimeAxisView* tvp = &_primary->get_time_axis_view ();
- RouteTimeAxisView* tv = dynamic_cast<RouteTimeAxisView*>(tvp);
samplepos_t const region_start = _primary->region()->position();
samplepos_t const region_end = _primary->region()->last_sample();
RegionView* rv = _primary;
TimeAxisView* tvp = &_primary->get_time_axis_view ();
- RouteTimeAxisView* tv = dynamic_cast<RouteTimeAxisView*>(tvp);
pair<set<boost::shared_ptr<Playlist> >::iterator,bool> insert_result;
sampleoffset_t sample_delta = 0;
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)
{
}
/* 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);
}
_marker->set_position (adjusted_current_sample (event, false));
show_verbose_cursor_time (_real_section->sample());
+ _editor->set_snapped_cursor_position(_real_section->sample());
}
void
}
/* 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());
_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);
} 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.
*/
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));
}
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);
samplepos_t pf;
- if (_editor->snap_musical()) {
+ if (_editor->grid_musical()) {
pf = adjusted_current_sample (event, false);
} else {
pf = adjusted_current_sample (event);
assert (!_copied_locations.empty());
show_verbose_cursor_time (newframe);
+ _editor->set_snapped_cursor_position(newframe);
}
void
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 ();
}
/* 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) {
/* 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 */
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()) );
}
}
}
NoteCreateDrag::grid_samples (samplepos_t t) const
{
- const Evoral::Beats grid_beats = _region_view->get_grid_beats (t);
- const Evoral::Beats t_beats = _region_view->region_samples_to_region_beats (t);
+ const Temporal::Beats grid_beats = _region_view->get_grid_beats (t);
+ const Temporal::Beats t_beats = _region_view->region_samples_to_region_beats (t);
return _region_view->region_beats_to_region_samples (t_beats + grid_beats)
- _region_view->region_beats_to_region_samples (t_beats);
const samplepos_t pf = _drags->current_pointer_sample ();
const int32_t divisions = _editor->get_grid_music_divisions (event->button.state);
- const Evoral::Beats grid_beats = _region_view->get_grid_beats (pf);
+ const Temporal::Beats grid_beats = _region_view->get_grid_beats (pf);
double eqaf = map.exact_qn_at_sample (pf, divisions);
if (divisions != 0) {
- const Evoral::Beats grid_beats = _region_view->get_grid_beats (pf);
+ const Temporal::Beats grid_beats = _region_view->get_grid_beats (pf);
const double qaf = map.quarter_note_at_sample (pf);
/* Hack so that we always snap to the note that we are over, instead of snapping
TempoMap& map (_editor->session()->tempo_map());
const double qn_length = map.quarter_notes_between_samples (start_sess_rel, start_sess_rel + length);
- Evoral::Beats qn_length_beats = max (Evoral::Beats::ticks(1), Evoral::Beats (qn_length));
+ Temporal::Beats qn_length_beats = max (Temporal::Beats::ticks(1), Temporal::Beats (qn_length));
_editor->begin_reversible_command (_("Create Note"));
_region_view->clear_editor_note_selection();
}
const samplepos_t start = map.sample_at_quarter_note (eqaf) - _region_view->region()->position();
- Evoral::Beats length = _region_view->get_grid_beats (pf);
+ Temporal::Beats length = _region_view->get_grid_beats (pf);
_editor->begin_reversible_command (_("Create Hit"));
_region_view->clear_editor_note_selection();
return;
}
- Evoral::Beats length = _region_view->get_grid_beats (pf);
+ Temporal::Beats length = _region_view->get_grid_beats (pf);
boost::shared_ptr<MidiRegion> mr = _region_view->midi_region();
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
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
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);
return;
}
- _editor->split_regions_at (pos, rs, false);
+ _editor->split_regions_at (pos, rs);
}
void