/*
- Copyright (C) 2012 Paul Davis
+ Copyright (C) 2012 Paul Davis
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
} else {
- const Meter& m = _mtv.session()->tempo_map().meter_at (step_edit_insert_position);
- const Tempo& t = _mtv.session()->tempo_map().tempo_at (step_edit_insert_position);
+ const Meter& m = _mtv.session()->tempo_map().meter_at_frame (step_edit_insert_position);
+ double baf = max (0.0, _mtv.session()->tempo_map().beat_at_frame (step_edit_insert_position));
+ double next_bar_in_beats = baf + m.divisions_per_bar();
+ framecnt_t next_bar_pos = _mtv.session()->tempo_map().frame_at_beat (next_bar_in_beats);
+ framecnt_t len = next_bar_pos - step_edit_insert_position;
- step_edit_region = _mtv.add_region (step_edit_insert_position, floor (m.frames_per_bar (t, _mtv.session()->frame_rate())), true);
+ step_edit_region = _mtv.add_region (step_edit_insert_position, len, true);
RegionView* rv = _mtv.midi_view()->find_view (step_edit_region);
step_edit_region_view = dynamic_cast<MidiRegionView*>(rv);
void
StepEditor::move_step_edit_beat_pos (Evoral::Beats beats)
{
+ if (!step_edit_region_view) {
+ return;
+ }
if (beats > 0.0) {
step_edit_beat_pos = min (step_edit_beat_pos + beats,
step_edit_region_view->region_frames_to_region_beats (step_edit_region->length()));
_step_edit_chord_duration = max (_step_edit_chord_duration, beat_duration);
}
+ step_edit_region_view->set_step_edit_cursor_width (step_editor->note_length());
+
return 0;
}
{
if (_step_edit_within_chord) {
_step_edit_within_chord = false;
- step_edit_beat_pos += _step_edit_chord_duration;
- step_edit_region_view->move_step_edit_cursor (step_edit_beat_pos);
+ if (step_edit_region_view) {
+ step_edit_beat_pos += _step_edit_chord_duration;
+ step_edit_region_view->move_step_edit_cursor (step_edit_beat_pos);
+ }
} else {
_step_edit_triplet_countdown = 0;
_step_edit_within_chord = true;
success = true;
}
- if (success) {
+ if (success && step_edit_region_view) {
step_edit_beat_pos += beats;
step_edit_region_view->move_step_edit_cursor (step_edit_beat_pos);
}
StepEditor::step_edit_beat_sync ()
{
step_edit_beat_pos = step_edit_beat_pos.round_up_to_beat();
- step_edit_region_view->move_step_edit_cursor (step_edit_beat_pos);
+ if (step_edit_region_view) {
+ step_edit_region_view->move_step_edit_cursor (step_edit_beat_pos);
+ }
}
void
}
framepos_t fpos = step_edit_region_view->region_beats_to_absolute_frames (step_edit_beat_pos);
- fpos = _session->tempo_map().round_to_bar (fpos, RoundUpAlways);
+ fpos = _session->tempo_map().round_to_bar (fpos, RoundUpAlways).frame;
step_edit_beat_pos = step_edit_region_view->region_frames_to_region_beats (fpos - step_edit_region->position()).round_up_to_beat();
step_edit_region_view->move_step_edit_cursor (step_edit_beat_pos);
}