summaryrefslogtreecommitdiff
path: root/gtk2_ardour/port_matrix_grid.cc
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2010-07-21 23:20:56 +0000
committerCarl Hetherington <carl@carlh.net>2010-07-21 23:20:56 +0000
commit8b0e35cba44643cc8e5deb27e6f138b3425d0559 (patch)
treedb35915536ec305e399ff1978053f045c526b483 /gtk2_ardour/port_matrix_grid.cc
parent75fb4557e51c42a9a1d6c4bf589a4c235c276553 (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.cc53
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
{