diff options
author | Carl Hetherington <carl@carlh.net> | 2010-07-21 23:20:56 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2010-07-21 23:20:56 +0000 |
commit | 8b0e35cba44643cc8e5deb27e6f138b3425d0559 (patch) | |
tree | db35915536ec305e399ff1978053f045c526b483 /gtk2_ardour/port_matrix_grid.cc | |
parent | 75fb4557e51c42a9a1d6c4bf589a4c235c276553 (diff) |
Provide a visual cue to indicate that MIDI and audio ports cannot be connected to each other in the port matrix.
git-svn-id: svn://localhost/ardour2/branches/3.0@7463 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/port_matrix_grid.cc')
-rw-r--r-- | gtk2_ardour/port_matrix_grid.cc | 53 |
1 files changed, 40 insertions, 13 deletions
diff --git a/gtk2_ardour/port_matrix_grid.cc b/gtk2_ardour/port_matrix_grid.cc index f4ca28fcd2..8a12df236e 100644 --- a/gtk2_ardour/port_matrix_grid.cc +++ b/gtk2_ardour/port_matrix_grid.cc @@ -127,7 +127,11 @@ PortMatrixGrid::render (cairo_t* cr) ++N; } - /* ASSOCIATION INDICATORS */ + /* ASSOCIATION INDICATORS and NON-CONNECTABLE INDICATORS */ + + /* we draw a grey square in a matrix box if the two ports that intersect at that box + cannot be connected because they are of different types (MIDI vs. audio) + */ uint32_t bx = 0; uint32_t by = 0; @@ -182,18 +186,24 @@ PortMatrixGrid::render (cairo_t* cr) c[_matrix->column_index()] = ARDOUR::BundleChannel ((*i)->bundle, k); c[_matrix->row_index()] = ARDOUR::BundleChannel ((*j)->bundle, l); - PortMatrixNode::State const s = _matrix->get_state (c); - - switch (s) { - case PortMatrixNode::ASSOCIATED: - draw_association_indicator (cr, x, y); - break; - - case PortMatrixNode::NOT_ASSOCIATED: - break; - - default: - break; + if (c[0].bundle->channel_type (c[0].channel) != c[1].bundle->channel_type (c[1].channel)) { + /* these two channels are of different types */ + draw_non_connectable_indicator (cr, x, y); + } else { + /* these two channels might be associated */ + PortMatrixNode::State const s = _matrix->get_state (c); + + switch (s) { + case PortMatrixNode::ASSOCIATED: + draw_association_indicator (cr, x, y); + break; + + case PortMatrixNode::NOT_ASSOCIATED: + break; + + default: + break; + } } y += grid_spacing(); @@ -241,6 +251,23 @@ PortMatrixGrid::draw_empty_square (cairo_t* cr, uint32_t x, uint32_t y) cairo_fill (cr); } +/** Draw a square to indicate that two channels in a matrix cannot be associated + * with each other. + */ +void +PortMatrixGrid::draw_non_connectable_indicator (cairo_t* cr, uint32_t x, uint32_t y) +{ + set_source_rgb (cr, non_connectable_colour ()); + cairo_rectangle ( + cr, + x + thick_grid_line_width(), + y + thick_grid_line_width(), + grid_spacing() - 2 * thick_grid_line_width(), + grid_spacing() - 2 * thick_grid_line_width() + ); + cairo_fill (cr); +} + PortMatrixNode PortMatrixGrid::position_to_node (double x, double y) const { |