From 0a469527f19f5258e77b4c8982c7a7b3206c7865 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Mon, 13 Jul 2020 18:03:18 -0600 Subject: [PATCH] updated Temporal::Beats ... GUI edition --- gtk2_ardour/automation_region_view.cc | 4 +- gtk2_ardour/automation_time_axis.cc | 4 +- gtk2_ardour/editor.cc | 6 +- gtk2_ardour/editor_drag.cc | 14 ++--- gtk2_ardour/editor_drag.h | 2 +- gtk2_ardour/editor_ops.cc | 8 ++- gtk2_ardour/midi_cut_buffer.cc | 1 - gtk2_ardour/midi_list_editor.cc | 20 +++---- gtk2_ardour/midi_region_view.cc | 80 +++++++++++++-------------- gtk2_ardour/midi_region_view.h | 10 ++-- gtk2_ardour/quantize_dialog.cc | 4 +- gtk2_ardour/quantize_dialog.h | 4 +- gtk2_ardour/step_editor.cc | 2 +- gtk2_ardour/step_entry.cc | 4 +- 14 files changed, 80 insertions(+), 83 deletions(-) diff --git a/gtk2_ardour/automation_region_view.cc b/gtk2_ardour/automation_region_view.cc index 3ba73058d1..53773f2c76 100644 --- a/gtk2_ardour/automation_region_view.cc +++ b/gtk2_ardour/automation_region_view.cc @@ -247,7 +247,7 @@ AutomationRegionView::paste (samplepos_t pos /* add multi-paste offset if applicable */ if (parameter_is_midi (src_type)) { // convert length to samples (incl tempo-ramps) - len = DoubleBeatsSamplesConverter (view->session()->tempo_map(), pos).to (len * paste_count); + len = BeatsSamplesConverter (view->session()->tempo_map(), pos).to (Temporal::Beats::from_double (len * paste_count)); pos += view->editor ().get_paste_offset (pos, paste_count > 0 ? 1 : 0, len); } else { pos += view->editor ().get_paste_offset (pos, paste_count, len); @@ -258,7 +258,7 @@ AutomationRegionView::paste (samplepos_t pos pos - _source_relative_time_converter.origin_b()); XMLNode& before = my_list->get_state(); - my_list->paste(*slist, model_pos, DoubleBeatsSamplesConverter (view->session()->tempo_map(), pos)); + my_list->paste(*slist, model_pos, BeatsSamplesConverter (view->session()->tempo_map(), pos)); view->session()->add_command( new MementoCommand(_line->memento_command_binder(), &before, &my_list->get_state())); diff --git a/gtk2_ardour/automation_time_axis.cc b/gtk2_ardour/automation_time_axis.cc index 440ad10b76..1eaa778427 100644 --- a/gtk2_ardour/automation_time_axis.cc +++ b/gtk2_ardour/automation_time_axis.cc @@ -858,7 +858,7 @@ AutomationTimeAxisView::paste_one (samplepos_t pos, unsigned paste_count, float if (parameter_is_midi (src_type)) { // convert length to samples (incl tempo-ramps) - len = DoubleBeatsSamplesConverter (_session->tempo_map(), pos).to (len * paste_count); + len = BeatsSamplesConverter (_session->tempo_map(), pos).to (Temporal::Beats::from_double (len * paste_count)); pos += _editor.get_paste_offset (pos, paste_count > 0 ? 1 : 0, len); } else { pos += _editor.get_paste_offset (pos, paste_count, len); @@ -868,7 +868,7 @@ AutomationTimeAxisView::paste_one (samplepos_t pos, unsigned paste_count, float double const model_pos = _line->time_converter().from (pos - _line->time_converter().origin_b ()); XMLNode &before = alist->get_state(); - alist->paste (**p, model_pos, DoubleBeatsSamplesConverter (_session->tempo_map(), pos)); + alist->paste (**p, model_pos, BeatsSamplesConverter (_session->tempo_map(), pos)); _session->add_command (new MementoCommand(*alist.get(), &before, &alist->get_state())); return true; diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 4c7edfeb24..f9889c1544 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -4154,16 +4154,16 @@ Editor::get_grid_type_as_beats (bool& success, samplepos_t position) const unsigned divisions = get_grid_beat_divisions(position); if (divisions) { - return Temporal::Beats(1.0 / (double)get_grid_beat_divisions(position)); + return Temporal::Beats::from_double (1.0 / (double)get_grid_beat_divisions(position)); } switch (_grid_type) { case GridTypeBeat: - return Temporal::Beats(4.0 / _session->tempo_map().meter_at_sample (position).note_divisor()); + return Temporal::Beats::from_double (4.0 / _session->tempo_map().meter_at_sample (position).note_divisor()); case GridTypeBar: if (_session) { const Meter& m = _session->tempo_map().meter_at_sample (position); - return Temporal::Beats((4.0 * m.divisions_per_bar()) / m.note_divisor()); + return Temporal::Beats::from_double ((4.0 * m.divisions_per_bar()) / m.note_divisor()); } break; default: diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index bd3ec06942..4e823399ee 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -5935,11 +5935,11 @@ NoteDrag::start_grab (GdkEvent* event, Gdk::Cursor *) } /** @return Current total drag x change in quarter notes */ -double +Temporal::Beats NoteDrag::total_dx (GdkEvent * event) const { if (_x_constrained) { - return 0; + return Temporal::Beats(); } TempoMap& map (_editor->session()->tempo_map()); @@ -5948,10 +5948,10 @@ NoteDrag::total_dx (GdkEvent * event) const sampleoffset_t const dx = _editor->pixel_to_sample (_drags->current_pointer_x() - grab_x()); /* primary note time */ - sampleoffset_t const n = map.sample_at_quarter_note (_region->session_relative_qn (_primary->note()->time().to_double())); + sampleoffset_t const n = map.sample_at_quarter_note (_region->session_relative_qn (_primary->note()->time())); /* primary note time in quarter notes */ - double const n_qn = _region->session_relative_qn (_primary->note()->time().to_double()); + double const n_qn = _region->session_relative_qn (_primary->note()->time()); /* new time of the primary note in session samples */ sampleoffset_t st = n + dx + snap_delta (event->button.state); @@ -5959,7 +5959,7 @@ NoteDrag::total_dx (GdkEvent * event) const /* possibly snap and return corresponding delta in quarter notes */ MusicSample snap (st, 0); _editor->snap_to_with_modifier (snap, event, RoundNearest, SnapToGrid_Unscaled); - double ret = map.exact_qn_at_sample (snap.sample, snap.division) - n_qn - snap_delta_music (event->button.state); + Temporal::Beats ret = Temporal::Beats::from_double (map.exact_qn_at_sample (snap.sample, snap.division) - n_qn - snap_delta_music (event->button.state)); /* prevent the earliest note being dragged earlier than the region's start position */ if (_earliest + ret < _region->midi_region()->start_beats()) { @@ -6000,7 +6000,7 @@ NoteDrag::motion (GdkEvent * event, bool first_move) } /* Total change in x and y since the start of the drag */ - double const dx_qn = total_dx (event); + Temporal::Beats const dx_qn = total_dx (event); int8_t const dy = total_dy (); /* Now work out what we have to do to the note canvas items to set this new drag delta */ @@ -6690,7 +6690,7 @@ HitCreateDrag::start_grab (GdkEvent* event, Gdk::Cursor* cursor) } const samplepos_t start = map.sample_at_quarter_note (eqaf) - _region_view->region()->position(); - Temporal::Beats length = Temporal::Beats(1.0 / 32.0); /* 1/32 beat = 1/128 note */ + Temporal::Beats length = Temporal::Beats::from_double (1.0 / 32.0); /* 1/32 beat = 1/128 note */ _editor->begin_reversible_command (_("Create Hit")); _region_view->clear_note_selection(); diff --git a/gtk2_ardour/editor_drag.h b/gtk2_ardour/editor_drag.h index de4714fb1b..7ea94ff1be 100644 --- a/gtk2_ardour/editor_drag.h +++ b/gtk2_ardour/editor_drag.h @@ -597,7 +597,7 @@ public: private: - double total_dx (GdkEvent * event) const; // total movement in quarter notes + Temporal::Beats total_dx (GdkEvent * event) const; // total movement in quarter notes int8_t total_dy () const; MidiRegionView* _region; diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index c9eb193d87..c9350eb546 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -4450,7 +4450,7 @@ Editor::cut_copy_points (Editing::CutCopyOp op, Temporal::Beats earliest, bool m lists[al].copy->fast_simple_add ((*ctrl_evt)->when, (*ctrl_evt)->value); if (midi) { /* Update earliest MIDI start time in beats */ - earliest = std::min(earliest, Temporal::Beats((*ctrl_evt)->when)); + earliest = std::min(earliest, Temporal::Beats::from_double ((*ctrl_evt)->when)); } else { /* Update earliest session start time in samples */ start.sample = std::min(start.sample, (*sel_point)->line().session_position(ctrl_evt)); @@ -4470,7 +4470,9 @@ Editor::cut_copy_points (Editing::CutCopyOp op, Temporal::Beats earliest, bool m snap_to(start, RoundDownMaybe); } - const double line_offset = midi ? earliest.to_double() : start.sample; + /* XXX NUTEMPO BROKEN FOR MIDI */ + //const double line_offset = midi ? earliest.to_double() : start.sample; + const double line_offset = start.sample; for (Lists::iterator i = lists.begin(); i != lists.end(); ++i) { /* Correct this copy list so that it is relative to the earliest start time, so relative ordering between points is preserved @@ -5700,7 +5702,7 @@ Editor::apply_midi_note_edit_op_to_region (MidiOperator& op, MidiRegionView& mrv vector::Notes> v; v.push_back (selected); - Temporal::Beats pos_beats = Temporal::Beats (mrv.midi_region()->beat()) - mrv.midi_region()->start_beats(); + Temporal::Beats pos_beats = Temporal::Beats::from_double (mrv.midi_region()->beat() - mrv.midi_region()->start_beats()); return op (mrv.midi_region()->model(), pos_beats, v); } diff --git a/gtk2_ardour/midi_cut_buffer.cc b/gtk2_ardour/midi_cut_buffer.cc index e7181b1faf..3232069c20 100644 --- a/gtk2_ardour/midi_cut_buffer.cc +++ b/gtk2_ardour/midi_cut_buffer.cc @@ -23,7 +23,6 @@ using namespace ARDOUR; MidiCutBuffer::MidiCutBuffer (Session* s) : AutomatableSequence (*s) - , _origin (0) { } diff --git a/gtk2_ardour/midi_list_editor.cc b/gtk2_ardour/midi_list_editor.cc index fb52699092..dd3ac96680 100644 --- a/gtk2_ardour/midi_list_editor.cc +++ b/gtk2_ardour/midi_list_editor.cc @@ -293,7 +293,7 @@ MidiListEditor::scroll_event (GdkEventScroll* ev) switch (prop) { case MidiModel::NoteDiffCommand::StartTime: - if (note->time() + fdelta >= 0) { + if (note->time() + fdelta >= Temporal::Beats()) { cmd->change (note, prop, note->time() + fdelta); } else { cmd->change (note, prop, Temporal::Beats()); @@ -303,11 +303,10 @@ MidiListEditor::scroll_event (GdkEventScroll* ev) cmd->change (note, prop, (uint8_t) (note->velocity() + idelta)); break; case MidiModel::NoteDiffCommand::Length: - if (note->length().to_double() + fdelta >= - Temporal::Beats::tick().to_double()) { + if (note->length() + fdelta >= Temporal::Beats::one_tick()) { cmd->change (note, prop, note->length() + fdelta); } else { - cmd->change (note, prop, Temporal::Beats::tick()); + cmd->change (note, prop, Temporal::Beats::one_tick()); } break; case MidiModel::NoteDiffCommand::Channel: @@ -336,7 +335,7 @@ MidiListEditor::scroll_event (GdkEventScroll* ev) switch (prop) { case MidiModel::NoteDiffCommand::StartTime: - if (note->time() + fdelta >= 0) { + if (note->time() + fdelta >= Temporal::Beats()) { cmd->change (note, prop, note->time() + fdelta); } else { cmd->change (note, prop, Temporal::Beats()); @@ -346,11 +345,10 @@ MidiListEditor::scroll_event (GdkEventScroll* ev) cmd->change (note, prop, (uint8_t) (note->velocity() + idelta)); break; case MidiModel::NoteDiffCommand::Length: - if (note->length() + fdelta >= - Temporal::Beats::tick().to_double()) { + if (note->length() + fdelta >= Temporal::Beats::one_tick()) { cmd->change (note, prop, note->length() + fdelta); } else { - cmd->change (note, prop, Temporal::Beats::tick()); + cmd->change (note, prop, Temporal::Beats::one_tick()); } break; case MidiModel::NoteDiffCommand::Channel: @@ -593,7 +591,7 @@ MidiListEditor::edited (const std::string& path, const std::string& text) int ival; bool apply = false; int idelta = 0; - double fdelta = 0; + Temporal::Beats delta; char const * opname; switch (edit_column) { case 0: // start @@ -696,7 +694,7 @@ MidiListEditor::edited (const std::string& path, const std::string& text) } if (fval > 0.0) { - fdelta = fval - note->length().to_double(); + delta = fval - note->length(); prop = MidiModel::NoteDiffCommand::Length; opname = _("change note length"); apply = true; @@ -724,7 +722,7 @@ MidiListEditor::edited (const std::string& path, const std::string& text) cmd->change (note, prop, (uint8_t) (note->velocity() + idelta)); break; case MidiModel::NoteDiffCommand::Length: - cmd->change (note, prop, note->length() + fdelta); + cmd->change (note, prop, note->length() + delta); break; case MidiModel::NoteDiffCommand::Channel: cmd->change (note, prop, (uint8_t) (note->channel() + idelta)); diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index ef50a9a703..46b9235e83 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -110,16 +110,15 @@ MidiRegionView::MidiRegionView (ArdourCanvas::Container* parent, : RegionView (parent, tv, r, spu, basic_color) , _current_range_min(0) , _current_range_max(0) - , _region_relative_time_converter(r->session().tempo_map(), r->position()) - , _source_relative_time_converter(r->session().tempo_map(), r->position() - r->start()) - , _region_relative_time_converter_double(r->session().tempo_map(), r->position()) + , _region_relative_time_converter(r->session().tempo_map(), Temporal::Beats::from_double (r->position())) + , _source_relative_time_converter(r->session().tempo_map(), Temporal::Beats::from_double (r->position() - r->start())) + , _region_relative_time_converter_double(r->session().tempo_map(), Temporal::Beats::from_double (r->position())) , _active_notes(0) , _note_group (new ArdourCanvas::Container (group)) , _note_diff_command (0) , _ghost_note(0) , _step_edit_cursor (0) - , _step_edit_cursor_width (1.0) - , _step_edit_cursor_position (0.0) + , _step_edit_cursor_width (1, 0) , _channel_selection_scoped_note (0) , _mouse_state(None) , _pressed_button(0) @@ -164,8 +163,7 @@ MidiRegionView::MidiRegionView (ArdourCanvas::Container* parent, , _note_diff_command (0) , _ghost_note(0) , _step_edit_cursor (0) - , _step_edit_cursor_width (1.0) - , _step_edit_cursor_position (0.0) + , _step_edit_cursor_width (1,0) , _channel_selection_scoped_note (0) , _mouse_state(None) , _pressed_button(0) @@ -219,8 +217,7 @@ MidiRegionView::MidiRegionView (const MidiRegionView& other) , _note_diff_command (0) , _ghost_note(0) , _step_edit_cursor (0) - , _step_edit_cursor_width (1.0) - , _step_edit_cursor_position (0.0) + , _step_edit_cursor_width (1,0) , _channel_selection_scoped_note (0) , _mouse_state(None) , _pressed_button(0) @@ -249,8 +246,7 @@ MidiRegionView::MidiRegionView (const MidiRegionView& other, boost::shared_ptr note, bo const boost::shared_ptr midi_reg = midi_region(); /* must compare double explicitly as Beats::operator< rounds to ppqn */ - const bool outside = (note->time().to_double() < midi_reg->start_beats() || - note->time().to_double() >= midi_reg->start_beats() + midi_reg->length_beats()); + const bool outside = (note->time() < midi_reg->start_beats() || + note->time() >= midi_reg->start_beats() + midi_reg->length_beats()); visible = (note->note() >= _current_range_min) && (note->note() <= _current_range_max); @@ -1668,7 +1664,7 @@ MidiRegionView::update_sustained (Note* ev, bool update_ghost_regions) boost::shared_ptr note = ev->note(); const double session_source_start = _region->quarter_note() - mr->start_beats(); - const samplepos_t note_start_samples = map.sample_at_quarter_note (note->time().to_double() + session_source_start) - _region->position(); + const samplepos_t note_start_samples = map.sample_at_quarter_note (note->time() + session_source_start) - _region->position(); const double x0 = max (0.,trackview.editor().sample_to_pixel (note_start_samples)); double x1; @@ -1685,7 +1681,7 @@ MidiRegionView::update_sustained (Note* ev, bool update_ghost_regions) /* normal note */ - double note_end_time = note->end_time().to_double(); + Temporal::Beats note_end_time = note->end_time(); if (note->end_time() > mr->start_beats() + mr->length_beats()) { note_end_time = mr->start_beats() + mr->length_beats(); @@ -1740,7 +1736,7 @@ MidiRegionView::update_hit (Hit* ev, bool update_ghost_regions) { boost::shared_ptr note = ev->note(); - const double note_time_qn = note->time().to_double() + (_region->quarter_note() - midi_region()->start_beats()); + const double note_time_qn = note->time() + (_region->quarter_note() - midi_region()->start_beats()); const samplepos_t note_start_samples = trackview.session()->tempo_map().sample_at_quarter_note (note_time_qn) - _region->position(); const double x = trackview.editor().sample_to_pixel(note_start_samples); @@ -2548,7 +2544,7 @@ MidiRegionView::move_selection(double dx_qn, double dy, double cumulative_dy) if (n->note()->time() == earliest) { to_play.push_back (n->note()); } - double const note_time_qn = session_relative_qn (n->note()->time().to_double()); + double const note_time_qn = session_relative_qn (n->note()->time()); double dx = 0.0; if (midi_view()->note_mode() == Sustained) { dx = editor->sample_to_pixel_unrounded (tmap.sample_at_quarter_note (note_time_qn + dx_qn)) @@ -2567,8 +2563,7 @@ MidiRegionView::move_selection(double dx_qn, double dy, double cumulative_dy) /* update length */ if (midi_view()->note_mode() == Sustained) { Note* sus = dynamic_cast (*i); - double const len_dx = editor->sample_to_pixel_unrounded ( - tmap.sample_at_quarter_note (note_time_qn + dx_qn + n->note()->length().to_double())); + double const len_dx = editor->sample_to_pixel_unrounded (tmap.sample_at_quarter_note (note_time_qn + dx_qn + n->note()->length())); sus->set_x1 (n->item()->canvas_to_item (ArdourCanvas::Duple (len_dx, 0)).x); } @@ -2632,7 +2627,7 @@ MidiRegionView::copy_selection (NoteBase* primary) } void -MidiRegionView::move_copies (double dx_qn, double dy, double cumulative_dy) +MidiRegionView::move_copies (Temporal::Beats const & dx_qn, double dy, double cumulative_dy) { typedef vector > PossibleChord; Editor* editor = dynamic_cast (&trackview.editor()); @@ -2645,7 +2640,7 @@ MidiRegionView::move_copies (double dx_qn, double dy, double cumulative_dy) if (n->note()->time() == earliest) { to_play.push_back (n->note()); } - double const note_time_qn = session_relative_qn (n->note()->time().to_double()); + Temporal::Beats const note_time_qn = Temporal::Beats::from_double (session_relative_qn (n->note()->time())); double dx = 0.0; if (midi_view()->note_mode() == Sustained) { dx = editor->sample_to_pixel_unrounded (tmap.sample_at_quarter_note (note_time_qn + dx_qn)) @@ -2662,8 +2657,7 @@ MidiRegionView::move_copies (double dx_qn, double dy, double cumulative_dy) if (midi_view()->note_mode() == Sustained) { Note* sus = dynamic_cast (*i); - double const len_dx = editor->sample_to_pixel_unrounded ( - tmap.sample_at_quarter_note (note_time_qn + dx_qn + n->note()->length().to_double())); + double const len_dx = editor->sample_to_pixel_unrounded (tmap.sample_at_quarter_note (note_time_qn + dx_qn + n->note()->length())); sus->set_x1 (n->item()->canvas_to_item (ArdourCanvas::Duple (len_dx, 0)).x); } @@ -2693,7 +2687,7 @@ MidiRegionView::move_copies (double dx_qn, double dy, double cumulative_dy) } void -MidiRegionView::note_dropped(NoteBase *, double d_qn, int8_t dnote, bool copy) +MidiRegionView::note_dropped(NoteBase *, Temporal::Beats const & d_qn, int8_t dnote, bool copy) { uint8_t lowest_note_in_selection = 127; uint8_t highest_note_in_selection = 0; @@ -2727,9 +2721,9 @@ MidiRegionView::note_dropped(NoteBase *, double d_qn, int8_t dnote, bool copy) for (Selection::iterator i = _selection.begin(); i != _selection.end() ; ++i) { - Temporal::Beats new_time = Temporal::Beats ((*i)->note()->time().to_double() + d_qn); + Temporal::Beats new_time = Temporal::Beats ((*i)->note()->time() + d_qn); - if (new_time < 0) { + if (new_time < Temporal::Beats()) { continue; } @@ -2766,9 +2760,9 @@ MidiRegionView::note_dropped(NoteBase *, double d_qn, int8_t dnote, bool copy) for (CopyDragEvents::iterator i = _copy_drag_events.begin(); i != _copy_drag_events.end() ; ++i) { /* update time */ - Temporal::Beats new_time = Temporal::Beats ((*i)->note()->time().to_double() + d_qn); + Temporal::Beats new_time = (*i)->note()->time() + d_qn; - if (new_time < 0) { + if (new_time < Temporal::Beats()) { continue; } @@ -3005,9 +2999,7 @@ MidiRegionView::update_resizing (NoteBase* primary, bool at_front, double delta_ snapped_x = trackview.editor ().pixel_to_sample (current_x); } - const Temporal::Beats beats = Temporal::Beats (tmap.exact_beat_at_sample (snapped_x + midi_region()->position(), divisions) - - midi_region()->beat()) - + midi_region()->start_beats(); + const Temporal::Beats beats = Temporal::Beats::from_double (tmap.exact_beat_at_sample (snapped_x + midi_region()->position(), divisions) - midi_region()->beat()) + midi_region()->start_beats(); Temporal::Beats len = Temporal::Beats(); @@ -3026,7 +3018,8 @@ MidiRegionView::update_resizing (NoteBase* primary, bool at_front, double delta_ len = std::max (Temporal::Beats (0,1), len); char buf[16]; - snprintf (buf, sizeof (buf), "%.3g beats", len.to_double()); + /* represent as float frac to help out the user */ + snprintf (buf, sizeof (buf), "%.3g beats", len.get_beats() + (len.get_ticks()/(double)Temporal::ticks_per_beat)); show_verbose_cursor (buf, 0, 0); cursor_set = true; @@ -3106,7 +3099,7 @@ MidiRegionView::commit_resizing (NoteBase* primary, bool at_front, double delta_ /* and then to beats */ const double e_qaf = tmap.exact_qn_at_sample (current_fr + midi_region()->position(), divisions); const double quarter_note_start = _region->quarter_note() - midi_region()->start_beats(); - const Temporal::Beats x_beats = Temporal::Beats (e_qaf - quarter_note_start); + const Temporal::Beats x_beats = Temporal::Beats::from_double (e_qaf - quarter_note_start); if (at_front && x_beats < canvas_note->note()->end_time()) { const Temporal::Beats new_start = x_beats - (sign * snap_delta_beats); @@ -3192,7 +3185,7 @@ MidiRegionView::trim_note (NoteBase* event, Temporal::Beats front_delta, Tempora */ if (!!front_delta) { - if (front_delta < 0) { + if (front_delta < std::numeric_limits::lowest()) { if (event->note()->time() < -front_delta) { new_start = Temporal::Beats(); @@ -3225,7 +3218,7 @@ MidiRegionView::trim_note (NoteBase* event, Temporal::Beats front_delta, Tempora if (!!end_delta) { bool can_change = true; - if (end_delta < 0) { + if (end_delta < Temporal::Beats()) { if (event->note()->length() < -end_delta) { can_change = false; } @@ -3407,7 +3400,7 @@ MidiRegionView::change_note_lengths (bool fine, bool shorter, Temporal::Beats de { if (!delta) { if (fine) { - delta = Temporal::Beats(1.0/128.0); + delta = Temporal::Beats::ticks (Temporal::ticks_per_beat / 128); } else { /* grab the current grid distance */ delta = get_grid_beats(_region->position()); @@ -3962,7 +3955,11 @@ MidiRegionView::update_ghost_note (double x, double y, uint32_t state) } /* ghost note may have been snapped before region */ +<<<<<<< HEAD if (snapped_beats.to_double() < 0.0) { +======= + if (_ghost_note && snapped_beats < Temporal::Beats()) { +>>>>>>> 5ec97dc85c (updated Temporal::Beats ... GUI edition) _ghost_note->hide(); return; } @@ -4326,8 +4323,7 @@ MidiRegionView::get_velocity_for_add (MidiModel::TimeType time) const MidiModel::Notes::const_iterator n = m; --n; - const double frac = ((time - (*n)->time()).to_double() / - ((*m)->time() - (*n)->time()).to_double()); + const double frac = (time - (*n)->time()) / ((*m)->time() - (*n)->time()); return (*n)->velocity() + (frac * ((*m)->velocity() - (*n)->velocity())); } @@ -4344,19 +4340,19 @@ MidiRegionView::snap_sample_to_grid_underneath (samplepos_t p, int32_t divisions double eqaf = map.exact_qn_at_sample (p + _region->position(), divisions); if (divisions != 0 && shift_snap) { - const double qaf = map.quarter_note_at_sample (p + _region->position()); + const Temporal::Beats qaf = Temporal::Beats::from_double (map.quarter_note_at_sample (p + _region->position())); /* Hack so that we always snap to the note that we are over, instead of snapping to the next one if we're more than halfway through the one we're over. */ const Temporal::Beats grid_beats = get_grid_beats (p + _region->position()); const double rem = eqaf - qaf; if (rem >= 0.0) { - eqaf -= grid_beats.to_double(); + eqaf -= grid_beats; } } const double session_start_off = _region->quarter_note() - midi_region()->start_beats(); - return Temporal::Beats (eqaf - session_start_off); + return Temporal::Beats::from_double (eqaf - session_start_off); } ChannelMode @@ -4381,7 +4377,7 @@ MidiRegionView::get_grid_beats(samplepos_t pos) const bool success = false; Temporal::Beats beats = editor.get_grid_type_as_beats (success, pos); if (!success) { - beats = Temporal::Beats(1); + beats = Temporal::Beats (1, 0); } return beats; } diff --git a/gtk2_ardour/midi_region_view.h b/gtk2_ardour/midi_region_view.h index 50c8666f49..dfa11d568f 100644 --- a/gtk2_ardour/midi_region_view.h +++ b/gtk2_ardour/midi_region_view.h @@ -211,9 +211,9 @@ public: Temporal::Beats earliest_in_selection (); void move_selection(double dx, double dy, double cumulative_dy); - void note_dropped (NoteBase* ev, double d_qn, int8_t d_note, bool copy); + void note_dropped (NoteBase* ev, Temporal::Beats const & d_qn, int8_t d_note, bool copy); NoteBase* copy_selection (NoteBase* primary); - void move_copies(double dx_qn, double dy, double cumulative_dy); + void move_copies(Temporal::Beats const & dx_qn, double dy, double cumulative_dy); void select_notes (std::list, bool allow_audition); void select_matching_notes (uint8_t notenum, uint16_t channel_mask, bool add, bool extend); @@ -306,8 +306,8 @@ public: return _source_relative_time_converter; } - ARDOUR::DoubleBeatsSamplesConverter const & region_relative_time_converter_double () const { - return _region_relative_time_converter_double; + ARDOUR::BeatsSamplesConverter const & region_relative_time_converter_double () const { + return _region_relative_time_converter; } double session_relative_qn (double qn) const; @@ -485,7 +485,7 @@ public: ARDOUR::BeatsSamplesConverter _region_relative_time_converter; ARDOUR::BeatsSamplesConverter _source_relative_time_converter; - ARDOUR::DoubleBeatsSamplesConverter _region_relative_time_converter_double; + ARDOUR::BeatsSamplesConverter _region_relative_time_converter_double; boost::shared_ptr _model; Events _events; diff --git a/gtk2_ardour/quantize_dialog.cc b/gtk2_ardour/quantize_dialog.cc index a47fe78c26..ea11756b9a 100644 --- a/gtk2_ardour/quantize_dialog.cc +++ b/gtk2_ardour/quantize_dialog.cc @@ -189,8 +189,8 @@ QuantizeDialog::strength () const return strength_adjustment.get_value (); } -float +Temporal::Beats QuantizeDialog::threshold () const { - return threshold_adjustment.get_value (); + return Temporal::Beats::from_double (threshold_adjustment.get_value ()); } diff --git a/gtk2_ardour/quantize_dialog.h b/gtk2_ardour/quantize_dialog.h index c9b9afaf5a..b72a25931c 100644 --- a/gtk2_ardour/quantize_dialog.h +++ b/gtk2_ardour/quantize_dialog.h @@ -27,6 +27,8 @@ #include #include +#include "temporal/beats.h" + #include "ardour/types.h" #include "ardour_dialog.h" @@ -49,7 +51,7 @@ public: bool snap_start() const { return snap_start_button.get_active(); } bool snap_end() const { return snap_end_button.get_active(); } float strength() const; - float threshold () const; + Temporal::Beats threshold () const; float swing () const; private: diff --git a/gtk2_ardour/step_editor.cc b/gtk2_ardour/step_editor.cc index 36ae4254e3..f2b6711777 100644 --- a/gtk2_ardour/step_editor.cc +++ b/gtk2_ardour/step_editor.cc @@ -443,7 +443,7 @@ StepEditor::region_removed (boost::weak_ptr wr) step_edit_region.reset(); step_edit_region_view = 0; // force a recompute of the insert position - step_edit_beat_pos = Temporal::Beats(-1); + step_edit_beat_pos = Temporal::Beats::from_double (-1); } } diff --git a/gtk2_ardour/step_entry.cc b/gtk2_ardour/step_entry.cc index 374791627e..43b825311f 100644 --- a/gtk2_ardour/step_entry.cc +++ b/gtk2_ardour/step_entry.cc @@ -62,7 +62,7 @@ StepEntry::instance() StepEntry::StepEntry () : ArdourWindow (string()) - , _current_note_length (1.0) + , _current_note_length (1, 0) , _current_note_velocity (64) , triplet_button ("3") , dot_adjustment (0.0, 0.0, 3.0, 1.0, 1.0) @@ -549,7 +549,7 @@ StepEntry::note_length () base_time *= 1 + ((dots - 1.0)/dots); } - return Temporal::Beats(base_time); + return Temporal::Beats::from_double (base_time); } uint8_t