X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_tempodisplay.cc;h=b863cb99011d5377af837a5d008e522c44f35b3f;hb=71003b02353ea090902bdd5623d42da141fa25ad;hp=fa1ea786be59d31df338a34ce5360435bb712fa8;hpb=dbbe65777f17c2dc9b19c351be3db8cd907dcae7;p=ardour.git diff --git a/gtk2_ardour/editor_tempodisplay.cc b/gtk2_ardour/editor_tempodisplay.cc index fa1ea786be..b863cb9901 100644 --- a/gtk2_ardour/editor_tempodisplay.cc +++ b/gtk2_ardour/editor_tempodisplay.cc @@ -75,7 +75,11 @@ Editor::remove_metric_marks () } tempo_curves.clear (); } - +struct CurveComparator { + bool operator() (TempoCurve const * a, TempoCurve const * b) { + return a->tempo().frame() < b->tempo().frame(); + } +}; void Editor::draw_metric_marks (const Metrics& metrics) { @@ -121,6 +125,7 @@ Editor::draw_metric_marks (const Metrics& metrics) } } + tempo_curves.sort (CurveComparator()); const double min_tempo_range = 5.0; const double tempo_delta = fabs (max_tempo - min_tempo); @@ -140,6 +145,13 @@ Editor::draw_metric_marks (const Metrics& metrics) } else { (*x)->set_position ((*x)->tempo().frame(), UINT32_MAX); } + + if (!(*x)->tempo().active()) { + (*x)->hide(); + } else { + (*x)->show(); + } + ++x; } @@ -176,14 +188,8 @@ Editor::tempo_map_changed (const PropertyChange& /*ignored*/) update_tempo_based_rulers (); } -struct CurveComparator { - bool operator() (TempoCurve const * a, TempoCurve const * b) { - return a->tempo().frame() < b->tempo().frame(); - } -}; - void -Editor::marker_position_changed () +Editor::tempometric_position_changed (const PropertyChange& /*ignored*/) { if (!_session) { return; @@ -248,6 +254,13 @@ Editor::marker_position_changed () } else { (*x)->set_position ((*x)->tempo().frame(), UINT32_MAX); } + + if (!(*x)->tempo().active()) { + (*x)->hide(); + } else { + (*x)->show(); + } + ++x; } @@ -410,14 +423,14 @@ Editor::mouse_add_new_meter_event (framepos_t frame) meter_dialog.get_bbt_time (requested); const double beat = map.beat_at_bbt (requested); - + const double al_frame = map.frame_at_beat (beat); begin_reversible_command (_("add meter mark")); XMLNode &before = map.get_state(); if (meter_dialog.get_lock_style() == MusicTime) { - map.add_meter (Meter (bpb, note_type), beat, requested, MusicTime); + map.add_meter (Meter (bpb, note_type), beat, requested, 0, MusicTime); } else { - map.add_meter (Meter (bpb, note_type), beat, requested, AudioTime); + map.add_meter (Meter (bpb, note_type), beat, requested, al_frame, AudioTime); } _session->add_command(new MementoCommand(map, &before, &map.get_state())); @@ -442,7 +455,7 @@ Editor::remove_tempo_marker (ArdourCanvas::Item* item) abort(); /*NOTREACHED*/ } - if (tempo_marker->tempo().movable()) { + if (!tempo_marker->tempo().locked_to_meter() && tempo_marker->tempo().active()) { Glib::signal_idle().connect (sigc::bind (sigc::mem_fun(*this, &Editor::real_remove_tempo_marker), &tempo_marker->tempo())); } } @@ -467,13 +480,13 @@ Editor::edit_meter_section (MeterSection* section) Timecode::BBT_Time when; meter_dialog.get_bbt_time (when); - + const framepos_t frame = _session->tempo_map().frame_at_bbt (when); const PositionLockStyle pls = (meter_dialog.get_lock_style() == AudioTime) ? AudioTime : MusicTime; begin_reversible_command (_("replace meter mark")); XMLNode &before = _session->tempo_map().get_state(); - _session->tempo_map().replace_meter (*section, meter, when, pls); + _session->tempo_map().replace_meter (*section, meter, when, frame, pls); XMLNode &after = _session->tempo_map().get_state(); _session->add_command(new MementoCommand(_session->tempo_map(), &before, &after)); @@ -559,7 +572,7 @@ Editor::remove_meter_marker (ArdourCanvas::Item* item) abort(); /*NOTREACHED*/ } - if (meter_marker->meter().movable()) { + if (!meter_marker->meter().initial()) { Glib::signal_idle().connect (sigc::bind (sigc::mem_fun(*this, &Editor::real_remove_meter_marker), &meter_marker->meter())); } }