diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index d26e9b1323..af44311085 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -1498,7 +1498,6 @@ void MidiRegionView::update_note (CanvasNote* ev, bool update_ghost_regions) { boost::shared_ptr note = ev->note(); - const double x = trackview.editor().frame_to_pixel (source_beats_to_region_frames (note->time())); const double y1 = midi_stream_view()->note_to_y(note->note()); @@ -2302,13 +2301,9 @@ MidiRegionView::note_dropped(CanvasNoteEvent *, frameoffset_t dt, int8_t dnote) start_note_diff_command (_("move notes")); for (Selection::iterator i = _selection.begin(); i != _selection.end() ; ++i) { - - cerr << "Note dropped, was at " << (*i)->note()->time() << " now + " << dt << endl; - cerr << "original pos as frames " << source_beats_to_absolute_frames ((*i)->note()->time()) << endl; - Evoral::MusicalTime new_time = absolute_frames_to_source_beats (source_beats_to_absolute_frames ((*i)->note()->time()) + dt); - - cerr << "new time in beats = " << new_time << endl; + framepos_t new_frames = source_beats_to_absolute_frames ((*i)->note()->time()) + dt; + Evoral::MusicalTime new_time = absolute_frames_to_source_beats (new_frames); if (new_time < 0) { continue; diff --git a/libs/ardour/beats_frames_converter.cc b/libs/ardour/beats_frames_converter.cc index 03a581e276..215292f6c1 100644 --- a/libs/ardour/beats_frames_converter.cc +++ b/libs/ardour/beats_frames_converter.cc @@ -24,7 +24,7 @@ namespace ARDOUR { -/** Takes a duration in beats and considers it as a distance from the origin +/** Takes a positive duration in beats and considers it as a distance from the origin * supplied to the constructor. Returns the equivalent number of frames, * taking tempo changes into account. */ @@ -32,7 +32,6 @@ framecnt_t BeatsFramesConverter::to (double beats) const { assert (beats >= 0); - return _tempo_map.framepos_plus_beats (_origin_b, beats) - _origin_b; } diff --git a/libs/ardour/tempo.cc b/libs/ardour/tempo.cc index e8f894c1b4..5d02746210 100644 --- a/libs/ardour/tempo.cc +++ b/libs/ardour/tempo.cc @@ -1655,6 +1655,7 @@ TempoMap::framepos_minus_bbt (framepos_t pos, BBT_Time op) Glib::RWLock::ReaderLock lm (map_lock); BBTPointList::const_iterator i; framecnt_t extra_frames = 0; + bool had_bars = (op.bars != 0); /* start from the bar|beat right before (or at) pos */ @@ -1667,11 +1668,19 @@ TempoMap::framepos_minus_bbt (framepos_t pos, BBT_Time op) while (i != _map->begin() && (op.bars || op.beats)) { --i; - if ((*i).is_bar()) { - if (op.bars) { - op.bars--; + + if (had_bars) { + if ((*i).is_bar()) { + if (op.bars) { + op.bars--; + } } - } else { + } + + if ((had_bars && op.bars == 0) || !had_bars) { + /* finished counting bars, or none to count, + so decrement beat count + */ if (op.beats) { op.beats--; } @@ -1703,23 +1712,34 @@ TempoMap::framepos_plus_bbt (framepos_t pos, BBT_Time op) int additional_minutes = 1; BBTPointList::const_iterator i; framecnt_t backup_frames = 0; - + bool had_bars = (op.bars != 0); + while (true) { i = bbt_before_or_at (pos); - + op = op_copy; /* we know that (*i).frame is before or equal to pos */ backup_frames = pos - (*i).frame; while (i != _map->end() && (op.bars || op.beats)) { + ++i; - if ((*i).is_bar()) { - if (op.bars) { - op.bars--; + + if (had_bars) { + if ((*i).is_bar()) { + if (op.bars) { + op.bars--; + } } - } else { + } + + if ((had_bars && op.bars == 0) || !had_bars) { + /* finished counting bars, or none to count, + so decrement beat count + */ + if (op.beats) { op.beats--; }