fix OSX compilation
[ardour.git] / gtk2_ardour / step_editor.cc
index 7bd82cfa7d838c8a568d5d1b0e01b3f4dad27861..3ea3bb4ccd6cd99427a07c8a18edc11152adcf15 100644 (file)
@@ -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<MidiRegionView*>(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