new style for Gtk::Entry widgets
[ardour.git] / gtk2_ardour / editor_rulers.cc
index bda3f25b3ddb5b523d60bfc4ee0a1befdbb5611b..596f4f26b9bcd2bb499c47a4cf8aedfeac5576d6 100644 (file)
@@ -1017,8 +1017,14 @@ Editor::compute_bbt_ruler_scale (std::vector<ARDOUR::TempoMap::BBTPoint>& grid,
 
        std::vector<TempoMap::BBTPoint>::const_iterator i;
        Timecode::BBT_Time lower_beat, upper_beat; // the beats at each end of the ruler
-       framecnt_t beat_before_lower_pos = _session->tempo_map().frame_at_beat (floor(_session->tempo_map().beat_at_frame (lower)));
-       framecnt_t beat_after_upper_pos = _session->tempo_map().frame_at_beat (floor (_session->tempo_map().beat_at_frame (upper)) + 1.0);
+       double floor_lower_beat = floor(_session->tempo_map().beat_at_frame (lower));
+
+       if (floor_lower_beat < 0.0) {
+               floor_lower_beat = 0.0;
+       }
+
+       const framecnt_t beat_before_lower_pos = _session->tempo_map().frame_at_beat (floor_lower_beat);
+       const framecnt_t beat_after_upper_pos = _session->tempo_map().frame_at_beat (floor (_session->tempo_map().beat_at_frame (upper)) + 1.0);
 
        _session->bbt_time (beat_before_lower_pos, lower_beat);
        _session->bbt_time (beat_after_upper_pos, upper_beat);
@@ -1126,11 +1132,11 @@ Editor::compute_bbt_ruler_scale (std::vector<ARDOUR::TempoMap::BBTPoint>& grid,
                bbt_ruler_scale = bbt_show_many;
        } else if (beat_density > 1024) {
                bbt_ruler_scale = bbt_show_64;
-       } else if (beat_density > 500) {
+       } else if (beat_density > 512) {
                bbt_ruler_scale = bbt_show_16;
-       } else if (beat_density > 100) {
+       } else if (beat_density > 128) {
                bbt_ruler_scale = bbt_show_4;
-       } else if (beat_density > 10) {
+       } else if (beat_density > 16) {
                bbt_ruler_scale =  bbt_show_1;
        } else if (beat_density > 2) {
                bbt_ruler_scale =  bbt_show_beats;
@@ -1269,7 +1275,7 @@ Editor::metric_get_bbt (std::vector<ArdourCanvas::Ruler::Mark>& marks, gdouble l
                                next_beat.beats = (*i).beat;
                                next_beat.bars = (*i).bar;
                                next_beat.ticks = tick;
-                               pos = _session->tempo_map().frame_time (next_beat);
+                               pos = _session->tempo_map().frame_at_bbt (next_beat);
 
                                if (t % bbt_accent_modulo == (bbt_accent_modulo - 1)) {
                                        i_am_accented = true;
@@ -1339,7 +1345,7 @@ Editor::metric_get_bbt (std::vector<ArdourCanvas::Ruler::Mark>& marks, gdouble l
                                next_beat.beats = (*i).beat;
                                next_beat.bars = (*i).bar;
                                next_beat.ticks = tick;
-                               pos = _session->tempo_map().frame_time (next_beat);
+                               pos = _session->tempo_map().frame_at_bbt (next_beat);
 
                                if (t % bbt_accent_modulo == (bbt_accent_modulo - 1)) {
                                        i_am_accented = true;
@@ -1415,7 +1421,7 @@ Editor::metric_get_bbt (std::vector<ArdourCanvas::Ruler::Mark>& marks, gdouble l
                        while (tick < Timecode::BBT_Time::ticks_per_beat && (n < bbt_nmarks)) {
 
                                next_beat.ticks = tick;
-                               pos = _session->tempo_map().frame_time (next_beat);
+                               pos = _session->tempo_map().frame_at_bbt (next_beat);
                                if (t % bbt_accent_modulo == (bbt_accent_modulo - 1)) {
                                        i_am_accented = true;
                                }