X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fstep_editor.cc;h=3ea3bb4ccd6cd99427a07c8a18edc11152adcf15;hb=b64dcac17ec6ab503198d933ef893760fb02ae22;hp=7bd82cfa7d838c8a568d5d1b0e01b3f4dad27861;hpb=2eef0612b9bd4217bf9c137688955d68966dae16;p=ardour.git diff --git a/gtk2_ardour/step_editor.cc b/gtk2_ardour/step_editor.cc index 7bd82cfa7d..3ea3bb4ccd 100644 --- a/gtk2_ardour/step_editor.cc +++ b/gtk2_ardour/step_editor.cc @@ -1,5 +1,5 @@ /* - 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 @@ -88,7 +88,7 @@ StepEditor::start_step_editing () void StepEditor::resync_step_edit_position () { - step_edit_insert_position = _editor.get_preferred_edit_position (false, false, true); + step_edit_insert_position = _editor.get_preferred_edit_position (Editing::EDIT_IGNORE_NONE, false, true); } void @@ -115,10 +115,14 @@ StepEditor::prepare_step_edit_region () } 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); - step_edit_region = _mtv.add_region (step_edit_insert_position, floor (m.frames_per_bar (t, _mtv.session()->frame_rate())), true); + double baf = _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, len, true, _editor.get_grid_music_divisions (0)); RegionView* rv = _mtv.midi_view()->find_view (step_edit_region); step_edit_region_view = dynamic_cast(rv); @@ -226,6 +230,9 @@ StepEditor::step_edit_sustain (Evoral::Beats beats) 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())); @@ -317,6 +324,8 @@ StepEditor::step_add_note (uint8_t channel, uint8_t pitch, uint8_t velocity, Evo _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; } @@ -356,8 +365,10 @@ StepEditor::step_edit_toggle_chord () { 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; @@ -375,7 +386,7 @@ StepEditor::step_edit_rest (Evoral::Beats beats) 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); } @@ -385,7 +396,9 @@ void 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