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:
parent
75fb4557e5
commit
8b0e35cba4
@ -137,7 +137,7 @@ protected:
|
||||
}
|
||||
|
||||
/** @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");
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
{
|
||||
|
@ -62,6 +62,7 @@ private:
|
||||
void queue_draw_for (std::list<PortMatrixNode> const &);
|
||||
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_non_connectable_indicator (cairo_t *, uint32_t, uint32_t);
|
||||
std::list<PortMatrixNode> nodes_on_line (int, int, int, int) const;
|
||||
PortMatrixNode::State get_association (PortMatrixNode) const;
|
||||
void set_association (PortMatrixNode, bool);
|
||||
|
Loading…
Reference in New Issue
Block a user