Tempo ramps - consolidate meter dragging code.
This commit is contained in:
parent
8b2f73d5ac
commit
f54b75c869
|
@ -3185,25 +3185,16 @@ MeterMarkerDrag::motion (GdkEvent* event, bool first_move)
|
|||
}
|
||||
}
|
||||
|
||||
framepos_t const pf = adjusted_current_frame (event, false);
|
||||
if (_marker->meter().position_lock_style() == MusicTime) {
|
||||
TempoMap& map (_editor->session()->tempo_map());
|
||||
Timecode::BBT_Time bbt;
|
||||
map.bbt_time (pf, bbt);
|
||||
/* round bbt to bars */
|
||||
map.round_bbt (bbt, -1, RoundNearest);
|
||||
framepos_t pf = adjusted_current_frame (event);
|
||||
|
||||
if ((bbt.bars != _real_section->bbt().bars && pf > last_pointer_frame())
|
||||
|| (bbt.bars < _real_section->bbt().bars && pf < last_pointer_frame())) {
|
||||
|
||||
/* move meter beat-based */
|
||||
_editor->session()->tempo_map().gui_move_meter_bbt (_real_section, bbt);
|
||||
}
|
||||
} else {
|
||||
/* AudioTime */
|
||||
/* move meter frame-based */
|
||||
_editor->session()->tempo_map().gui_move_meter_frame (_real_section, pf);
|
||||
if (_real_section->position_lock_style() == AudioTime && _editor->snap_musical()) {
|
||||
/* never snap to music for audio locked */
|
||||
pf = adjusted_current_frame (event, false);
|
||||
}
|
||||
|
||||
_editor->session()->tempo_map().gui_move_meter (_real_section, pf);
|
||||
|
||||
setup_pointer_frame_offset ();
|
||||
_marker->set_position (pf);
|
||||
show_verbose_cursor_time (_real_section->frame());
|
||||
}
|
||||
|
|
|
@ -399,10 +399,8 @@ class LIBARDOUR_API TempoMap : public PBD::StatefulDestructible
|
|||
|
||||
std::pair<double, framepos_t> predict_tempo_position (TempoSection* section, const Timecode::BBT_Time& bbt);
|
||||
|
||||
void gui_move_tempo (TempoSection*, const std::pair<const double&, const framepos_t&>& pulse);
|
||||
|
||||
void gui_move_meter_frame (MeterSection*, const framepos_t& frame);
|
||||
void gui_move_meter_bbt (MeterSection*, const Timecode::BBT_Time& bbt);
|
||||
void gui_move_tempo (TempoSection*, const std::pair<double, framepos_t>& pulse);
|
||||
void gui_move_meter (MeterSection*, const framepos_t& frame);
|
||||
|
||||
bool gui_change_tempo (TempoSection*, const Tempo& bpm);
|
||||
void gui_dilate_tempo (TempoSection* tempo, const framepos_t& frame, const framepos_t& end_frame, const double& pulse);
|
||||
|
@ -481,6 +479,7 @@ private:
|
|||
|
||||
bool check_solved (const Metrics& metrics) const;
|
||||
bool set_active_tempos (const Metrics& metrics, const framepos_t& frame);
|
||||
|
||||
bool solve_map_frame (Metrics& metrics, TempoSection* section, const framepos_t& frame);
|
||||
bool solve_map_pulse (Metrics& metrics, TempoSection* section, const double& pulse);
|
||||
bool solve_map_frame (Metrics& metrics, MeterSection* section, const framepos_t& frame);
|
||||
|
|
|
@ -2352,7 +2352,7 @@ TempoMap::predict_tempo_position (TempoSection* section, const BBT_Time& bbt)
|
|||
}
|
||||
|
||||
void
|
||||
TempoMap::gui_move_tempo (TempoSection* ts, const pair<const double&, const framepos_t&>& pulse)
|
||||
TempoMap::gui_move_tempo (TempoSection* ts, const pair<double, framepos_t>& pulse)
|
||||
{
|
||||
Metrics future_map;
|
||||
|
||||
|
@ -2388,37 +2388,33 @@ TempoMap::gui_move_tempo (TempoSection* ts, const pair<const double&, const fram
|
|||
}
|
||||
|
||||
void
|
||||
TempoMap::gui_move_meter_frame (MeterSection* ms, const framepos_t& frame)
|
||||
TempoMap::gui_move_meter (MeterSection* ms, const framepos_t& frame)
|
||||
{
|
||||
Metrics future_map;
|
||||
{
|
||||
Glib::Threads::RWLock::WriterLock lm (lock);
|
||||
MeterSection* copy = copy_metrics_and_point (_metrics, future_map, ms);
|
||||
if (solve_map_frame (future_map, copy, frame)) {
|
||||
solve_map_frame (_metrics, ms, frame);
|
||||
recompute_tempos (_metrics);
|
||||
|
||||
if (ms->position_lock_style() == AudioTime) {
|
||||
|
||||
{
|
||||
Glib::Threads::RWLock::WriterLock lm (lock);
|
||||
MeterSection* copy = copy_metrics_and_point (_metrics, future_map, ms);
|
||||
|
||||
if (solve_map_frame (future_map, copy, frame)) {
|
||||
solve_map_frame (_metrics, ms, frame);
|
||||
recompute_tempos (_metrics);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
{
|
||||
Glib::Threads::RWLock::WriterLock lm (lock);
|
||||
MeterSection* copy = copy_metrics_and_point (_metrics, future_map, ms);
|
||||
|
||||
Metrics::const_iterator d = future_map.begin();
|
||||
while (d != future_map.end()) {
|
||||
delete (*d);
|
||||
++d;
|
||||
}
|
||||
const double beat = beat_at_frame_locked (_metrics, frame);
|
||||
const Timecode::BBT_Time bbt = beats_to_bbt_locked (_metrics, beat);
|
||||
|
||||
MetricPositionChanged (); // Emit Signal
|
||||
}
|
||||
|
||||
void
|
||||
TempoMap::gui_move_meter_bbt (MeterSection* ms, const Timecode::BBT_Time& bbt)
|
||||
{
|
||||
Metrics future_map;
|
||||
{
|
||||
Glib::Threads::RWLock::WriterLock lm (lock);
|
||||
MeterSection* copy = copy_metrics_and_point (_metrics, future_map, ms);
|
||||
if (solve_map_bbt (future_map, copy, bbt)) {
|
||||
solve_map_bbt (_metrics, ms, bbt);
|
||||
recompute_tempos (_metrics);
|
||||
if (solve_map_bbt (future_map, copy, bbt)) {
|
||||
solve_map_bbt (_metrics, ms, bbt);
|
||||
recompute_tempos (_metrics);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue