13
0

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
This commit is contained in:
Carl Hetherington 2010-07-21 23:20:56 +00:00
parent 75fb4557e5
commit 8b0e35cba4
3 changed files with 42 additions and 14 deletions

View File

@ -137,7 +137,7 @@ protected:
} }
/** @return colour to paint grid squares when they can't be associated */ /** @return colour to paint grid squares when they can't be associated */
static Gdk::Color unknown_colour () { static Gdk::Color non_connectable_colour () {
return Gdk::Color ("#cccccc"); return Gdk::Color ("#cccccc");
} }

View File

@ -127,7 +127,11 @@ PortMatrixGrid::render (cairo_t* cr)
++N; ++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 bx = 0;
uint32_t by = 0; uint32_t by = 0;
@ -182,6 +186,11 @@ PortMatrixGrid::render (cairo_t* cr)
c[_matrix->column_index()] = ARDOUR::BundleChannel ((*i)->bundle, k); c[_matrix->column_index()] = ARDOUR::BundleChannel ((*i)->bundle, k);
c[_matrix->row_index()] = ARDOUR::BundleChannel ((*j)->bundle, l); c[_matrix->row_index()] = ARDOUR::BundleChannel ((*j)->bundle, l);
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); PortMatrixNode::State const s = _matrix->get_state (c);
switch (s) { switch (s) {
@ -195,6 +204,7 @@ PortMatrixGrid::render (cairo_t* cr)
default: default:
break; break;
} }
}
y += grid_spacing(); y += grid_spacing();
} }
@ -241,6 +251,23 @@ PortMatrixGrid::draw_empty_square (cairo_t* cr, uint32_t x, uint32_t y)
cairo_fill (cr); 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 PortMatrixNode
PortMatrixGrid::position_to_node (double x, double y) const PortMatrixGrid::position_to_node (double x, double y) const
{ {

View File

@ -62,6 +62,7 @@ private:
void queue_draw_for (std::list<PortMatrixNode> const &); void queue_draw_for (std::list<PortMatrixNode> const &);
void draw_association_indicator (cairo_t *, uint32_t, uint32_t, double p = 1); void draw_association_indicator (cairo_t *, uint32_t, uint32_t, double p = 1);
void draw_empty_square (cairo_t *, uint32_t, uint32_t); void draw_empty_square (cairo_t *, uint32_t, uint32_t);
void draw_non_connectable_indicator (cairo_t *, uint32_t, uint32_t);
std::list<PortMatrixNode> nodes_on_line (int, int, int, int) const; std::list<PortMatrixNode> nodes_on_line (int, int, int, int) const;
PortMatrixNode::State get_association (PortMatrixNode) const; PortMatrixNode::State get_association (PortMatrixNode) const;
void set_association (PortMatrixNode, bool); void set_association (PortMatrixNode, bool);