allow sending OSC from inline display UIs
[ardour.git] / gtk2_ardour / editor_rulers.cc
index ae38a02aba75a8757a3034d1a8f5aab5c633a4f7..6c9e45abc88da108c021b4b800bf0f120226e770 100644 (file)
@@ -53,7 +53,7 @@
 #include "editor_cursors.h"
 #include "ui_config.h"
 
-#include "i18n.h"
+#include "pbd/i18n.h"
 
 using namespace ARDOUR;
 using namespace PBD;
@@ -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(max (0.0, _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 (max (0.0, _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);
@@ -1116,7 +1122,7 @@ Editor::compute_bbt_ruler_scale (std::vector<ARDOUR::TempoMap::BBTPoint>& grid,
        }
 
        beats = distance (grid.begin(), grid.end()) - bbt_bars;
-       double beat_density = ((distance (grid.begin(), grid.end()) + 1) * ((double) (upper - lower) / (double) (1 + grid.back().frame - grid.front().frame))) / 4.0;
+       double beat_density = ((distance (grid.begin(), grid.end()) + 1) * ((double) (upper - lower) / (double) (1 + grid.back().frame - grid.front().frame))) / 5.0;
        /* Only show the bar helper if there aren't many bars on the screen */
        if ((bbt_bars < 2) || (beats < 5)) {
                bbt_bar_helper_on = true;
@@ -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 > 256) {
+       } else if (beat_density > 512) {
                bbt_ruler_scale = bbt_show_16;
-       } else if (beat_density > 64) {
+       } 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;
                                }