From 2a08e4bdaafbcb5699311d1a4ac23520522fe5f6 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Mon, 19 Oct 2020 12:37:54 -0600 Subject: [PATCH] continued work on timeline types conversion. in theory, just editor_ops.cc remains --- gtk2_ardour/analysis_window.cc | 20 +-- gtk2_ardour/ardour_ui.cc | 10 +- gtk2_ardour/ardour_ui_options.cc | 8 +- gtk2_ardour/audio_clock.cc | 2 +- gtk2_ardour/audio_clock.h | 2 +- gtk2_ardour/automation_time_axis.cc | 4 +- gtk2_ardour/automation_time_axis.h | 2 +- gtk2_ardour/editor.h | 22 ++-- gtk2_ardour/editor_actions.cc | 10 +- gtk2_ardour/editor_audio_import.cc | 36 +++--- gtk2_ardour/editor_canvas_events.cc | 2 +- gtk2_ardour/editor_drag.cc | 2 +- gtk2_ardour/editor_mouse.cc | 60 ++++----- gtk2_ardour/editor_ops.cc | 4 +- gtk2_ardour/editor_selection.cc | 148 ++++++++++++----------- gtk2_ardour/editor_sources.cc | 45 +++---- gtk2_ardour/editor_sources.h | 4 +- gtk2_ardour/editor_videotimeline.cc | 7 +- gtk2_ardour/export_dialog.cc | 4 +- gtk2_ardour/export_format_dialog.cc | 38 +++--- gtk2_ardour/export_report.cc | 8 +- gtk2_ardour/export_timespan_selector.cc | 24 ++-- gtk2_ardour/gain_meter.cc | 4 +- gtk2_ardour/insert_remove_time_dialog.cc | 20 +-- gtk2_ardour/insert_remove_time_dialog.h | 4 +- gtk2_ardour/location_ui.cc | 46 ++++--- gtk2_ardour/location_ui.h | 2 +- gtk2_ardour/luainstance.cc | 8 +- gtk2_ardour/main_clock.cc | 18 +-- gtk2_ardour/main_clock.h | 2 +- gtk2_ardour/midi_automation_line.cc | 5 +- gtk2_ardour/midi_region_view.cc | 24 ++-- gtk2_ardour/midi_streamview.cc | 10 +- gtk2_ardour/midi_streamview.h | 2 +- gtk2_ardour/midi_time_axis.cc | 17 ++- gtk2_ardour/region_selection.cc | 4 +- gtk2_ardour/route_time_axis.cc | 2 +- gtk2_ardour/selection.cc | 30 ++--- gtk2_ardour/selection.h | 4 +- gtk2_ardour/tempo_dialog.cc | 6 + gtk2_ardour/time_axis_view_item.cc | 24 ++-- gtk2_ardour/time_selection.cc | 10 +- gtk2_ardour/time_selection.h | 2 + gtk2_ardour/transport_masters_dialog.cc | 2 +- gtk2_ardour/transport_masters_dialog.h | 2 +- gtk2_ardour/wscript | 2 +- 46 files changed, 364 insertions(+), 348 deletions(-) diff --git a/gtk2_ardour/analysis_window.cc b/gtk2_ardour/analysis_window.cc index 2ccaf3876d..5631c899e7 100644 --- a/gtk2_ardour/analysis_window.cc +++ b/gtk2_ardour/analysis_window.cc @@ -261,20 +261,22 @@ AnalysisWindow::analyze_data (Gtk::Button * /*button*/) FFTResult *res = fft_graph.prepareResult(rui->route_color(), rui->route()->name()); for (std::list::iterator j = ts.begin(); j != ts.end(); ++j) { - int n; + samplecnt_t n; + const samplecnt_t slen = j->length().samples(); + for (int channel = 0; channel < n_inputs; channel++) { samplecnt_t x = 0; - while (x < j->length()) { + while (x < slen) { // TODO: What about stereo+ channels? composite all to one, I guess n = fft_graph.windowSize(); - if (x + n >= (*j).length() ) { - n = (*j).length() - x; + if (x + n >= slen) { + n = slen - x; } - n = pl->read(buf, mixbuf, gain, (*j).start + x, n, channel); + n = pl->read(buf, mixbuf, gain, j->start() + timepos_t (x), timecnt_t (n), channel).samples(); if ( n < fft_graph.windowSize()) { for (int j = n; j < fft_graph.windowSize(); j++) { @@ -314,10 +316,10 @@ AnalysisWindow::analyze_data (Gtk::Button * /*button*/) } FFTResult *res = fft_graph.prepareResult(rtav->color(), arv->get_item_name()); int n; - for (unsigned int channel = 0; channel < arv->region()->n_channels(); channel++) { + for (unsigned int channel = 0; channel < arv->audio_region()->n_channels(); channel++) { samplecnt_t x = 0; - samplecnt_t length = arv->region()->length(); + samplecnt_t length = arv->region()->length_samples(); while (x < length) { // TODO: What about stereo+ channels? composite all to one, I guess @@ -328,7 +330,7 @@ AnalysisWindow::analyze_data (Gtk::Button * /*button*/) } memset (buf, 0, n * sizeof (Sample)); - n = arv->audio_region()->read_at(buf, mixbuf, gain, arv->region()->position() + x, n, channel); + n = arv->audio_region()->read_at(buf, mixbuf, gain, arv->region()->position_sample() + x, n, channel); if (n == 0) break; @@ -408,5 +410,3 @@ AnalysisWindow::display_model_changed (Gtk::RadioButton *button) } */ } - - diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 41061e6f9f..95743f1ca8 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -225,7 +225,7 @@ using namespace Editing; ARDOUR_UI *ARDOUR_UI::theArdourUI = 0; -sigc::signal ARDOUR_UI::Clock; +sigc::signal ARDOUR_UI::Clock; sigc::signal ARDOUR_UI::CloseAllDialogs; static bool @@ -2231,7 +2231,7 @@ void ARDOUR_UI::primary_clock_value_changed () { if (_session) { - _session->request_locate (primary_clock->current_time ()); + _session->request_locate (primary_clock->current_time ().samples()); } } @@ -2239,7 +2239,7 @@ void ARDOUR_UI::big_clock_value_changed () { if (_session) { - _session->request_locate (big_clock->current_time ()); + _session->request_locate (big_clock->current_time ().samples()); } } @@ -2247,7 +2247,7 @@ void ARDOUR_UI::secondary_clock_value_changed () { if (_session) { - _session->request_locate (secondary_clock->current_time ()); + _session->request_locate (secondary_clock->current_time ().samples()); } } void @@ -2679,7 +2679,7 @@ ARDOUR_UI::cleanup_peakfiles () RegionSelection rs; TrackViewList empty; empty.clear(); - editor->get_regions_after(rs, (samplepos_t) 0, empty); + editor->get_regions_after(rs, timepos_t (), empty); std::list views = rs.by_layer(); // remove displayed audio-region-views waveforms diff --git a/gtk2_ardour/ardour_ui_options.cc b/gtk2_ardour/ardour_ui_options.cc index 68ad5c2895..7b2653d755 100644 --- a/gtk2_ardour/ardour_ui_options.cc +++ b/gtk2_ardour/ardour_ui_options.cc @@ -526,11 +526,11 @@ ARDOUR_UI::reset_main_clocks () ENSURE_GUI_THREAD (*this, &ARDOUR_UI::reset_main_clocks) if (_session) { - primary_clock->set (_session->audible_sample(), true); - secondary_clock->set (_session->audible_sample(), true); + primary_clock->set (timepos_t (_session->audible_sample()), true); + secondary_clock->set (timepos_t (_session->audible_sample()), true); } else { - primary_clock->set (0, true); - secondary_clock->set (0, true); + primary_clock->set (timepos_t(), true); + secondary_clock->set (timepos_t(), true); } } diff --git a/gtk2_ardour/audio_clock.cc b/gtk2_ardour/audio_clock.cc index 6083b4b6a6..b5769a6bac 100644 --- a/gtk2_ardour/audio_clock.cc +++ b/gtk2_ardour/audio_clock.cc @@ -2310,7 +2310,7 @@ AudioClock::set_mode (Mode m, bool noemit) } void -AudioClock::set_bbt_reference (samplepos_t pos) +AudioClock::set_bbt_reference (timepos_t const & pos) { bbt_reference_time = pos; } diff --git a/gtk2_ardour/audio_clock.h b/gtk2_ardour/audio_clock.h index 1583375c8f..7a152578e8 100644 --- a/gtk2_ardour/audio_clock.h +++ b/gtk2_ardour/audio_clock.h @@ -79,7 +79,7 @@ class AudioClock : public CairoWidget, public ARDOUR::SessionHandlePtr void set_from_playhead (); void locate (); void set_mode (Mode, bool noemit = false); - void set_bbt_reference (samplepos_t); + void set_bbt_reference (Temporal::timepos_t const &); void set_is_duration (bool); void set_is_duration (bool, Temporal::timepos_t const &); diff --git a/gtk2_ardour/automation_time_axis.cc b/gtk2_ardour/automation_time_axis.cc index f44671ac57..8bed5a8fec 100644 --- a/gtk2_ardour/automation_time_axis.cc +++ b/gtk2_ardour/automation_time_axis.cc @@ -753,7 +753,7 @@ AutomationTimeAxisView::build_display_menu () } void -AutomationTimeAxisView::add_automation_event (GdkEvent* event, samplepos_t sample, double y, bool with_guard_points) +AutomationTimeAxisView::add_automation_event (GdkEvent* event, timepos_t const & pos, double y, bool with_guard_points) { if (!_line) { return; @@ -768,7 +768,7 @@ AutomationTimeAxisView::add_automation_event (GdkEvent* event, samplepos_t sampl return; } - timepos_t when (sample); + timepos_t when (pos); _editor.snap_to_with_modifier (when, event); if (UIConfiguration::instance().get_new_automation_points_on_lane()) { diff --git a/gtk2_ardour/automation_time_axis.h b/gtk2_ardour/automation_time_axis.h index 46b3415592..68e0d6c3c6 100644 --- a/gtk2_ardour/automation_time_axis.h +++ b/gtk2_ardour/automation_time_axis.h @@ -87,7 +87,7 @@ public: boost::shared_ptr stripable() const; ARDOUR::PresentationInfo const & presentation_info () const; - void add_automation_event (GdkEvent *, samplepos_t, double, bool with_guard_points); + void add_automation_event (GdkEvent *, Temporal::timepos_t const &, double, bool with_guard_points); void clear_lines (); diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 80fbe90c8e..11a173cca2 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -291,7 +291,7 @@ public: void invert_selection_in_track (); void invert_selection (); void deselect_all (); - long select_range (samplepos_t, samplepos_t); + long select_range (Temporal::timepos_t const & , Temporal::timepos_t const &); void set_selected_regionview_from_region_list (boost::shared_ptr region, Selection::Operation op = Selection::Set); @@ -1299,8 +1299,8 @@ private: void remove_region_sync(); void align_regions (ARDOUR::RegionPoint); void align_regions_relative (ARDOUR::RegionPoint point); - void align_region (boost::shared_ptr, ARDOUR::RegionPoint point, samplepos_t position); - void align_region_internal (boost::shared_ptr, ARDOUR::RegionPoint point, samplepos_t position); + void align_region (boost::shared_ptr, ARDOUR::RegionPoint point, Temporal::timepos_t const & position); + void align_region_internal (boost::shared_ptr, ARDOUR::RegionPoint point, Temporal::timepos_t const & position); void recover_regions (ARDOUR::RegionList); void remove_selected_regions (); void remove_clicked_region (); @@ -1404,7 +1404,7 @@ private: Editing::ImportDisposition disposition, Editing::ImportMode mode, ARDOUR::SrcQuality quality, - samplepos_t& pos, + Temporal::timepos_t& pos, int target_regions, int target_tracks, boost::shared_ptr& track, @@ -1417,7 +1417,7 @@ private: bool& check_sample_rate, Editing::ImportDisposition disposition, Editing::ImportMode mode, - samplepos_t& pos, + Temporal::timepos_t& pos, int target_regions, int target_tracks, boost::shared_ptr& track, @@ -1426,7 +1426,7 @@ private: int add_sources (std::vector paths, ARDOUR::SourceList& sources, - samplepos_t& pos, + Temporal::timepos_t& pos, Editing::ImportDisposition disposition, Editing::ImportMode mode, int target_regions, @@ -1439,7 +1439,7 @@ private: int finish_bringing_in_material (boost::shared_ptr region, uint32_t in_chans, uint32_t out_chans, - samplepos_t& pos, + Temporal::timepos_t& pos, Editing::ImportMode mode, boost::shared_ptr& existing_track, std::string const& new_track_name, @@ -1475,7 +1475,7 @@ private: } Editing::ImportMode mode; - samplepos_t pos; + Temporal::timepos_t pos; int target_tracks; int target_regions; boost::shared_ptr track; @@ -1491,8 +1491,8 @@ private: void import_audio (bool as_tracks); void do_import (std::vector paths, bool split, bool as_tracks); - void import_smf_tempo_map (Evoral::SMF const &, samplepos_t pos); - void import_smf_markers (Evoral::SMF &, samplepos_t pos); + void import_smf_tempo_map (Evoral::SMF const &, Temporal::timepos_t const & pos); + void import_smf_markers (Evoral::SMF &, Temporal::timepos_t const & pos); void move_to_start (); void move_to_end (); void center_playhead (); @@ -2236,7 +2236,7 @@ private: void selected_marker_moved (ARDOUR::Location*); - bool get_edit_op_range (Temporal::timepos_t& start, samplepos_t& end) const; + bool get_edit_op_range (Temporal::timepos_t& start, Temporal::timepos_t& end) const; void get_regions_at (RegionSelection&, Temporal::timepos_t const & where, const TrackViewList& ts) const; void get_regions_after (RegionSelection&, Temporal::timepos_t const & where, const TrackViewList& ts) const; diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc index 7d79534f40..60efd26fc5 100644 --- a/gtk2_ardour/editor_actions.cc +++ b/gtk2_ardour/editor_actions.cc @@ -1042,15 +1042,17 @@ Editor::set_xjadeo_viewoption (int what) void Editor::edit_current_meter () { - ARDOUR::MeterSection* ms = const_cast(&_session->tempo_map().meter_section_at_sample (ARDOUR_UI::instance()->primary_clock->absolute_time())); - edit_meter_section (ms); +#warning NUTEMPO needs new map API + //ARDOUR::MeterSection* ms = const_cast(&_session->tempo_map().meter_section_at_sample (ARDOUR_UI::instance()->primary_clock->absolute_time())); + //edit_meter_section (ms); } void Editor::edit_current_tempo () { - ARDOUR::TempoSection* ts = const_cast(&_session->tempo_map().tempo_section_at_sample (ARDOUR_UI::instance()->primary_clock->absolute_time())); - edit_tempo_section (ts); +#warning NUTEMPO needs new map API + // ARDOUR::TempoSection* ts = const_cast(&_session->tempo_map().tempo_section_at_sample (ARDOUR_UI::instance()->primary_clock->absolute_time())); + // edit_tempo_section (ts); } RefPtr diff --git a/gtk2_ardour/editor_audio_import.cc b/gtk2_ardour/editor_audio_import.cc index 7a766ca7a3..abbc044681 100644 --- a/gtk2_ardour/editor_audio_import.cc +++ b/gtk2_ardour/editor_audio_import.cc @@ -267,7 +267,7 @@ Editor::get_nth_selected_midi_track (int nth) const } void -Editor::import_smf_tempo_map (Evoral::SMF const & smf, samplepos_t pos) +Editor::import_smf_tempo_map (Evoral::SMF const & smf, timepos_t const & pos) { if (!_session) { return; @@ -301,8 +301,9 @@ Editor::import_smf_tempo_map (Evoral::SMF const & smf, samplepos_t pos) } } else { - new_map.replace_meter (new_map.meter_section_at_sample (0), meter, bbt, pos, AudioTime); - new_map.replace_tempo (new_map.tempo_section_at_sample (0), tempo, 0.0, pos, AudioTime); +#warning NUTEMPO needs new tempo map API + //new_map.replace_meter (new_map.meter_section_at_sample (0), meter, bbt, pos, AudioTime); + //new_map.replace_tempo (new_map.tempo_section_at_sample (0), tempo, 0.0, pos, AudioTime); have_initial_meter = true; } @@ -314,7 +315,7 @@ Editor::import_smf_tempo_map (Evoral::SMF const & smf, samplepos_t pos) } void -Editor::import_smf_markers (Evoral::SMF & smf, samplepos_t pos) +Editor::import_smf_markers (Evoral::SMF & smf, timepos_t const & pos) { if (!_session) { return; @@ -332,9 +333,8 @@ Editor::import_smf_markers (Evoral::SMF & smf, samplepos_t pos) for (Evoral::SMF::Markers::const_iterator m = markers.begin(); m != markers.end(); ++m) { // Temporal::Beats beat_pos (m->time_pulses / (double) smf.ppqn() / 4.0); - double beat = m->time_pulses / (double) smf.ppqn(); - samplepos_t samplepos = pos + _session->tempo_map().sample_at_beat (beat); - Location* loc = new Location (*_session, samplepos, samplepos_t (0), m->text, Location::IsMark, 0); + Beats beats = Beats::from_double (m->time_pulses / (double) smf.ppqn()); + Location* loc = new Location (*_session, timepos_t (beats), timepos_t (MusicTime), m->text, Location::IsMark, 0); _session->locations()->add (loc); } @@ -585,7 +585,7 @@ Editor::import_sndfiles (vector paths, ImportDisposition disposition, ImportMode mode, SrcQuality quality, - samplepos_t& pos, + timepos_t& pos, int target_regions, int target_tracks, boost::shared_ptr& track, @@ -658,7 +658,7 @@ Editor::embed_sndfiles (vector paths, bool& check_sample_rate, ImportDisposition disposition, ImportMode mode, - samplepos_t& pos, + timepos_t& pos, int target_regions, int target_tracks, boost::shared_ptr& track, @@ -788,7 +788,7 @@ Editor::embed_sndfiles (vector paths, int Editor::add_sources (vector paths, SourceList& sources, - samplepos_t& pos, + timepos_t& pos, ImportDisposition disposition, ImportMode mode, int target_regions, @@ -827,7 +827,7 @@ Editor::add_sources (vector paths, PropertyList plist; plist.add (ARDOUR::Properties::start, 0); - plist.add (ARDOUR::Properties::length, sources[0]->length (pos)); + plist.add (ARDOUR::Properties::length, sources[0]->length ()); plist.add (ARDOUR::Properties::name, region_name); plist.add (ARDOUR::Properties::layer, 0); plist.add (ARDOUR::Properties::whole_file, true); @@ -910,9 +910,9 @@ Editor::add_sources (vector paths, is a MIDI region the conversion from samples -> beats -> samples will round it back down to 0 again. */ - samplecnt_t len = (*x)->length (pos); + timecnt_t len = (*x)->length (); if (len == 0) { - len = (60.0 / 120.0) * _session->sample_rate (); + len = timecnt_t (_session->sample_rate ()) / 2; } plist.add (ARDOUR::Properties::start, 0); @@ -933,7 +933,7 @@ Editor::add_sources (vector paths, } if (target_regions == 1) { - input_chan = regions.front()->n_channels(); + input_chan = regions.front()->sources().size(); } else { if (target_tracks == 1) { input_chan = regions.size(); @@ -949,7 +949,7 @@ Editor::add_sources (vector paths, } int n = 0; - samplepos_t rlen = 0; + timecnt_t rlen; begin_reversible_command (Operations::insert_file); @@ -993,14 +993,14 @@ Editor::add_sources (vector paths, finish_bringing_in_material (*r, input_chan, output_chan, pos, mode, track, track_names[n], pgroup_id, instrument); - rlen = (*r)->length(); + rlen = (*r)->nt_length(); if (target_tracks != 1) { track.reset (); } else { if (!use_timestamp || !ar) { /* line each one up right after the other */ - pos += (*r)->length(); + pos += (*r)->nt_length(); } } } @@ -1020,7 +1020,7 @@ int Editor::finish_bringing_in_material (boost::shared_ptr region, uint32_t in_chans, uint32_t out_chans, - samplepos_t& pos, + timepos_t& pos, ImportMode mode, boost::shared_ptr& existing_track, string const& new_track_name, diff --git a/gtk2_ardour/editor_canvas_events.cc b/gtk2_ardour/editor_canvas_events.cc index bdecd0047a..af718df394 100644 --- a/gtk2_ardour/editor_canvas_events.cc +++ b/gtk2_ardour/editor_canvas_events.cc @@ -1319,7 +1319,7 @@ Editor::drop_regions (const Glib::RefPtr& /*context*/, if ((boost::dynamic_pointer_cast (region_copy) != 0 && dynamic_cast (rtav) != 0) || (boost::dynamic_pointer_cast (region_copy) != 0 && dynamic_cast (rtav) != 0)) { - _drags->set (new RegionInsertDrag (this, region_copy, rtav, pos), &event); + _drags->set (new RegionInsertDrag (this, region_copy, rtav, timepos_t (pos)), &event); _drags->end_grab (&event); } } diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index af52c1dcdb..1973d14c8e 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -5185,7 +5185,7 @@ LineDrag::finished (GdkEvent* event, bool movement_occurred) AutomationTimeAxisView* atv; if ((atv = dynamic_cast(_editor->clicked_axisview)) != 0) { - samplepos_t where = grab_sample (); + timepos_t where = grab_time (); double cx = 0; double cy = _fixed_grab_y; diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index 7fbd64fe49..479850a329 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -606,7 +606,7 @@ Editor::button_selection (ArdourCanvas::Item* item, GdkEvent* event, ItemType it std::list selectables; uint32_t before, after; - samplecnt_t const where = (samplecnt_t) floor (event->button.x * samples_per_pixel) - clicked_regionview->region ()->position (); + samplecnt_t const where = (samplecnt_t) floor (event->button.x * samples_per_pixel) - clicked_regionview->region ()->position_sample (); if (!argl || !argl->control_points_adjacent (where, before, after)) { break; @@ -1135,12 +1135,12 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT _drags->set (new RegionCreateDrag (this, item, parent), event); } else { /* See if there's a region before the click that we can extend, and extend it if so */ - samplepos_t const t = canvas_event_sample (event); + timepos_t const t (canvas_event_sample (event)); boost::shared_ptr prev = pl->find_next_region (t, End, -1); if (!prev) { _drags->set (new RegionCreateDrag (this, item, parent), event); } else { - prev->set_length (t - prev->position (), get_grid_music_divisions (event->button.state)); + prev->set_length (prev->nt_position ().distance (t)); } } } else { @@ -1237,7 +1237,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT continue; } for (list::const_iterator j = selection->time.begin(); j != selection->time.end(); ++j) { - boost::shared_ptr rl = playlist->regions_touched (j->start, j->end); + boost::shared_ptr rl = playlist->regions_touched (j->start(), j->end()); for (RegionList::iterator ir = rl->begin(); ir != rl->end(); ++ir) { RegionView* rv; if ((rv = tatv->view()->find_view (*ir)) != 0) { @@ -1431,9 +1431,9 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp UIConfiguration::instance().get_follow_edits() && !_session->config.get_external_sync()) { - MusicSample where (canvas_event_sample (event), 0); + timepos_t where (canvas_event_sample (event)); snap_to (where); - _session->request_locate (where.sample, MustStop); + _session->request_locate (where.samples(), MustStop); } switch (event->button.button) { @@ -1478,7 +1478,7 @@ Editor::button_release_dispatch (GdkEventButton* ev) bool Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_type) { - MusicSample where (canvas_event_sample (event), 0); + timepos_t where (canvas_event_sample (event)); AutomationTimeAxisView* atv = 0; _press_cursor_ctx.reset(); @@ -1717,29 +1717,29 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT case MarkerBarItem: if (!_dragging_playhead) { - snap_to_with_modifier (where, event, RoundNearest, SnapToGrid_Scaled); - mouse_add_new_marker (where.sample); + snap_to_with_modifier (where, event, Temporal::RoundNearest, SnapToGrid_Scaled); + mouse_add_new_marker (where); } return true; case CdMarkerBarItem: if (!_dragging_playhead) { /* if we get here then a dragged range wasn't done */ - snap_to_with_modifier (where, event, RoundNearest, SnapToGrid_Scaled); - mouse_add_new_marker (where.sample, true); + snap_to_with_modifier (where, event, Temporal::RoundNearest, SnapToGrid_Scaled); + mouse_add_new_marker (where, true); } return true; case TempoBarItem: case TempoCurveItem: if (!_dragging_playhead && Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier)) { snap_to_with_modifier (where, event); - mouse_add_new_tempo_event (where.sample); + mouse_add_new_tempo_event (where); } return true; case MeterBarItem: if (!_dragging_playhead && Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier)) { - mouse_add_new_meter_event (pixel_to_sample (event->button.x)); + mouse_add_new_meter_event (timepos_t (pixel_to_sample (event->button.x))); } return true; break; @@ -1777,7 +1777,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT bool with_guard_points = Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier); atv = dynamic_cast(clicked_axisview); if (atv) { - atv->add_automation_event (event, where.sample, event->button.y, with_guard_points); + atv->add_automation_event (event, where, event->button.y, with_guard_points); } return true; break; @@ -2226,21 +2226,22 @@ Editor::motion_handler (ArdourCanvas::Item* /*item*/, GdkEvent* event, bool from } else { bool ignored; bool peaks_visible = false; - MusicSample where (0, 0); - if (mouse_sample (where.sample, ignored)) { + sanplepos_t where; + if (mouse_sample (where, ignored)) { /* display peaks */ if (mouse_mode == MouseContent || ArdourKeyboard::indicates_snap (event->motion.state)) { AudioRegionView* arv = dynamic_cast(entered_regionview); if (arv) { - _region_peak_cursor->set (arv, where.sample, samples_per_pixel); + _region_peak_cursor->set (arv, where, samples_per_pixel); peaks_visible = true; } } /* the snapped_cursor shows where an operation (like Split) is going to occur */ - snap_to_with_modifier (where, event); - set_snapped_cursor_position (where.sample); + timepos_t t (where); + snap_to_with_modifier (t, event); + set_snapped_cursor_position (t.sample); } if (!peaks_visible) { @@ -2372,22 +2373,23 @@ Editor::region_view_item_click (AudioRegionView& rv, GdkEventButton* event) if (Keyboard::modifier_state_contains (event->state, Keyboard::PrimaryModifier)) { - samplepos_t where = get_preferred_edit_position(); + timepos_t where = get_preferred_edit_position(); - if (where >= 0) { + if (where.negative()) { + return; + } - if (Keyboard::modifier_state_equals (event->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::SecondaryModifier))) { + if (Keyboard::modifier_state_equals (event->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::SecondaryModifier))) { - align_region (rv.region(), SyncPoint, where); + align_region (rv.region(), SyncPoint, where); - } else if (Keyboard::modifier_state_equals (event->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::TertiaryModifier))) { + } else if (Keyboard::modifier_state_equals (event->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::TertiaryModifier))) { - align_region (rv.region(), End, where); + align_region (rv.region(), End, where); - } else { + } else { - align_region (rv.region(), Start, where); - } + align_region (rv.region(), Start, where); } } } @@ -2646,7 +2648,7 @@ Editor::start_selection_grab (ArdourCanvas::Item* /*item*/, GdkEvent* event) boost::shared_ptr playlist = clicked_axisview->playlist(); playlist->clear_changes (); - clicked_routeview->playlist()->add_region (region, selection->time[clicked_selection].start); + clicked_routeview->playlist()->add_region (region, selection->time[clicked_selection].start()); _session->add_command(new StatefulDiffCommand (playlist)); c.disconnect (); diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index c5cb840fb0..43883e05b7 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -3776,7 +3776,7 @@ Editor::align_regions_relative (RegionPoint point) } void -Editor::align_region (boost::shared_ptr region, RegionPoint point, samplepos_t position) +Editor::align_region (boost::shared_ptr region, RegionPoint point, timepos_t const & position) { begin_reversible_command (_("align region")); align_region_internal (region, point, position); @@ -3784,7 +3784,7 @@ Editor::align_region (boost::shared_ptr region, RegionPoint point, sampl } void -Editor::align_region_internal (boost::shared_ptr region, RegionPoint point, samplepos_t position) +Editor::align_region_internal (boost::shared_ptr region, RegionPoint point, timepos_t const & position) { region->clear_changes (); diff --git a/gtk2_ardour/editor_selection.cc b/gtk2_ardour/editor_selection.cc index 1e025013ea..b36867865c 100644 --- a/gtk2_ardour/editor_selection.cc +++ b/gtk2_ardour/editor_selection.cc @@ -754,24 +754,24 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op) } else if (op == Selection::Extend) { list results; - samplepos_t last_sample; - samplepos_t first_sample; + timepos_t last_pos; + timepos_t first_pos; bool same_track = false; /* 1. find the last selected regionview in the track that was clicked in */ - last_sample = 0; - first_sample = max_samplepos; + last_pos = 0; + first_pos = timepos_t::max (selection->regions.empty() ? Temporal::AudioTime : selection->regions.front()->region()->nt_position().time_domain()); for (RegionSelection::iterator x = selection->regions.begin(); x != selection->regions.end(); ++x) { if (&(*x)->get_time_axis_view() == &clicked_regionview->get_time_axis_view()) { - if ((*x)->region()->last_sample() > last_sample) { - last_sample = (*x)->region()->last_sample(); + if ((*x)->region()->nt_last() > last_pos) { + last_pos = (*x)->region()->nt_last(); } - if ((*x)->region()->first_sample() < first_sample) { - first_sample = (*x)->region()->first_sample(); + if ((*x)->region()->nt_position() < first_pos) { + first_pos = (*x)->region()->nt_position(); } same_track = true; @@ -782,39 +782,39 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op) /* 2. figure out the boundaries for our search for new objects */ - switch (clicked_regionview->region()->coverage (first_sample, last_sample)) { - case Evoral::OverlapNone: - if (last_sample < clicked_regionview->region()->first_sample()) { - first_sample = last_sample; - last_sample = clicked_regionview->region()->last_sample(); + switch (clicked_regionview->region()->coverage (first_pos, last_pos)) { + case Temporal::OverlapNone: + if (last_pos < clicked_regionview->region()->nt_position()) { + first_pos = last_pos; + last_pos = clicked_regionview->region()->nt_last(); } else { - last_sample = first_sample; - first_sample = clicked_regionview->region()->first_sample(); + last_pos = first_pos; + first_pos = clicked_regionview->region()->nt_position(); } break; - case Evoral::OverlapExternal: - if (last_sample < clicked_regionview->region()->first_sample()) { - first_sample = last_sample; - last_sample = clicked_regionview->region()->last_sample(); + case Temporal::OverlapExternal: + if (last_pos < clicked_regionview->region()->nt_position()) { + first_pos = last_pos; + last_pos = clicked_regionview->region()->nt_last(); } else { - last_sample = first_sample; - first_sample = clicked_regionview->region()->first_sample(); + last_pos = first_pos; + first_pos = clicked_regionview->region()->nt_position(); } break; - case Evoral::OverlapInternal: - if (last_sample < clicked_regionview->region()->first_sample()) { - first_sample = last_sample; - last_sample = clicked_regionview->region()->last_sample(); + case Temporal::OverlapInternal: + if (last_pos < clicked_regionview->region()->nt_position()) { + first_pos = last_pos; + last_pos = clicked_regionview->region()->nt_last(); } else { - last_sample = first_sample; - first_sample = clicked_regionview->region()->first_sample(); + last_pos = first_pos; + first_pos = clicked_regionview->region()->nt_position(); } break; - case Evoral::OverlapStart: - case Evoral::OverlapEnd: + case Temporal::OverlapStart: + case Temporal::OverlapEnd: /* nothing to do except add clicked region to selection, since it overlaps with the existing selection in this track. */ @@ -829,15 +829,15 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op) */ - first_sample = clicked_regionview->region()->position(); - last_sample = clicked_regionview->region()->last_sample(); + first_pos = clicked_regionview->region()->nt_position(); + last_pos = clicked_regionview->region()->nt_last(); for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) { - if ((*i)->region()->position() < first_sample) { - first_sample = (*i)->region()->position(); + if ((*i)->region()->nt_position() < first_pos) { + first_pos = (*i)->region()->nt_position(); } - if ((*i)->region()->last_sample() + 1 > last_sample) { - last_sample = (*i)->region()->last_sample(); + if ((*i)->region()->nt_end() > last_pos) { + last_pos = (*i)->region()->nt_last(); } } } @@ -959,7 +959,7 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op) */ for (set::iterator t = relevant_tracks.begin(); t != relevant_tracks.end(); ++t) { - (*t)->get_selectables (first_sample, last_sample, -1.0, -1.0, results); + (*t)->get_selectables (first_pos, last_pos, -1.0, -1.0, results); } /* 4. convert to a vector of regions */ @@ -1290,7 +1290,7 @@ Editor::time_selection_changed () if (_session && !_drags->active()) { if (selection->time.length() != 0) { - _session->set_range_selection (selection->time.start(), selection->time.end_sample()); + _session->set_range_selection (selection->time.start_time(), selection->time.end_time()); } else { _session->clear_range_selection (); } @@ -1360,7 +1360,7 @@ Editor::sensitize_the_right_region_actions (bool because_canvas_crossing) } } else { RegionSelection at_edit_point; - samplepos_t const where = get_preferred_edit_position (Editing::EDIT_IGNORE_NONE, false, !within_track_canvas); + timepos_t const where = get_preferred_edit_position (Editing::EDIT_IGNORE_NONE, false, !within_track_canvas); get_regions_at (at_edit_point, where, selection->tracks); if (!at_edit_point.empty()) { have_edit_point = true; @@ -1456,7 +1456,7 @@ Editor::sensitize_the_right_region_actions (bool because_canvas_crossing) have_video_unlocked = true; } - if (r->position_lock_style() == MusicTime) { + if (r->position_time_domain() == Temporal::BeatTime) { have_position_lock_style_music = true; } else { have_position_lock_style_audio = true; @@ -1683,7 +1683,7 @@ Editor::region_selection_changed () assert (_session); if (!selection->regions.empty()) { - _session->set_object_selection (selection->regions.start(), selection->regions.end_sample()); + _session->set_object_selection (selection->regions.start_time(), selection->regions.end_time()); } else { _session->clear_object_selection (); } @@ -1737,7 +1737,7 @@ Editor::select_all_in_track (Selection::Operation op) begin_reversible_selection_op (X_("Select All in Track")); - clicked_routeview->get_selectables (0, max_samplepos, 0, DBL_MAX, touched); + clicked_routeview->get_selectables (timepos_t(), timepos_t::max (Temporal::AudioTime), 0, DBL_MAX, touched); switch (op) { case Selection::Toggle: @@ -1802,7 +1802,7 @@ Editor::select_all_objects (Selection::Operation op) if ((*iter)->hidden()) { continue; } - (*iter)->get_selectables (0, max_samplepos, 0, DBL_MAX, touched); + (*iter)->get_selectables (timepos_t(), timepos_t::max (Temporal::AudioTime), 0, DBL_MAX, touched); } begin_reversible_selection_op (X_("select all")); @@ -1892,7 +1892,7 @@ Editor::invert_selection () * within the region are already selected. */ void -Editor::select_all_within (samplepos_t start, samplepos_t end, double top, double bot, const TrackViewList& tracklist, Selection::Operation op, bool preserve_if_selected) +Editor::select_all_within (timepos_t const & start, timepos_t const & end, double top, double bot, const TrackViewList& tracklist, Selection::Operation op, bool preserve_if_selected) { list found; @@ -1961,7 +1961,7 @@ Editor::set_selection_from_region () /* select range (this will clear the region selection) */ - selection->set (selection->regions.start(), selection->regions.end_sample()); + selection->set (selection->regions.start_time(), selection->regions.end_time()); /* and select the tracks */ @@ -2024,10 +2024,12 @@ Editor::select_all_selectables_using_time_selection () return; } - samplepos_t start = selection->time[clicked_selection].start; - samplepos_t end = selection->time[clicked_selection].end; + timepos_t start = selection->time[clicked_selection].start(); + timepos_t end = selection->time[clicked_selection].end(); - if (end - start < 1) { + const timecnt_t distance = start.distance (end); + + if (distance.negative() || distance.zero()) { return; } @@ -2043,7 +2045,7 @@ Editor::select_all_selectables_using_time_selection () if ((*iter)->hidden()) { continue; } - (*iter)->get_selectables (start, end - 1, 0, DBL_MAX, touched); + (*iter)->get_selectables (start, end, 0, DBL_MAX, touched); } begin_reversible_selection_op (X_("select all from range")); @@ -2058,7 +2060,7 @@ Editor::select_all_selectables_using_punch() Location* location = _session->locations()->auto_punch_location(); list touched; - if (location == 0 || (location->end() - location->start() <= 1)) { + if (location == 0 || (location->length_samples() <= 1)) { return; } @@ -2075,7 +2077,7 @@ Editor::select_all_selectables_using_punch() if ((*iter)->hidden()) { continue; } - (*iter)->get_selectables (location->start(), location->end() - 1, 0, DBL_MAX, touched); + (*iter)->get_selectables (location->start(), location->end(), 0, DBL_MAX, touched); } begin_reversible_selection_op (X_("select all from punch")); selection->set (touched); @@ -2089,7 +2091,7 @@ Editor::select_all_selectables_using_loop() Location* location = _session->locations()->auto_loop_location(); list touched; - if (location == 0 || (location->end() - location->start() <= 1)) { + if (location == 0 || (location->length_samples() <= 1)) { return; } @@ -2106,7 +2108,7 @@ Editor::select_all_selectables_using_loop() if ((*iter)->hidden()) { continue; } - (*iter)->get_selectables (location->start(), location->end() - 1, 0, DBL_MAX, touched); + (*iter)->get_selectables (location->start(), location->end(), 0, DBL_MAX, touched); } begin_reversible_selection_op (X_("select all from loop")); selection->set (touched); @@ -2117,17 +2119,17 @@ Editor::select_all_selectables_using_loop() void Editor::select_all_selectables_using_cursor (EditorCursor *cursor, bool after) { - samplepos_t start; - samplepos_t end; + timepos_t start; + timepos_t end; list touched; if (after) { - start = cursor->current_sample(); - end = _session->current_end_sample(); + start = timepos_t (cursor->current_sample()); + end = timepos_t (_session->current_end_sample()); } else { if (cursor->current_sample() > 0) { - start = 0; - end = cursor->current_sample() - 1; + start = timepos_t(); + end = timepos_t (cursor->current_sample() - 1); } else { return; } @@ -2170,17 +2172,17 @@ Editor::select_all_selectables_using_cursor (EditorCursor *cursor, bool after) void Editor::select_all_selectables_using_edit (bool after, bool from_context_menu) { - samplepos_t start; - samplepos_t end; + timepos_t start; + timepos_t end; list touched; if (after) { start = get_preferred_edit_position(EDIT_IGNORE_NONE, from_context_menu); - end = _session->current_end_sample(); + end = timepos_t (_session->current_end_sample()); } else { if ((end = get_preferred_edit_position(EDIT_IGNORE_NONE, from_context_menu)) > 1) { - start = 0; - end -= 1; + start = timepos_t (); + end = end.decrement(); } else { return; } @@ -2221,8 +2223,8 @@ Editor::select_all_selectables_using_edit (bool after, bool from_context_menu) void Editor::select_all_selectables_between (bool within) { - samplepos_t start; - samplepos_t end; + timepos_t start; + timepos_t end; list touched; if (!get_edit_op_range (start, end)) { @@ -2268,8 +2270,8 @@ Editor::get_regionviews_at_or_after (samplepos_t pos, RegionSelection& regions) void Editor::select_range_between () { - samplepos_t start; - samplepos_t end; + timepos_t start; + timepos_t end; if (!selection->time.empty()) { selection->clear_time (); @@ -2289,18 +2291,18 @@ Editor::select_range_between () } bool -Editor::get_edit_op_range (samplepos_t& start, samplepos_t& end) const +Editor::get_edit_op_range (timepos_t& start, timepos_t& end) const { /* if an explicit range exists, use it */ if ((mouse_mode == MouseRange || get_smart_mode()) && !selection->time.empty()) { /* we know that these are ordered */ - start = selection->time.start(); - end = selection->time.end_sample(); + start = selection->time.start_time(); + end = selection->time.end_time(); return true; } else { - start = 0; - end = 0; + start = timepos_t (); + end = timepos_t (); return false; } } @@ -2314,7 +2316,7 @@ Editor::deselect_all () } long -Editor::select_range (samplepos_t s, samplepos_t e) +Editor::select_range (timepos_t const & s, timepos_t const & e) { begin_reversible_selection_op (X_("Select Range")); selection->add (clicked_axisview); diff --git a/gtk2_ardour/editor_sources.cc b/gtk2_ardour/editor_sources.cc index dd65ce0753..9311bfb963 100644 --- a/gtk2_ardour/editor_sources.cc +++ b/gtk2_ardour/editor_sources.cc @@ -193,7 +193,7 @@ EditorSources::EditorSources (Editor* e) /* show path as the row tooltip */ _display.set_tooltip_column (6); /* path */ } - + /* set the color of the name field */ TreeViewColumn* tv_col = _display.get_column(0); CellRendererText* renderer = dynamic_cast(_display.get_column_cell_renderer (0)); @@ -402,9 +402,9 @@ EditorSources::populate_row (TreeModel::Row row, boost::shared_ptrdata_type() == DataType::MIDI) { row[_columns.channels] = 0; /*TODO: some better recognition of midi regions*/ } else { - row[_columns.channels] = region->n_channels(); + row[_columns.channels] = region->sources().size(); } - + /* CAPTURED FOR */ row[_columns.captd_for] = source->captured_for(); @@ -552,10 +552,10 @@ EditorSources::selection_changed () if ((iter = _model->get_iter (*i))) { /* highlight any regions in the editor that use this region's source */ - boost::shared_ptr region = (*iter)[_columns.region]; - if (!region) continue; + boost::shared_ptr region = (*iter)[_columns.region]; + if (!region) continue; - boost::shared_ptr source = region->source(); + boost::shared_ptr source = region->source(); if (source) { set > regions; @@ -588,12 +588,12 @@ EditorSources::clock_format_changed () } void -EditorSources::format_position (samplepos_t pos, char* buf, size_t bufsize, bool onoff) +EditorSources::format_position (timepos_t const & pos, char* buf, size_t bufsize, bool onoff) { Temporal::BBT_Time bbt; Timecode::Time timecode; - if (pos < 0) { + if (pos.negative()) { error << string_compose (_("EditorSources::format_position: negative timecode position: %1"), pos) << endmsg; snprintf (buf, bufsize, "invalid"); return; @@ -601,12 +601,13 @@ EditorSources::format_position (samplepos_t pos, char* buf, size_t bufsize, bool switch (ARDOUR_UI::instance()->primary_clock->mode ()) { case AudioClock::BBT: - bbt = _session->tempo_map().bbt_at_sample (pos); - if (onoff) { - snprintf (buf, bufsize, "%03d|%02d|%04d" , bbt.bars, bbt.beats, bbt.ticks); - } else { - snprintf (buf, bufsize, "(%03d|%02d|%04d)" , bbt.bars, bbt.beats, bbt.ticks); - } +#warning NUTEMPO needs tempo map BBT API + // bbt = _session->tempo_map().bbt_at_sample (pos); + // if (onoff) { + // snprintf (buf, bufsize, "%03d|%02d|%04d" , bbt.bars, bbt.beats, bbt.ticks); + // } else { + // snprintf (buf, bufsize, "(%03d|%02d|%04d)" , bbt.bars, bbt.beats, bbt.ticks); + // } break; case AudioClock::MinSec: @@ -615,7 +616,7 @@ EditorSources::format_position (samplepos_t pos, char* buf, size_t bufsize, bool int mins; float secs; - left = pos; + left = pos.samples(); hrs = (int) floor (left / (_session->sample_rate() * 60.0f * 60.0f)); left -= (samplecnt_t) floor (hrs * _session->sample_rate() * 60.0f * 60.0f); mins = (int) floor (left / (_session->sample_rate() * 60.0f)); @@ -630,23 +631,23 @@ EditorSources::format_position (samplepos_t pos, char* buf, size_t bufsize, bool case AudioClock::Seconds: if (onoff) { - snprintf (buf, bufsize, "%.1f", pos / (float)_session->sample_rate()); + snprintf (buf, bufsize, "%.1f", pos.samples() / (float)_session->sample_rate()); } else { - snprintf (buf, bufsize, "(%.1f)", pos / (float)_session->sample_rate()); + snprintf (buf, bufsize, "(%.1f)", pos.samples() / (float)_session->sample_rate()); } break; case AudioClock::Samples: if (onoff) { - snprintf (buf, bufsize, "%" PRId64, pos); + snprintf (buf, bufsize, "%" PRId64, pos.samples()); } else { - snprintf (buf, bufsize, "(%" PRId64 ")", pos); + snprintf (buf, bufsize, "(%" PRId64 ")", pos.samples()); } break; case AudioClock::Timecode: default: - _session->timecode_time (pos, timecode); + _session->timecode_time (pos.samples(), timecode); if (onoff) { snprintf (buf, bufsize, "%02d:%02d:%02d:%02d", timecode.hours, timecode.minutes, timecode.seconds, timecode.frames); } else { @@ -729,9 +730,9 @@ EditorSources::remove_selected_sources () boost::shared_ptr region = (*iter)[_columns.region]; - if (!region) continue; + if (!region) continue; - boost::shared_ptr source = region->source(); + boost::shared_ptr source = region->source(); if (source) { set > regions; RegionFactory::get_regions_using_source (source, regions); diff --git a/gtk2_ardour/editor_sources.h b/gtk2_ardour/editor_sources.h index 2990b88dfd..2e5b9493bf 100644 --- a/gtk2_ardour/editor_sources.h +++ b/gtk2_ardour/editor_sources.h @@ -82,7 +82,7 @@ private: Gtk::TreeModelColumn natural_pos; Gtk::TreeModelColumn path; Gtk::TreeModelColumn take_id; - Gtk::TreeModelColumn natural_s; + Gtk::TreeModelColumn natural_s; Gtk::TreeModelColumn captd_xruns; }; @@ -121,7 +121,7 @@ private: void show_context_menu (int button, int time); - void format_position (ARDOUR::samplepos_t pos, char* buf, size_t bufsize, bool onoff = true); + void format_position (Temporal::timepos_t const & pos, char* buf, size_t bufsize, bool onoff = true); void add_source (boost::shared_ptr); void remove_source (boost::shared_ptr); diff --git a/gtk2_ardour/editor_videotimeline.cc b/gtk2_ardour/editor_videotimeline.cc index 421b8b3d5b..6ff9e01a7f 100644 --- a/gtk2_ardour/editor_videotimeline.cc +++ b/gtk2_ardour/editor_videotimeline.cc @@ -99,11 +99,14 @@ Editor::embed_audio_from_video (std::string path, samplepos_t n, bool lock_posit boost::shared_ptr track; std::string const& gid = ARDOUR::Playlist::generate_pgroup_id (); - bool ok = (import_sndfiles (paths, Editing::ImportDistinctFiles, Editing::ImportAsTrack, ARDOUR::SrcBest, n, 1, 1, track, gid, false) == 0); + Temporal::timepos_t pos (n); + + bool ok = (import_sndfiles (paths, Editing::ImportDistinctFiles, Editing::ImportAsTrack, ARDOUR::SrcBest, pos, 1, 1, track, gid, false) == 0); + if (ok && track) { if (lock_position_to_video) { boost::shared_ptr pl = track->playlist(); - pl->find_next_region (Temporal::timepos_t (n), ARDOUR::End, 0)->set_video_locked (true); + pl->find_next_region (pos, ARDOUR::End, 0)->set_video_locked (true); } _session->save_state ("", true); } diff --git a/gtk2_ardour/export_dialog.cc b/gtk2_ardour/export_dialog.cc index c1a32cfbc2..92310c9ed3 100644 --- a/gtk2_ardour/export_dialog.cc +++ b/gtk2_ardour/export_dialog.cc @@ -97,7 +97,7 @@ ExportDialog::set_session (ARDOUR::Session* s) TimeSelection const & time (editor.get_selection().time); if (!time.empty()) { - profile_manager->set_selection_range (time.front().start, time.front().end); + profile_manager->set_selection_range (time.front().start().samples(), time.front().end().samples()); } else { profile_manager->set_selection_range (); } @@ -584,7 +584,7 @@ ExportRegionDialog::init_gui () void ExportRegionDialog::init_components () { - string loc_id = profile_manager->set_single_range (region.nt_position(), region.nt_position() + region.nt_length(), region.name()); + string loc_id = profile_manager->set_single_range (region.position_sample(), (region.nt_position() + region.nt_length()).samples(), region.name()); preset_selector.reset (new ExportPresetSelector ()); timespan_selector.reset (new ExportTimespanSelectorSingle (_session, profile_manager, loc_id)); diff --git a/gtk2_ardour/export_format_dialog.cc b/gtk2_ardour/export_format_dialog.cc index 77bb6d7611..8b7ab6b540 100644 --- a/gtk2_ardour/export_format_dialog.cc +++ b/gtk2_ardour/export_format_dialog.cc @@ -994,7 +994,7 @@ void ExportFormatDialog::update_clock (AudioClock& clock, ARDOUR::AnyTime const& time) { // TODO position - clock.set (_session->convert_to_samples (time), true); + clock.set (timepos_t (_session->convert_to_samples (time)), true); AudioClock::Mode mode (AudioClock::Timecode); @@ -1023,26 +1023,26 @@ ExportFormatDialog::update_time (AnyTime& time, AudioClock const& clock) return; } - samplecnt_t samples = clock.current_duration (); + samplecnt_t samples = clock.current_duration().samples(); switch (clock.mode ()) { - case AudioClock::Timecode: - time.type = AnyTime::Timecode; - _session->timecode_time (samples, time.timecode); - break; - case AudioClock::BBT: - time.type = AnyTime::BBT; - _session->bbt_time (samples, time.bbt); - break; - case AudioClock::Seconds: - case AudioClock::MinSec: - time.type = AnyTime::Seconds; - time.seconds = (double)samples / _session->sample_rate (); - break; - case AudioClock::Samples: - time.type = AnyTime::Samples; - time.samples = samples; - break; + case AudioClock::Timecode: + time.type = AnyTime::Timecode; + _session->timecode_time (samples, time.timecode); + break; + case AudioClock::BBT: + time.type = AnyTime::BBT; + _session->bbt_time (samples, time.bbt); + break; + case AudioClock::Seconds: + case AudioClock::MinSec: + time.type = AnyTime::Seconds; + time.seconds = (double)samples / _session->sample_rate (); + break; + case AudioClock::Samples: + time.type = AnyTime::Samples; + time.samples = samples; + break; } } diff --git a/gtk2_ardour/export_report.cc b/gtk2_ardour/export_report.cc index b2d3a32789..2af614c5c1 100644 --- a/gtk2_ardour/export_report.cc +++ b/gtk2_ardour/export_report.cc @@ -171,7 +171,7 @@ ExportReport::init (const AnalysisResults & ar, bool with_file) clock = manage (new AudioClock ("sfboxLengthClock", true, "", false, false, true, false)); clock->set_session (_session); clock->set_mode (AudioClock::MinSec); - clock->set (info.length * src_coef + 0.5, true); + clock->set_duration (timecnt_t (samplecnt_t (info.length * src_coef + 0.5)), true); t->attach (*clock, 3, 4, 2, 3); l = manage (new Label (_("Timecode:"), ALIGN_END)); @@ -179,7 +179,7 @@ ExportReport::init (const AnalysisResults & ar, bool with_file) clock = manage (new AudioClock ("sfboxTimecodeClock", true, "", false, false, false, false)); clock->set_session (_session); clock->set_mode (AudioClock::Timecode); - clock->set (info.timecode * src_coef + 0.5, true); + clock->set_duration (timecnt_t (samplecnt_t (info.timecode * src_coef + 0.5)), true); t->attach (*clock, 3, 4, 3, 4); } else if (with_file) { with_file = false; @@ -918,13 +918,13 @@ ExportReport::audition (std::string path, unsigned n_chn, int page) PBD::PropertyList plist; plist.add (ARDOUR::Properties::start, 0); - plist.add (ARDOUR::Properties::length, srclist[0]->length(srclist[0]->natural_position())); + plist.add (ARDOUR::Properties::length, srclist[0]->length ()); plist.add (ARDOUR::Properties::name, rname); plist.add (ARDOUR::Properties::layer, 0); r = boost::dynamic_pointer_cast (RegionFactory::create (srclist, plist, false)); - r->set_position(0); + r->set_position (timepos_t ()); _session->audition_region(r); _audition_num = page; } diff --git a/gtk2_ardour/export_timespan_selector.cc b/gtk2_ardour/export_timespan_selector.cc index b398cad9ac..3652409bb8 100644 --- a/gtk2_ardour/export_timespan_selector.cc +++ b/gtk2_ardour/export_timespan_selector.cc @@ -142,7 +142,7 @@ ExportTimespanSelector::location_sorter(Gtk::TreeModel::iterator a, Gtk::TreeMod if (l2 == ls) return +1; - return l1->start() - l2->start(); + return l2->start().distance (l1->start()).samples(); } void @@ -157,7 +157,7 @@ ExportTimespanSelector::add_range_to_selection (ARDOUR::Location const * loc, bo id = loc->id().to_s(); } - span->set_range (loc->start(), loc->end()); + span->set_range (loc->start().samples(), loc->end().samples()); span->set_name (loc->name()); span->set_range_id (id); span->set_realtime (rt); @@ -226,8 +226,8 @@ ExportTimespanSelector::construct_label (ARDOUR::Location const * location) cons std::string start; std::string end; - samplepos_t start_sample = location->start(); - samplepos_t end_sample = location->end(); + samplepos_t start_sample = location->start().samples(); + samplepos_t end_sample = location->end().samples(); switch (state->time_format) { case ExportProfileManager::BBT: @@ -269,23 +269,23 @@ ExportTimespanSelector::construct_length (ARDOUR::Location const * location) con switch (state->time_format) { case ExportProfileManager::BBT: - s << bbt_str (location->length ()); + s << bbt_str (location->length ().samples()); break; case ExportProfileManager::Timecode: { Timecode::Time tc; - _session->timecode_duration (location->length(), tc); + _session->timecode_duration (location->length().samples(), tc); tc.print (s); break; } case ExportProfileManager::MinSec: - s << ms_str (location->length ()); + s << ms_str (location->length ().samples()); break; case ExportProfileManager::Samples: - s << location->length (); + s << location->length ().samples(); break; } @@ -465,10 +465,10 @@ ExportTimespanSelectorSingle::fill_range_list () row[range_cols.label] = construct_label (*it); row[range_cols.length] = construct_length (*it); //the actual samplecnt_t for sorting - row[range_cols.length_actual] = (*it)->length(); + row[range_cols.length_actual] = (*it)->length().samples(); //start samplecnt_t for sorting - row[range_cols.start] = (*it)->start(); + row[range_cols.start] = (*it)->start().samples(); Glib::DateTime gdt(Glib::DateTime::create_now_local ((*it)->timestamp())); row[range_cols.timestamp] = (*it)->timestamp(); @@ -578,10 +578,10 @@ ExportTimespanSelectorMultiple::fill_range_list () row[range_cols.label] = construct_label (*it); row[range_cols.length] = construct_length (*it); //the actual samplecnt_t for sorting - row[range_cols.length_actual] = (*it)->length(); + row[range_cols.length_actual] = (*it)->length().samples(); //start samplecnt_t for sorting - row[range_cols.start] = (*it)->start(); + row[range_cols.start] = (*it)->start().samples(); Glib::DateTime gdt(Glib::DateTime::create_now_local ((*it)->timestamp())); row[range_cols.timestamp] = (*it)->timestamp(); diff --git a/gtk2_ardour/gain_meter.cc b/gtk2_ardour/gain_meter.cc index abe271c293..34377e6263 100644 --- a/gtk2_ardour/gain_meter.cc +++ b/gtk2_ardour/gain_meter.cc @@ -729,13 +729,13 @@ GainMeterBase::meter_point_clicked (MeterPoint mp) void GainMeterBase::amp_start_touch () { - _control->start_touch (_control->session().transport_sample()); + _control->start_touch (timepos_t (_control->session().transport_sample())); } void GainMeterBase::amp_stop_touch () { - _control->stop_touch (_control->session().transport_sample()); + _control->stop_touch (timepos_t (_control->session().transport_sample())); effective_gain_display (); } diff --git a/gtk2_ardour/insert_remove_time_dialog.cc b/gtk2_ardour/insert_remove_time_dialog.cc index dd05782396..bdc9725c1e 100644 --- a/gtk2_ardour/insert_remove_time_dialog.cc +++ b/gtk2_ardour/insert_remove_time_dialog.cc @@ -74,16 +74,16 @@ InsertRemoveTimeDialog::InsertRemoveTimeDialog (PublicEditor& e, bool remove) //if a Range is selected, assume the user wants to insert/remove the length of the range if ( _editor.get_selection().time.length() != 0 ) { - position_clock.set ( _editor.get_selection().time.start(), true ); - duration_clock.set ( _editor.get_selection().time.end_sample(), true, _editor.get_selection().time.start() ); - duration_clock.set_bbt_reference (_editor.get_selection().time.start()); + position_clock.set (_editor.get_selection().time.start_time(), true); + duration_clock.set (_editor.get_selection().time.end_time(), true, timecnt_t (_editor.get_selection().time.start_time())); + duration_clock.set_bbt_reference (_editor.get_selection().time.start_time()); } else { - samplepos_t const pos = _editor.get_preferred_edit_position (EDIT_IGNORE_MOUSE); - position_clock.set ( pos, true ); + timepos_t const pos = _editor.get_preferred_edit_position (EDIT_IGNORE_MOUSE); + position_clock.set (pos, true); duration_clock.set_bbt_reference (pos); - duration_clock.set (0); + duration_clock.set (timepos_t()); } - + if (!remove) { Label* intersected_label = manage (new Label (_("Intersected regions should:"))); intersected_label->set_alignment (1, 0.5); @@ -190,16 +190,16 @@ InsertRemoveTimeDialog::move_locked_markers () const return _move_locked_markers.get_active (); } -samplepos_t +timepos_t InsertRemoveTimeDialog::position () const { return position_clock.current_time(); } -samplepos_t +timecnt_t InsertRemoveTimeDialog::distance () const { - return duration_clock.current_duration ( position_clock.current_time() ); + return duration_clock.current_duration (position_clock.current_time()); } void diff --git a/gtk2_ardour/insert_remove_time_dialog.h b/gtk2_ardour/insert_remove_time_dialog.h index c63e453e95..af9c3721bf 100644 --- a/gtk2_ardour/insert_remove_time_dialog.h +++ b/gtk2_ardour/insert_remove_time_dialog.h @@ -33,8 +33,8 @@ public: bool move_glued_markers () const; bool move_locked_markers () const; bool move_tempos () const; - samplepos_t position () const; - samplepos_t distance () const; + Temporal::timepos_t position () const; + Temporal::timecnt_t distance () const; private: void move_markers_toggled (); diff --git a/gtk2_ardour/location_ui.cc b/gtk2_ardour/location_ui.cc index adb3a73189..f4c7d1ff72 100644 --- a/gtk2_ardour/location_ui.cc +++ b/gtk2_ardour/location_ui.cc @@ -259,7 +259,7 @@ LocationEditRow::set_location (Location *loc) } hide_check_button.set_active (location->is_hidden()); lock_check_button.set_active (location->locked()); - glue_check_button.set_active (location->position_lock_style() == MusicTime); + glue_check_button.set_active (location->position_time_domain() == Temporal::BeatTime); if (location->is_auto_loop() || location-> is_auto_punch()) { // use label instead of entry @@ -315,7 +315,7 @@ LocationEditRow::set_location (Location *loc) } end_clock.set (location->end(), true); - length_clock.set (location->length(), true); + length_clock.set_duration (location->length(), true); end_clock.show(); length_clock.show(); @@ -355,7 +355,7 @@ LocationEditRow::set_location (Location *loc) location->Changed.connect (connections, invalidator (*this), boost::bind (&LocationEditRow::location_changed, this), gui_context()); location->FlagsChanged.connect (connections, invalidator (*this), boost::bind (&LocationEditRow::flags_changed, this), gui_context()); location->LockChanged.connect (connections, invalidator (*this), boost::bind (&LocationEditRow::lock_changed, this), gui_context()); - location->PositionLockStyleChanged.connect (connections, invalidator (*this), boost::bind (&LocationEditRow::position_lock_style_changed, this), gui_context()); + location->TimeDomainChanged.connect (connections, invalidator (*this), boost::bind (&LocationEditRow::time_domain_changed, this), gui_context()); } void @@ -422,14 +422,12 @@ LocationEditRow::to_playhead_button_pressed (LocationPart part) return; } - const int32_t divisions = PublicEditor::instance().get_grid_music_divisions (0); - switch (part) { case LocStart: - location->set_start (_session->transport_sample (), false, true, divisions); + location->set_start (timepos_t (_session->transport_sample ()), false); break; case LocEnd: - location->set_end (_session->transport_sample (), false, true,divisions); + location->set_end (timepos_t (_session->transport_sample ()), false); if (location->is_session_range()) { _session->set_session_range_is_free (false); } @@ -444,10 +442,10 @@ LocationEditRow::locate_button_pressed (LocationPart part) { switch (part) { case LocStart: - _session->request_locate (start_clock.current_time()); + _session->request_locate (start_clock.current_time().samples()); break; case LocEnd: - _session->request_locate (end_clock.current_time()); + _session->request_locate (end_clock.current_time().samples()); break; default: break; @@ -458,7 +456,7 @@ bool LocationEditRow::locate_to_clock (GdkEventButton* ev, AudioClock* clock) { if (Keyboard::is_button2_event (ev)) { - _session->request_locate (clock->current_time()); + _session->request_locate (clock->current_time().samples()); return true; } return false; @@ -471,20 +469,18 @@ LocationEditRow::clock_changed (LocationPart part) return; } - const int32_t divisions = PublicEditor::instance().get_grid_music_divisions (0); - switch (part) { case LocStart: - location->set_start (start_clock.current_time(), false, true, divisions); + location->set_start (start_clock.current_time(), false); break; case LocEnd: - location->set_end (end_clock.current_time(), false, true, divisions); + location->set_end (end_clock.current_time(), false); if (location->is_session_range()) { _session->set_session_range_is_free (false); } break; case LocLength: - location->set_end (location->start() + length_clock.current_duration(), false, true, divisions); + location->set_end (location->start() + length_clock.current_duration(), false); if (location->is_session_range()) { _session->set_session_range_is_free (false); } @@ -572,10 +568,10 @@ LocationEditRow::glue_toggled () return; } - if (location->position_lock_style() == AudioTime) { - location->set_position_lock_style (MusicTime); + if (location->position_time_domain() == Temporal::AudioTime) { + location->set_position_time_domain (Temporal::BeatTime); } else { - location->set_position_lock_style (AudioTime); + location->set_position_time_domain (Temporal::AudioTime); } } @@ -627,7 +623,7 @@ LocationEditRow::end_changed () i_am_the_modifier++; end_clock.set (location->end()); - length_clock.set (location->length()); + length_clock.set_duration (location->length()); i_am_the_modifier--; } @@ -670,7 +666,7 @@ LocationEditRow::location_changed () start_clock.set (location->start()); end_clock.set (location->end()); - length_clock.set (location->length()); + length_clock.set_duration (location->length()); set_clock_editable_status (); @@ -689,7 +685,7 @@ LocationEditRow::flags_changed () cd_check_button.set_active (location->is_cd_marker()); hide_check_button.set_active (location->is_hidden()); - glue_check_button.set_active (location->position_lock_style() == MusicTime); + glue_check_button.set_active (location->position_time_domain() == Temporal::BeatTime); i_am_the_modifier--; } @@ -711,7 +707,7 @@ LocationEditRow::lock_changed () } void -LocationEditRow::position_lock_style_changed () +LocationEditRow::time_domain_changed () { if (!location) { return; @@ -719,7 +715,7 @@ LocationEditRow::position_lock_style_changed () i_am_the_modifier++; - glue_check_button.set_active (location->position_lock_style() == MusicTime); + glue_check_button.set_active (location->position_time_domain() == Temporal::BeatTime); i_am_the_modifier--; } @@ -1040,7 +1036,7 @@ LocationUI::add_new_location() string markername; if (_session) { - samplepos_t where = _session->audible_sample(); + timepos_t where (_session->audible_sample()); _session->locations()->next_available_name(markername,"mark"); Location *location = new Location (*_session, where, where, markername, Location::IsMark); if (UIConfiguration::instance().get_name_new_markers()) { @@ -1062,7 +1058,7 @@ LocationUI::add_new_range() string rangename; if (_session) { - samplepos_t where = _session->audible_sample(); + timepos_t where (_session->audible_sample()); _session->locations()->next_available_name(rangename,"unnamed"); Location *location = new Location (*_session, where, where, rangename, Location::IsRangeMarker); PublicEditor::instance().begin_reversible_command (_("add range marker")); diff --git a/gtk2_ardour/location_ui.h b/gtk2_ardour/location_ui.h index 871a169410..b0e48d62e5 100644 --- a/gtk2_ardour/location_ui.h +++ b/gtk2_ardour/location_ui.h @@ -146,7 +146,7 @@ protected: void location_changed (); void flags_changed (); void lock_changed (); - void position_lock_style_changed (); + void time_domain_changed (); void set_clock_editable_status (); void show_cd_track_details (); diff --git a/gtk2_ardour/luainstance.cc b/gtk2_ardour/luainstance.cc index 039ea86016..e2e66adefe 100644 --- a/gtk2_ardour/luainstance.cc +++ b/gtk2_ardour/luainstance.cc @@ -846,14 +846,16 @@ LuaInstance::register_classes (lua_State* L) .beginClass ("RegionSelection") - .addFunction ("start", &RegionSelection::start) - .addFunction ("end_sample", &RegionSelection::end_sample) + .addFunction ("start_time", &RegionSelection::start_time) + .addFunction ("end_time", &RegionSelection::end_time) .addFunction ("n_midi_regions", &RegionSelection::n_midi_regions) .addFunction ("regionlist", &RegionSelection::regionlist) // XXX check windows binding (libardour) .endClass () .deriveClass > ("TimeSelection") - .addFunction ("start", &TimeSelection::start) + .addFunction ("start_time", &TimeSelection::start_time) + .addFunction ("end_time", &TimeSelection::end_time) + .addFunction ("start_sample", &TimeSelection::start_sample) .addFunction ("end_sample", &TimeSelection::end_sample) .addFunction ("length", &TimeSelection::length) .endClass () diff --git a/gtk2_ardour/main_clock.cc b/gtk2_ardour/main_clock.cc index 43a5728c56..3439d115ed 100644 --- a/gtk2_ardour/main_clock.cc +++ b/gtk2_ardour/main_clock.cc @@ -94,7 +94,7 @@ MainClock::build_ops_menu () ops_items.push_back (MenuElem (_("Insert Meter Change"), sigc::mem_fun(*this, &MainClock::insert_new_meter))); } -samplepos_t +timepos_t MainClock::absolute_time () const { if (get_is_duration ()) { @@ -119,15 +119,15 @@ MainClock::set (timepos_t const & when, bool force, timecnt_t const & /*offset*/ switch (mode) { case NoDelta: - AudioClock::set (when, force, 0); + AudioClock::set (when, force); break; case DeltaEditPoint: - AudioClock::set (when, force, PublicEditor::instance().get_preferred_edit_position (Editing::EDIT_IGNORE_PHEAD)); + AudioClock::set (when, force, timecnt_t (PublicEditor::instance().get_preferred_edit_position (Editing::EDIT_IGNORE_PHEAD))); break; case DeltaOriginMarker: { Location* loc = PublicEditor::instance().session()->locations()->clock_origin_location (); - AudioClock::set (when, force, loc ? loc->start() : 0); + AudioClock::set (when, force, loc ? timecnt_t (loc->start()) : timecnt_t()); } break; } @@ -150,16 +150,18 @@ void MainClock::edit_current_tempo () { if (!PublicEditor::instance().session()) return; - ARDOUR::TempoSection* ts = const_cast(&PublicEditor::instance().session()->tempo_map().tempo_section_at_sample (absolute_time())); - PublicEditor::instance().edit_tempo_section (ts); +#warning NUTEMPO needs new map API + //ARDOUR::TempoSection* ts = const_cast(&PublicEditor::instance().session()->tempo_map().tempo_section_at_sample (absolute_time())); + //PublicEditor::instance().edit_tempo_section (ts); } void MainClock::edit_current_meter () { if (!PublicEditor::instance().session()) return; - ARDOUR::MeterSection* ms = const_cast(&PublicEditor::instance().session()->tempo_map().meter_section_at_sample (absolute_time())); - PublicEditor::instance().edit_meter_section (ms); +#warning NUTEMPO needs new map API + //ARDOUR::MeterSection* ms = const_cast(&PublicEditor::instance().session()->tempo_map().meter_section_at_sample (absolute_time())); + //PublicEditor::instance().edit_meter_section (ms); } void diff --git a/gtk2_ardour/main_clock.h b/gtk2_ardour/main_clock.h index 56ca23bc00..c8e89fd549 100644 --- a/gtk2_ardour/main_clock.h +++ b/gtk2_ardour/main_clock.h @@ -29,7 +29,7 @@ class MainClock : public AudioClock { public: MainClock (const std::string& clock_name, const std::string& widget_name, bool primary); - samplepos_t absolute_time () const; + Temporal::timepos_t absolute_time () const; void set_session (ARDOUR::Session *s); void set (Temporal::timepos_t const &, bool force = false, Temporal::timecnt_t const & offset = Temporal::timecnt_t ()); diff --git a/gtk2_ardour/midi_automation_line.cc b/gtk2_ardour/midi_automation_line.cc index 73620abf2a..f466aa2bf2 100644 --- a/gtk2_ardour/midi_automation_line.cc +++ b/gtk2_ardour/midi_automation_line.cc @@ -37,9 +37,8 @@ MidiAutomationLine::MidiAutomationLine ( ArdourCanvas::Item& parent, boost::shared_ptr list, boost::shared_ptr region, - Evoral::Parameter parameter, - Evoral::TimeConverter* converter) - : AutomationLine (name, tav, parent, list, parameter, converter) + Evoral::Parameter parameter) + : AutomationLine (name, tav, parent, list, parameter, Temporal::DistanceMeasure (Temporal::timepos_t())) , _region (region) , _parameter (parameter) { diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index 865e1cfe54..cde5731303 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -2520,13 +2520,13 @@ MidiRegionView::move_selection(timecnt_t const & dx_qn, double dy, double cumula double dx = 0.0; if (midi_view()->note_mode() == Sustained) { - dx = editor->time_to_pixel_unrounded ((note_time_qn + dx_qn)) + dx = editor->time_to_pixel_unrounded (timepos_t (note_time_qn + dx_qn.beats())) - n->item()->item_to_canvas (ArdourCanvas::Duple (n->x0(), 0)).x; } else { /* Hit::x0() is offset by _position.x, unlike Note::x0() */ Hit* hit = dynamic_cast(n); if (hit) { - dx = editor->time_to_pixel_unrounded ((note_time_qn + dx_qn)) + dx = editor->time_to_pixel_unrounded (timepos_t (note_time_qn + dx_qn.beats())) - n->item()->item_to_canvas (ArdourCanvas::Duple (((hit->x0() + hit->x1()) / 2.0) - hit->position().x, 0)).x; } } @@ -2536,7 +2536,7 @@ MidiRegionView::move_selection(timecnt_t const & dx_qn, double dy, double cumula /* update length */ if (midi_view()->note_mode() == Sustained) { Note* sus = dynamic_cast (*i); - double const len_dx = editor->time_to_pixel_unrounded ((note_time_qn + dx_qn + n->note()->length())); + double const len_dx = editor->time_to_pixel_unrounded (timepos_t (note_time_qn) + dx_qn + n->note()->length()); sus->set_x1 (n->item()->canvas_to_item (ArdourCanvas::Duple (len_dx, 0)).x); } @@ -2604,7 +2604,6 @@ MidiRegionView::move_copies (timecnt_t const & dx_qn, double dy, double cumulati { typedef vector > PossibleChord; Editor* editor = dynamic_cast (&trackview.editor()); - TempoMap& tmap (editor->session()->tempo_map()); PossibleChord to_play; Temporal::Beats earliest = earliest_in_selection(); @@ -2614,16 +2613,16 @@ MidiRegionView::move_copies (timecnt_t const & dx_qn, double dy, double cumulati to_play.push_back (n->note()); } - timepos_t const note_time_qn = _region->source_beats_to_absolute_beats (n->note()->time()); - timecnt_t dx (dx_qn.time_domain()); + timepos_t const note_time_qn = _region->source_beats_to_absolute_time (n->note()->time()); + double_t dx = 0; if (midi_view()->note_mode() == Sustained) { - dx = editor->sample_to_pixel_unrounded (tmap.sample_at_quarter_note (note_time_qn + dx_qn)) + dx = editor->time_to_pixel_unrounded (timepos_t (note_time_qn) + dx_qn) - n->item()->item_to_canvas (ArdourCanvas::Duple (n->x0(), 0)).x; } else { Hit* hit = dynamic_cast(n); if (hit) { - dx = editor->sample_to_pixel_unrounded (tmap.sample_at_quarter_note (note_time_qn + dx_qn)) + dx = editor->time_to_pixel_unrounded (timepos_t (note_time_qn) + dx_qn) - n->item()->item_to_canvas (ArdourCanvas::Duple (((hit->x0() + hit->x1()) / 2.0) - hit->position().x, 0)).x; } } @@ -2632,7 +2631,7 @@ MidiRegionView::move_copies (timecnt_t const & dx_qn, double dy, double cumulati 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())); + double const len_dx = editor->time_to_pixel_unrounded (timepos_t (note_time_qn) + dx_qn + n->note()->length()); sus->set_x1 (n->item()->canvas_to_item (ArdourCanvas::Duple (len_dx, 0)).x); } @@ -2696,7 +2695,7 @@ MidiRegionView::note_dropped(NoteBase *, timecnt_t const & d_qn, int8_t dnote, b for (Selection::iterator i = _selection.begin(); i != _selection.end() ; ++i) { - Temporal::Beats new_time = Temporal::Beats ((*i)->note()->time() + d_qn); + Temporal::Beats new_time = (*i)->note()->time() + d_qn.beats (); if (new_time < Temporal::Beats()) { continue; @@ -2735,7 +2734,7 @@ MidiRegionView::note_dropped(NoteBase *, timecnt_t const & d_qn, int8_t dnote, b for (CopyDragEvents::iterator i = _copy_drag_events.begin(); i != _copy_drag_events.end() ; ++i) { /* update time */ - Temporal::Beats new_time = (*i)->note()->time() + d_qn; + Temporal::Beats new_time = (*i)->note()->time() + d_qn.beats(); if (new_time < Temporal::Beats()) { continue; @@ -2959,7 +2958,7 @@ MidiRegionView::update_resizing (NoteBase* primary, bool at_front, double delta_ cursor_set = true; - trackview.editor().set_snapped_cursor_position ((snapped_x + midi_region()->nt_position()).samples()); + trackview.editor().set_snapped_cursor_position (snapped_x + midi_region()->nt_position()); } } @@ -2973,7 +2972,6 @@ void MidiRegionView::commit_resizing (NoteBase* primary, bool at_front, double delta_x, bool relative, double snap_delta, bool with_snap) { _note_diff_command = _model->new_note_diff_command (_("resize notes")); - TempoMap& tmap (trackview.session()->tempo_map()); /* XX why doesn't snap_pixel_to_sample() handle this properly? */ bool const ensure_snap = trackview.editor().snap_mode () != SnapMagnetic; diff --git a/gtk2_ardour/midi_streamview.cc b/gtk2_ardour/midi_streamview.cc index 0ac640c140..c7244b1732 100644 --- a/gtk2_ardour/midi_streamview.cc +++ b/gtk2_ardour/midi_streamview.cc @@ -507,7 +507,7 @@ MidiStreamView::setup_rec_box () */ region->set_start (timecnt_t (_trackview.track()->current_capture_start() - _trackview.track()->get_capture_start_sample (0))); - region->set_position (_trackview.track()->current_capture_start ().samples()); + region->set_position (_trackview.track()->current_capture_start ()); RegionView* rv = add_region_view_internal (region, false, true); MidiRegionView* mrv = dynamic_cast (rv); @@ -627,7 +627,7 @@ MidiStreamView::update_rec_box () /* Update the region being recorded to reflect where we currently are */ boost::shared_ptr region = rec_regions.back().first; - region->set_length (_trackview.track()->current_capture_end () - _trackview.track()->current_capture_start(), 0); + region->set_length (timecnt_t (_trackview.track()->current_capture_end () - _trackview.track()->current_capture_start())); MidiRegionView* mrv = dynamic_cast (rec_regions.back().second); mrv->extend_active_notes (); @@ -679,7 +679,7 @@ struct RegionPositionSorter { }; bool -MidiStreamView::paste (timepos_t const & pos, const Selection& selection, PasteContext& ctx, const int32_t sub_num) +MidiStreamView::paste (timepos_t const & pos, const Selection& selection, PasteContext& ctx) { /* Paste into the first region which starts on or before pos. Only called when using an internal editing tool. */ @@ -702,12 +702,12 @@ MidiStreamView::paste (timepos_t const & pos, const Selection& selection, PasteC boost::shared_ptr r = (*prev)->region (); /* If *prev doesn't cover pos, it's no good */ - if (r->position() > pos || ((r->position() + r->length()) < pos)) { + if (r->nt_position() > pos || ((r->nt_position() + r->nt_length()) < pos)) { return false; } MidiRegionView* mrv = dynamic_cast (*prev); - return mrv ? mrv->paste(pos, selection, ctx, sub_num) : false; + return mrv ? mrv->paste(pos, selection, ctx) : false; } void diff --git a/gtk2_ardour/midi_streamview.h b/gtk2_ardour/midi_streamview.h index b333ff33e8..ed741fdd99 100644 --- a/gtk2_ardour/midi_streamview.h +++ b/gtk2_ardour/midi_streamview.h @@ -107,7 +107,7 @@ public: RegionView* create_region_view (boost::shared_ptr, bool, bool); - bool paste (ARDOUR::samplepos_t pos, const Selection& selection, PasteContext& ctx, const int32_t sub_num); + bool paste (Temporal::timepos_t const & pos, const Selection& selection, PasteContext& ctx); void apply_note_range(uint8_t lowest, uint8_t highest, bool to_region_views); diff --git a/gtk2_ardour/midi_time_axis.cc b/gtk2_ardour/midi_time_axis.cc index 4823eac1b2..dbeb5ec005 100644 --- a/gtk2_ardour/midi_time_axis.cc +++ b/gtk2_ardour/midi_time_axis.cc @@ -1640,17 +1640,17 @@ MidiTimeAxisView::automation_child_menu_item (Evoral::Parameter param) } boost::shared_ptr -MidiTimeAxisView::add_region (samplepos_t f, samplecnt_t length, bool commit) +MidiTimeAxisView::add_region (timepos_t const & f, timecnt_t const & length, bool commit) { Editor* real_editor = dynamic_cast (&_editor); - MusicSample pos (f, 0); + timepos_t pos (f); if (commit) { real_editor->begin_reversible_command (Operations::create_region); } playlist()->clear_changes (); - real_editor->snap_to (pos, RoundNearest); + real_editor->snap_to (pos, Temporal::RoundNearest); boost::shared_ptr src = _session->create_midi_source_by_stealing_name (view()->trackview().track()); PropertyList plist; @@ -1660,9 +1660,8 @@ MidiTimeAxisView::add_region (samplepos_t f, samplecnt_t length, bool commit) plist.add (ARDOUR::Properties::name, PBD::basename_nosuffix(src->name())); boost::shared_ptr region = (RegionFactory::create (src, plist)); - /* sets beat position */ - region->set_position (pos.sample, pos.division); - playlist()->add_region (region, pos.sample, 1.0, false, pos.division); + region->set_position (pos); + playlist()->add_region (region, pos, 1.0, false); _session->add_command (new StatefulDiffCommand (playlist())); if (commit) { @@ -1737,14 +1736,14 @@ MidiTimeAxisView::contents_height_changed () } bool -MidiTimeAxisView::paste (samplepos_t pos, const Selection& selection, PasteContext& ctx, const int32_t sub_num) +MidiTimeAxisView::paste (timepos_t const & pos, const Selection& selection, PasteContext& ctx) { if (!_editor.internal_editing()) { // Non-internal paste, paste regions like any other route - return RouteTimeAxisView::paste(pos, selection, ctx, sub_num); + return RouteTimeAxisView::paste (pos, selection, ctx); } - return midi_view()->paste(pos, selection, ctx, sub_num); + return midi_view()->paste (pos, selection, ctx); } void diff --git a/gtk2_ardour/region_selection.cc b/gtk2_ardour/region_selection.cc index 4aec825ecf..96e9847e30 100644 --- a/gtk2_ardour/region_selection.cc +++ b/gtk2_ardour/region_selection.cc @@ -299,7 +299,7 @@ RegionSelection::start_time () const s = min (s, (*i)->region()->nt_position ()); } - if (s == timepos_t::max (front()->nt_position().time_domain())) { + if (s == timepos_t::max (front()->region()->nt_position().time_domain())) { return timepos_t (); } @@ -313,7 +313,7 @@ RegionSelection::end_time () const return timepos_t (); } - timepos_t e (timepos_t::zero (front()->nt_position().time_domain())); + timepos_t e (timepos_t::zero (front()->region()->nt_position().time_domain())); for (RegionSelection::const_iterator i = begin(); i != end(); ++i) { e = max (e, (*i)->region()->nt_end ()); diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc index 37fb0385d3..1b107056e8 100644 --- a/gtk2_ardour/route_time_axis.cc +++ b/gtk2_ardour/route_time_axis.cc @@ -1149,7 +1149,7 @@ RouteTimeAxisView::set_selected_regionviews (RegionSelection& regions) * @param results List to add things to. */ void -RouteTimeAxisView::get_selectables (samplepos_t start, samplepos_t end, double top, double bot, list& results, bool within) +RouteTimeAxisView::get_selectables (timepos_t const & start, timepos_t const & end, double top, double bot, list& results, bool within) { if ((_view && ((top < 0.0 && bot < 0.0))) || touched (top, bot)) { _view->get_selectables (start, end, top, bot, results, within); diff --git a/gtk2_ardour/selection.cc b/gtk2_ardour/selection.cc index 2725be44b7..2683bfc5ca 100644 --- a/gtk2_ardour/selection.cc +++ b/gtk2_ardour/selection.cc @@ -58,7 +58,7 @@ using namespace PBD; struct TimelineRangeComparator { bool operator()(TimelineRange a, TimelineRange b) { - return a.start < b.start; + return a.start() < b.start(); } }; @@ -302,7 +302,7 @@ Selection::toggle (vector& r) } long -Selection::toggle (samplepos_t start, samplepos_t end) +Selection::toggle (timepos_t const & start, timepos_t const & end) { clear_objects(); // enforce object/range exclusivity @@ -453,13 +453,13 @@ Selection::add (timepos_t const & start, timepos_t const & end) void Selection::move_time (timecnt_t const & distance) { - if (distance == 0) { + if (distance.zero()) { return; } for (list::iterator i = time.begin(); i != time.end(); ++i) { - (*i).start += distance; - (*i).end += distance; + (*i).start() += distance; + (*i).end() += distance; } TimeChanged (); @@ -720,8 +720,8 @@ Selection::set (timepos_t const & start, timepos_t const & end) while (time.size() > 1) { time.pop_front(); } - time.front().start = start; - time.front().end = end; + time.front().start() = start; + time.front().end() = end; } time.consolidate (); @@ -740,11 +740,11 @@ Selection::set (timepos_t const & start, timepos_t const & end) * @param end New end time. */ void -Selection::set_preserving_all_ranges (samplepos_t start, samplepos_t end) +Selection::set_preserving_all_ranges (timepos_t const & start, timepos_t const & end) { clear_objects(); // enforce region/object exclusivity - if ((start == 0 && end == 0) || (end < start)) { + if ((start.zero() && end.zero()) || (end < start)) { return; } @@ -752,8 +752,8 @@ Selection::set_preserving_all_ranges (samplepos_t start, samplepos_t end) time.push_back (TimelineRange (start, end, ++next_time_id)); } else { time.sort (TimelineRangeComparator ()); - time.front().start = start; - time.back().end = end; + time.front().set_start (start); + time.back().set_end (end); } time.consolidate (); @@ -1137,8 +1137,8 @@ Selection::get_state () const for (TimeSelection::const_iterator i = time.begin(); i != time.end(); ++i) { XMLNode* t = node->add_child (X_("TimelineRange")); - t->set_property (X_("start"), (*i).start); - t->set_property (X_("end"), (*i).end); + t->set_property (X_("start"), (*i).start()); + t->set_property (X_("end"), (*i).end()); } for (MarkerSelection::const_iterator i = markers.begin(); i != markers.end(); ++i) { @@ -1304,8 +1304,8 @@ Selection::set_state (XMLNode const & node, int) } } else if ((*i)->name() == X_("TimelineRange")) { - samplepos_t start; - samplepos_t end; + timepos_t start; + timepos_t end; if (!(*i)->get_property (X_("start"), start) || !(*i)->get_property (X_("end"), end)) { assert(false); diff --git a/gtk2_ardour/selection.h b/gtk2_ardour/selection.h index b14ad79664..4f5c9e645d 100644 --- a/gtk2_ardour/selection.h +++ b/gtk2_ardour/selection.h @@ -137,7 +137,7 @@ public: void set (RegionView*, bool also_clear_tracks = true); void set (std::vector&); long set (Temporal::timepos_t const &, Temporal::timepos_t const &); - void set_preserving_all_ranges (samplepos_t, samplepos_t); + void set_preserving_all_ranges (Temporal::timepos_t const &, Temporal::timepos_t const &); void set (boost::shared_ptr); void set (boost::shared_ptr); void set (const std::list >&); @@ -151,7 +151,7 @@ public: void toggle (RegionView*); void toggle (MidiCutBuffer*); void toggle (std::vector&); - long toggle (samplepos_t, samplepos_t); + long toggle (Temporal::timepos_t const &, Temporal::timepos_t const &); void toggle (ARDOUR::AutomationList*); void toggle (boost::shared_ptr); void toggle (const std::list >&); diff --git a/gtk2_ardour/tempo_dialog.cc b/gtk2_ardour/tempo_dialog.cc index 5d64ddbeb5..2370709c6d 100644 --- a/gtk2_ardour/tempo_dialog.cc +++ b/gtk2_ardour/tempo_dialog.cc @@ -490,19 +490,25 @@ TempoDialog::tap_tempo_focus_out (GdkEventFocus* ) MeterDialog::MeterDialog (TempoMap& map, samplepos_t sample, const string&) : ArdourDialog (_("New Meter")) { +#warning NUTEMPO needs new map API +#if 0 sample = map.round_to_bar(sample, RoundNearest).sample; Temporal::BBT_Time when (map.bbt_at_sample (sample)); Meter meter (map.meter_at_sample (sample)); init (when, meter.divisions_per_bar(), meter.note_divisor(), false, MusicTime); +#endif } MeterDialog::MeterDialog (TempoMap& map, MeterSection& section, const string&) : ArdourDialog (_("Edit Meter")) { +#warning NUTEMPO needs new map API +#if 0 Temporal::BBT_Time when (map.bbt_at_sample (section.sample())); init (when, section.divisions_per_bar(), section.note_divisor(), section.initial(), section.position_lock_style()); +#endif } void diff --git a/gtk2_ardour/time_axis_view_item.cc b/gtk2_ardour/time_axis_view_item.cc index ab9d40de7d..978a276b05 100644 --- a/gtk2_ardour/time_axis_view_item.cc +++ b/gtk2_ardour/time_axis_view_item.cc @@ -182,14 +182,14 @@ TimeAxisViewItem::init (ArdourCanvas::Item* parent, double fpp, uint32_t base_co wide_enough_for_name = wide; high_enough_for_name = high; - if (duration == 0) { + if (duration.zero ()) { warning << "Time Axis Item Duration == 0" << endl; } if (visibility & ShowFrame) { frame = new ArdourCanvas::Rectangle (group, ArdourCanvas::Rect (0.0, 0.0, - trackview.editor().sample_to_pixel(duration), + trackview.editor().duration_to_pixels (duration), trackview.current_height())); frame->set_outline_what (ArdourCanvas::Rectangle::What (ArdourCanvas::Rectangle::LEFT|ArdourCanvas::Rectangle::RIGHT)); @@ -287,7 +287,7 @@ TimeAxisViewItem::set_position(timepos_t const & pos, void* src, double* delta) return false; } - position = pos; + time_position = pos; double new_unit_pos = trackview.editor().time_to_pixel (time_position); @@ -327,14 +327,16 @@ bool TimeAxisViewItem::set_duration (timecnt_t const & dur, void* src) { if ((dur > max_item_duration) || (dur < min_item_duration)) { - warning << string_compose ( - P_("new duration %1 frame is out of bounds for %2", "new duration of %1 samples is out of bounds for %2", dur), - get_item_name(), dur) - << endmsg; + // XXX NUTEMPO we do not have a plural i18n form that is type-safe (P_() requires integers) + // + //warning << string_compose ( + //P_("new duration %1 is out of bounds for %2", "new duration of %1 samples is out of bounds for %2", dur), + // get_item_name(), dur) + //<< endmsg; return false; } - if (dur == 0) { + if (dur.zero()) { group->hide(); } @@ -363,7 +365,7 @@ TimeAxisViewItem::get_duration() const * @param src the identity of the object that initiated the change */ void -TimeAxisViewItem::set_max_duration(samplecnt_t dur, void* src) +TimeAxisViewItem::set_max_duration(timecnt_t const & dur, void* src) { max_item_duration = dur; MaxDurationChanged(max_item_duration, src); /* EMIT_SIGNAL */ @@ -383,7 +385,7 @@ TimeAxisViewItem::get_max_duration() const * @param src the identity of the object that initiated the change */ void -TimeAxisViewItem::set_min_duration(samplecnt_t dur, void* src) +TimeAxisViewItem::set_min_duration(timecnt_t const & dur, void* src) { min_item_duration = dur; MinDurationChanged(max_item_duration, src); /* EMIT_SIGNAL */ @@ -804,7 +806,7 @@ TimeAxisViewItem::set_samples_per_pixel (double fpp) samples_per_pixel = fpp; set_position (this->get_position(), this); - double end_pixel = trackview.editor().time_to_pixel (timeposition + get_duration()); + double end_pixel = trackview.editor().time_to_pixel (time_position + get_duration()); double first_pixel = trackview.editor().time_to_pixel (time_position); reset_width_dependent_items (end_pixel - first_pixel); diff --git a/gtk2_ardour/time_selection.cc b/gtk2_ardour/time_selection.cc index 3b1b74b7b7..4fff952356 100644 --- a/gtk2_ardour/time_selection.cc +++ b/gtk2_ardour/time_selection.cc @@ -39,7 +39,7 @@ TimeSelection::operator[] (uint32_t which) } fatal << string_compose (_("programming error: request for non-existent audio range (%1)!"), which) << endmsg; abort(); /*NOTREACHED*/ - return *(new ARDOUR::TimelineRange(0,0,0)); /* keep the compiler happy; never called */ + return *(new ARDOUR::TimelineRange(timepos_t(),timepos_t(), 0)); /* keep the compiler happy; never called */ } bool @@ -71,13 +71,13 @@ TimeSelection::consolidate () samplepos_t TimeSelection::start_sample () const { - return start_time().sample (); + return start_time().samples (); } samplepos_t TimeSelection::end_sample () const { - return end_time().sample (); + return end_time().samples (); } samplecnt_t @@ -90,7 +90,7 @@ timepos_t TimeSelection::start_time () const { if (empty()) { - return 0; + return timepos_t(); } timepos_t first = std::numeric_limits::max(); @@ -106,7 +106,7 @@ TimeSelection::start_time () const timepos_t TimeSelection::end_time() const { - timepos_t last = std::numeric_limits::min(); + timepos_t last; for (std::list::const_iterator i = begin(); i != end(); ++i) { if ((*i).end() > last) { diff --git a/gtk2_ardour/time_selection.h b/gtk2_ardour/time_selection.h index eb6ef1ca4a..154b2dfd13 100644 --- a/gtk2_ardour/time_selection.h +++ b/gtk2_ardour/time_selection.h @@ -40,6 +40,8 @@ public: Temporal::timepos_t end_time() const; Temporal::timecnt_t length() const; + void set (Temporal::timepos_t const &, Temporal::timepos_t const &); + bool consolidate (); }; diff --git a/gtk2_ardour/transport_masters_dialog.cc b/gtk2_ardour/transport_masters_dialog.cc index 7e71d05b3f..b1c16f7ab4 100644 --- a/gtk2_ardour/transport_masters_dialog.cc +++ b/gtk2_ardour/transport_masters_dialog.cc @@ -668,7 +668,7 @@ TransportMastersWidget::Row::update (Session* s, samplepos_t now) } void -TransportMastersWidget::update (samplepos_t /* audible */) +TransportMastersWidget::update (timepos_t /* audible */) { samplepos_t now = AudioEngine::instance()->sample_time (); diff --git a/gtk2_ardour/transport_masters_dialog.h b/gtk2_ardour/transport_masters_dialog.h index d5704a8837..7b453c7076 100644 --- a/gtk2_ardour/transport_masters_dialog.h +++ b/gtk2_ardour/transport_masters_dialog.h @@ -50,7 +50,7 @@ class TransportMastersWidget : public Gtk::VBox, public ARDOUR::SessionHandlePtr TransportMastersWidget (); ~TransportMastersWidget (); - void update (ARDOUR::samplepos_t); + void update (Temporal::timepos_t); void set_transport_master (boost::shared_ptr); void set_session (ARDOUR::Session*); diff --git a/gtk2_ardour/wscript b/gtk2_ardour/wscript index fd2a3e619f..ea7737b50a 100644 --- a/gtk2_ardour/wscript +++ b/gtk2_ardour/wscript @@ -100,7 +100,7 @@ gtk2_ardour_sources = [ 'editor_regions.cc', 'editor_routes.cc', 'editor_rulers.cc', - # 'editor_selection.cc', + 'editor_selection.cc', 'editor_snapshots.cc', 'editor_sources.cc', 'editor_summary.cc',