a-fluidsynth: implement LV2_BANKPATCH__notify
[ardour.git] / gtk2_ardour / editor_tempodisplay.cc
index 611feb2af8de6f7e34968484e53a4e72aead6b3c..b71ab32087ae52c959ba99d21c25c099c94d6de1 100644 (file)
@@ -105,19 +105,6 @@ Editor::draw_metric_marks (const Metrics& metrics)
                        }
                } else if ((ts = dynamic_cast<TempoSection*>(*i)) != 0) {
 
-                       if (ts->type() == TempoSection::Constant) {
-                               if (ts->note_type() != 4.0) {
-                                       snprintf (buf, sizeof (buf), "%.3f/%.0f", ts->note_types_per_minute(), ts->note_type());
-                               } else {
-                                       snprintf (buf, sizeof (buf), "%.3f", ts->note_types_per_minute());
-                               }
-                       } else {
-                               if (ts->note_type() != 4.0) {
-                                       snprintf (buf, sizeof (buf), "%.3f/%.0f>%.3f", ts->note_types_per_minute(), ts->note_type(), ts->end_note_types_per_minute());
-                               } else {
-                                       snprintf (buf, sizeof (buf), "%.3f>%.3f", ts->note_types_per_minute(), ts->end_note_types_per_minute());
-                               }
-                       }
                        max_tempo = max (max_tempo, ts->note_types_per_minute());
                        max_tempo = max (max_tempo, ts->end_note_types_per_minute());
                        min_tempo = min (min_tempo, ts->note_types_per_minute());
@@ -127,11 +114,12 @@ Editor::draw_metric_marks (const Metrics& metrics)
                        tempo_curves.push_back (new TempoCurve (*this, *tempo_group, tc_color,
                                                                *(const_cast<TempoSection*>(ts)), ts->frame(), false));
 
+                       const std::string tname (X_(""));
                        if (ts->position_lock_style() == MusicTime) {
-                               metric_marks.push_back (new TempoMarker (*this, *tempo_group, UIConfiguration::instance().color ("tempo marker music"), buf,
+                               metric_marks.push_back (new TempoMarker (*this, *tempo_group, UIConfiguration::instance().color ("tempo marker music"), tname,
                                                                 *(const_cast<TempoSection*>(ts))));
                        } else {
-                               metric_marks.push_back (new TempoMarker (*this, *tempo_group, UIConfiguration::instance().color ("tempo marker"), buf,
+                               metric_marks.push_back (new TempoMarker (*this, *tempo_group, UIConfiguration::instance().color ("tempo marker"), tname,
                                                                 *(const_cast<TempoSection*>(ts))));
                        }
                        if (prev_ts && abs (prev_ts->end_note_types_per_minute() - ts->note_types_per_minute()) < 1.0) {
@@ -193,7 +181,7 @@ Editor::tempo_map_changed (const PropertyChange& /*ignored*/)
        ENSURE_GUI_THREAD (*this, &Editor::tempo_map_changed, ignored);
 
        if (tempo_lines) {
-               tempo_lines->tempo_map_changed();
+               tempo_lines->tempo_map_changed(_session->tempo_map().music_origin());
        }
 
        compute_bbt_ruler_scale (leftmost_frame, leftmost_frame + current_page_samples());
@@ -216,7 +204,7 @@ Editor::tempometric_position_changed (const PropertyChange& /*ignored*/)
        ENSURE_GUI_THREAD (*this, &Editor::tempo_map_changed);
 
        if (tempo_lines) {
-               tempo_lines->tempo_map_changed();
+               tempo_lines->tempo_map_changed(_session->tempo_map().music_origin());
        }
 
        TempoSection* prev_ts = 0;
@@ -233,7 +221,6 @@ Editor::tempometric_position_changed (const PropertyChange& /*ignored*/)
                        if ((ts = &tempo_marker->tempo()) != 0) {
 
                                tempo_marker->set_position (ts->frame ());
-                               char buf[64];
 
                                if (prev_ts && abs (prev_ts->end_note_types_per_minute() - ts->note_types_per_minute()) < 1.0) {
                                        tempo_marker->set_points_color (UIConfiguration::instance().color ("tempo marker music"));
@@ -241,22 +228,6 @@ Editor::tempometric_position_changed (const PropertyChange& /*ignored*/)
                                        tempo_marker->set_points_color (UIConfiguration::instance().color ("tempo marker"));
                                }
 
-                               if (ts->type() == TempoSection::Constant) {
-                                       if (ts->note_type() != 4.0) {
-                                               snprintf (buf, sizeof (buf), "%.3f/%.0f", ts->note_types_per_minute(), ts->note_type());
-                                       } else {
-                                               snprintf (buf, sizeof (buf), "%.3f", ts->note_types_per_minute());
-                                       }
-                               } else {
-                                       if (ts->note_type() != 4.0) {
-                                               snprintf (buf, sizeof (buf), "%.3f/%.0f>%.3f", ts->note_types_per_minute(), ts->note_type(), ts->end_note_types_per_minute());
-                                       } else {
-                                               snprintf (buf, sizeof (buf), "%.3f>%.3f", ts->note_types_per_minute(), ts->end_note_types_per_minute());
-                                       }
-                               }
-
-                               tempo_marker->set_name (buf);
-
                                max_tempo = max (max_tempo, ts->note_types_per_minute());
                                max_tempo = max (max_tempo, ts->end_note_types_per_minute());
                                min_tempo = min (min_tempo, ts->note_types_per_minute());
@@ -328,7 +299,10 @@ Editor::redisplay_tempo (bool immediate_redraw)
        }
 
        if (immediate_redraw) {
-               compute_bbt_ruler_scale (leftmost_frame, leftmost_frame + current_page_samples());
+
+//only recalculate bbt_ruler_scale on a zoom or snap-change; not every redraw; if a case is found where this is necessary, uncomment this line.
+//             compute_bbt_ruler_scale (leftmost_frame, leftmost_frame + current_page_samples());
+
                std::vector<TempoMap::BBTPoint> grid;
 
                if (bbt_ruler_scale != bbt_show_many) {
@@ -345,9 +319,12 @@ Editor::redisplay_tempo (bool immediate_redraw)
 void
 Editor::tempo_curve_selected (TempoSection* ts, bool yn)
 {
+       if (ts == 0) {
+               return;
+       }
+
        for (Curves::iterator x = tempo_curves.begin(); x != tempo_curves.end(); ++x) {
                if (&(*x)->tempo() == ts) {
-                       (*x)->set_selected (yn);
                        if (yn) {
                                (*x)->set_color_rgba (UIConfiguration::instance().color ("location marker"));
                        } else {
@@ -417,7 +394,7 @@ Editor::draw_measures (std::vector<ARDOUR::TempoMap::BBTPoint>& grid)
        }
 
        if (tempo_lines == 0) {
-               tempo_lines = new TempoLines (time_line_group, ArdourCanvas::LineSet::Vertical);
+               tempo_lines = new TempoLines (time_line_group, ArdourCanvas::LineSet::Vertical, new BeatsFramesConverter (_session->tempo_map(), _session->tempo_map().music_origin()));
        }
 
        const unsigned divisions = get_grid_beat_divisions(leftmost_frame);
@@ -475,15 +452,14 @@ Editor::mouse_add_new_meter_event (framepos_t frame)
        Timecode::BBT_Time requested;
        meter_dialog.get_bbt_time (requested);
 
-       const double beat = map.beat_at_bbt (requested);
-       const double al_frame = map.frame_at_beat (beat);
+       const double al_frame = map.frame_at_bbt (requested);
        begin_reversible_command (_("add meter mark"));
-        XMLNode &before = map.get_state();
+       XMLNode &before = map.get_state();
 
        if (meter_dialog.get_lock_style() == MusicTime) {
-               map.add_meter (Meter (bpb, note_type), beat, requested, 0, MusicTime);
+               map.add_meter (Meter (bpb, note_type), requested, 0, MusicTime);
        } else {
-               map.add_meter (Meter (bpb, note_type), beat, requested, al_frame, AudioTime);
+               map.add_meter (Meter (bpb, note_type), requested, al_frame, AudioTime);
        }
 
        _session->add_command(new MementoCommand<TempoMap>(map, &before, &map.get_state()));
@@ -537,7 +513,7 @@ Editor::edit_meter_section (MeterSection* section)
        const PositionLockStyle pls = (meter_dialog.get_lock_style() == AudioTime) ? AudioTime : MusicTime;
 
        begin_reversible_command (_("replace meter mark"));
-        XMLNode &before = _session->tempo_map().get_state();
+       XMLNode &before = _session->tempo_map().get_state();
 
        _session->tempo_map().replace_meter (*section, meter, when, frame, pls);
 
@@ -559,9 +535,10 @@ Editor::edit_tempo_section (TempoSection* section)
        }
 
        double bpm = tempo_dialog.get_bpm ();
+       double end_bpm = tempo_dialog.get_end_bpm ();
        double nt = tempo_dialog.get_note_type ();
        bpm = max (0.01, bpm);
-       const Tempo tempo (bpm, nt);
+       const Tempo tempo (bpm, nt, end_bpm);
 
        Timecode::BBT_Time when;
        tempo_dialog.get_bbt_time (when);