From 01da28899248a46c0679da9cab33881d18b84acd Mon Sep 17 00:00:00 2001 From: Nick Mainsbridge Date: Sun, 5 Nov 2006 14:24:37 +0000 Subject: [PATCH] centre gain meter display, some bbt ruler fixes git-svn-id: svn://localhost/ardour2/trunk@1071 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/editor_rulers.cc | 42 +++++++++++++++------------- libs/gtkmm2ext/click_box.cc | 17 ++++++++--- libs/gtkmm2ext/gtkmm2ext/click_box.h | 1 + 3 files changed, 37 insertions(+), 23 deletions(-) diff --git a/gtk2_ardour/editor_rulers.cc b/gtk2_ardour/editor_rulers.cc index f6663c3914..ccd75a895c 100644 --- a/gtk2_ardour/editor_rulers.cc +++ b/gtk2_ardour/editor_rulers.cc @@ -1042,13 +1042,12 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble upper uint32_t magic_accent_number = 1; gint nmarks; char buf[64]; - gint n; + gint n = 0; nframes_t pos; bool bar_helper_on = true; BBT_Time next_beat; nframes_t next_beat_pos; - nframes_t ilower = (nframes_t) floor (lower); if ((desirable_marks = maxchars / 7) == 0) { return 0; @@ -1090,7 +1089,7 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble upper beats = current_bbt_points->size() - bars; /*Only show the bar helper if there aren't many bars on the screen */ - if (bars > 2) { + if (bars > 1) { bar_helper_on = false; } @@ -1107,11 +1106,12 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble upper double position_of_helper; bool i_am_accented = false; bool we_need_ticks = false; + bool helper_active = false; - position_of_helper = ilower + (30 * Editor::get_current_zoom ()); + position_of_helper = lower + (30 * Editor::get_current_zoom ()); if (desirable_marks >= (beats)) { - nmarks = ((beats + 1) * bbt_beat_subdivision) + 1; + nmarks = (beats * bbt_beat_subdivision) + 1; we_need_ticks = true; } else { nmarks = beats + 1; @@ -1120,19 +1120,23 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble upper *marks = (GtkCustomRulerMark *) g_malloc (sizeof(GtkCustomRulerMark) * nmarks); (*marks)[0].label = g_strdup(" "); - (*marks)[0].position = ilower; + (*marks)[0].position = lower; (*marks)[0].style = GtkCustomRulerMarkMicro; - for (n = 1, i = current_bbt_points->begin(); n < nmarks && i != current_bbt_points->end(); i++) { + for (n = 1, i = current_bbt_points->begin(); n < nmarks && i != current_bbt_points->end(); ++i) { - if ((*i).frame < ilower && (bar_helper_on)) { + if ((*i).frame < lower && (bar_helper_on)) { snprintf (buf, sizeof(buf), "<%" PRIu32 "|%" PRIu32, (*i).bar, (*i).beat); (*marks)[0].label = g_strdup (buf); + helper_active = true; } else { if ((*i).type == TempoMap::Bar) { - (((*i).frame < position_of_helper) && bar_helper_on) ? - snprintf (buf, sizeof(buf), " ") : snprintf (buf, sizeof(buf), "%" PRIu32, (*i).bar); + if (((*i).frame < position_of_helper) && helper_active) { + snprintf (buf, sizeof(buf), " "); + } else { + snprintf (buf, sizeof(buf), "%" PRIu32, (*i).bar); + } (*marks)[n].label = g_strdup (buf); (*marks)[n].position = (*i).frame; (*marks)[n].style = GtkCustomRulerMarkMajor; @@ -1156,7 +1160,7 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble upper /* Add the tick marks */ - if (we_need_ticks && (*i).type != TempoMap::Bar) { + if (we_need_ticks && (*i).type == TempoMap::Beat) { /* Find the next beat */ @@ -1224,14 +1228,14 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble upper /* we're in bar land */ - if (desirable_marks < (uint32_t) (bars / 256)) { + if (desirable_marks < (bars / 256)) { nmarks = 1; *marks = (GtkCustomRulerMark *) g_malloc (sizeof(GtkCustomRulerMark) * nmarks); snprintf (buf, sizeof(buf), "too many bars... (currently %" PRIu32 ")", bars ); (*marks)[0].style = GtkCustomRulerMarkMajor; (*marks)[0].label = g_strdup (buf); - (*marks)[0].position = ilower; - } else if (desirable_marks < (uint32_t) (nmarks = (gint) (bars / 64))) { + (*marks)[0].position = lower; + } else if (desirable_marks < (uint32_t)(nmarks = (gint) (bars / 64) + 1)) { *marks = (GtkCustomRulerMark *) g_malloc (sizeof(GtkCustomRulerMark) * nmarks); for (n = 0, i = current_bbt_points->begin(); i != current_bbt_points->end() && n < nmarks; i++) { if ((*i).type == TempoMap::Bar) { @@ -1253,7 +1257,7 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble upper } } } - } else if (desirable_marks < (uint32_t) (nmarks = (gint)(bars / 16))) { + } else if (desirable_marks < (uint32_t)(nmarks = (bars / 16) + 1)) { *marks = (GtkCustomRulerMark *) g_malloc (sizeof(GtkCustomRulerMark) * nmarks); for (n = 0, i = current_bbt_points->begin(); i != current_bbt_points->end() && n < nmarks; i++) { if ((*i).type == TempoMap::Bar) { @@ -1275,7 +1279,7 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble upper } } } - } else if (desirable_marks < (uint32_t) (nmarks = (gint)(bars / 4))){ + } else if (desirable_marks < (uint32_t)(nmarks = (bars / 4) + 1)){ *marks = (GtkCustomRulerMark *) g_malloc (sizeof(GtkCustomRulerMark) * nmarks); for (n = 0, i = current_bbt_points->begin(); i != current_bbt_points->end() && n < nmarks; ++i) { if ((*i).type == TempoMap::Bar) { @@ -1298,8 +1302,8 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble upper } } } else { - nmarks = bars; - *marks = (GtkCustomRulerMark *) g_malloc (sizeof(GtkCustomRulerMark) * nmarks); + nmarks = bars + 1; + *marks = (GtkCustomRulerMark *) g_malloc (sizeof(GtkCustomRulerMark) * nmarks ); for (n = 0, i = current_bbt_points->begin(); i != current_bbt_points->end() && n < nmarks; i++) { if ((*i).type == TempoMap::Bar) { if ((*i).bar % 4 == 1) { @@ -1319,7 +1323,7 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble upper } } } - return nmarks; + return n; } } diff --git a/libs/gtkmm2ext/click_box.cc b/libs/gtkmm2ext/click_box.cc index efce988c29..3ab7ea883c 100644 --- a/libs/gtkmm2ext/click_box.cc +++ b/libs/gtkmm2ext/click_box.cc @@ -38,17 +38,18 @@ ClickBox::ClickBox (Gtk::Adjustment *adjp, const string &name, bool round_to_ste twidth = 0; theight = 0; - set_name (name); + add_events (Gdk::BUTTON_RELEASE_MASK| Gdk::BUTTON_PRESS_MASK| Gdk::ENTER_NOTIFY_MASK| Gdk::LEAVE_NOTIFY_MASK); - set_label (); get_adjustment().signal_value_changed().connect (mem_fun (*this, &ClickBox::set_label)); - + signal_style_changed().connect (mem_fun (*this, &ClickBox::style_changed)); signal_button_press_event().connect (mem_fun (*this, &ClickBox::button_press_handler)); signal_button_release_event().connect (mem_fun (*this, &ClickBox::button_release_handler)); + set_name (name); + set_label (); } ClickBox::~ClickBox () @@ -102,6 +103,14 @@ ClickBox::set_label () queue_draw (); } +void +ClickBox::style_changed (const Glib::RefPtr& ignored) +{ + + layout->context_changed (); + layout->get_pixel_size (twidth, theight); +} + bool ClickBox::on_expose_event (GdkEventExpose *ev) { @@ -136,7 +145,7 @@ ClickBox::on_expose_event (GdkEventExpose *ev) win->draw_rectangle (bg_gc, true, draw_rect.x, draw_rect.y, draw_rect.width, draw_rect.height); if (twidth && theight) { - win->draw_layout (fg_gc, width - (twidth + 2), (height - theight) + 2, layout); + win->draw_layout (fg_gc, (width - twidth) / 2, (height - theight) / 2, layout); } } diff --git a/libs/gtkmm2ext/gtkmm2ext/click_box.h b/libs/gtkmm2ext/gtkmm2ext/click_box.h index c6f2922f3f..e4aee36ebe 100644 --- a/libs/gtkmm2ext/gtkmm2ext/click_box.h +++ b/libs/gtkmm2ext/gtkmm2ext/click_box.h @@ -54,6 +54,7 @@ class ClickBox : public Gtk::DrawingArea, public AutoSpin int theight; void set_label (); + void style_changed (const Glib::RefPtr &); bool button_press_handler (GdkEventButton *); bool button_release_handler (GdkEventButton *);