diff options
author | Carl Hetherington <carl@carlh.net> | 2011-08-13 20:19:39 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2011-08-13 20:19:39 +0000 |
commit | 07a58ffd62f834780eb5dada7c1713e31c2e425a (patch) | |
tree | 64b6bcd0ea1f9249af3a6656770764bc4933d726 /gtk2_ardour/port_matrix_row_labels.cc | |
parent | f75bbfd8ac52ea33692c3ee15953ceb2994117ab (diff) |
Stop bundles disappearing from the port matrix when they
have no channels (#4209). Also fix the remove all
channels menu option.
git-svn-id: svn://localhost/ardour2/branches/3.0@9986 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/port_matrix_row_labels.cc')
-rw-r--r-- | gtk2_ardour/port_matrix_row_labels.cc | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/gtk2_ardour/port_matrix_row_labels.cc b/gtk2_ardour/port_matrix_row_labels.cc index bc6e2a2fa1..8c8dcd4dff 100644 --- a/gtk2_ardour/port_matrix_row_labels.cc +++ b/gtk2_ardour/port_matrix_row_labels.cc @@ -115,17 +115,18 @@ PortMatrixRowLabels::render (cairo_t* cr) render_bundle_name (cr, background_colour (), (*i)->has_colour ? (*i)->colour : get_a_bundle_colour (N), 0, y, (*i)->bundle); if (!_matrix->show_only_bundles()) { - for (uint32_t j = 0; j < (*i)->bundle->nchannels().n_total(); ++j) { - - if (!_matrix->should_show ((*i)->bundle->channel_type(j))) { - continue; - } - + uint32_t const N = _matrix->count_of_our_type ((*i)->bundle->nchannels()); + for (uint32_t j = 0; j < N; ++j) { Gdk::Color c = (*i)->has_colour ? (*i)->colour : get_a_bundle_colour (M); render_channel_name (cr, background_colour (), c, 0, y, ARDOUR::BundleChannel ((*i)->bundle, j)); y += grid_spacing(); ++M; } + + if (N == 0) { + y += grid_spacing (); + } + } else { y += grid_spacing(); } @@ -215,7 +216,7 @@ PortMatrixRowLabels::render_bundle_name ( { double const x = bundle_name_x (); - int const n = _matrix->show_only_bundles() ? 1 : _matrix->count_of_our_type (b->nchannels()); + int const n = _matrix->show_only_bundles() ? 1 : _matrix->count_of_our_type_min_1 (b->nchannels()); set_source_rgb (cr, bg_colour); cairo_rectangle (cr, xoff + x, yoff, _longest_bundle_name + name_pad() * 2, grid_spacing() * n); cairo_fill_preserve (cr); @@ -244,15 +245,15 @@ PortMatrixRowLabels::render_channel_name ( cairo_set_line_width (cr, label_border_width ()); cairo_stroke (cr); - cairo_text_extents_t ext; - cairo_text_extents (cr, bc.bundle->channel_name(bc.channel).c_str(), &ext); - double const off = (grid_spacing() - ext.height) / 2; - if (_matrix->count_of_our_type (bc.bundle->nchannels()) > 1) { /* only plot the name if the bundle has more than one channel; the name of a single channel is assumed to be redundant */ + cairo_text_extents_t ext; + cairo_text_extents (cr, bc.bundle->channel_name(bc.channel).c_str(), &ext); + double const off = (grid_spacing() - ext.height) / 2; + set_source_rgb (cr, text_colour()); cairo_move_to (cr, port_name_x() + xoff + name_pad(), yoff + name_pad() + off); cairo_show_text (cr, bc.bundle->channel_name(bc.channel).c_str()); @@ -304,7 +305,7 @@ PortMatrixRowLabels::mouseover_changed (list<PortMatrixNode> const &) ARDOUR::BundleChannel c = i->column; ARDOUR::BundleChannel r = i->row; - if (c.bundle && r.bundle) { + if (PortMatrix::bundle_with_channels (c.bundle) && PortMatrix::bundle_with_channels (r.bundle)) { add_channel_highlight (r); } else if (r.bundle) { _body->highlight_associated_channels (_matrix->row_index(), r); |