summaryrefslogtreecommitdiff
path: root/gtk2_ardour/processor_box.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2014-01-01 15:34:06 +0100
committerRobin Gareus <robin@gareus.org>2014-01-01 15:34:06 +0100
commit2644aaddb19eda57551129c4e6ca6ca02fdb066a (patch)
tree51f34cfbf5c7400a348777134eb51715981f9885 /gtk2_ardour/processor_box.cc
parent91ae2c0e81414789baf9ed43c46570f1a7bbc1c2 (diff)
visualize port connections in mixer/processor when in < out
Diffstat (limited to 'gtk2_ardour/processor_box.cc')
-rw-r--r--gtk2_ardour/processor_box.cc72
1 files changed, 52 insertions, 20 deletions
diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc
index 011d2226f4..08079f4f91 100644
--- a/gtk2_ardour/processor_box.cc
+++ b/gtk2_ardour/processor_box.cc
@@ -602,7 +602,7 @@ PluginInsertProcessorEntry::PluginInsertProcessorEntry (ProcessorBox* b, boost::
: ProcessorEntry (b, p, w)
, _plugin_insert (p)
{
- p->SplittingChanged.connect (
+ p->PluginIoReConfigure.connect (
_splitting_connection, invalidator (*this), boost::bind (&PluginInsertProcessorEntry::plugin_insert_splitting_changed, this), gui_context()
);
@@ -617,9 +617,17 @@ PluginInsertProcessorEntry::PluginInsertProcessorEntry (ProcessorBox* b, boost::
void
PluginInsertProcessorEntry::plugin_insert_splitting_changed ()
{
- if (_plugin_insert->splitting ()) {
- _splitting_icon.set_branches(_plugin_insert->output_streams().n_audio());
+ _splitting_icon.set_inputs(_plugin_insert->input_streams());
+ _splitting_icon.set_outputs(_plugin_insert->output_streams());
+
+ if (_plugin_insert->splitting () || (
+ _plugin_insert->input_streams().n_midi() == 0
+ && _plugin_insert->input_streams().n_audio() < _plugin_insert->output_streams().n_audio()
+ )
+ )
+ {
_splitting_icon.show ();
+ _splitting_icon.queue_draw();
} else {
_splitting_icon.hide ();
}
@@ -676,30 +684,54 @@ PluginInsertProcessorEntry::SplittingIcon::on_expose_event (GdkEventExpose* ev)
Gdk::Color const fg = get_style()->get_fg (STATE_NORMAL);
cairo_set_source_rgb (cr, fg.get_red_p (), fg.get_green_p (), fg.get_blue_p ());
- const float si_l = rintf(width * 0.2) + .5f;
- const float si_c = rintf(width * 0.5) + .5f;
- const float si_r = rintf(width * 0.8) + .5f;
+ const uint32_t inputs = _inputs.n_audio();
+ const uint32_t outputs = _outputs.n_audio();
+
const float si_m = rintf(height * 0.5) + .5f;
- cairo_move_to (cr, si_l, height);
- cairo_line_to (cr, si_l, si_m);
- cairo_line_to (cr, si_r, si_m);
- cairo_line_to (cr, si_r, height);
- cairo_stroke (cr);
+ if (inputs == 1) {
+ const float si_l = rintf(width * 0.2) + .5f;
+ const float si_c = rintf(width * 0.5) + .5f;
+ const float si_r = rintf(width * 0.8) + .5f;
+
+ cairo_move_to (cr, si_l, height);
+ cairo_line_to (cr, si_l, si_m);
+ cairo_line_to (cr, si_r, si_m);
+ cairo_line_to (cr, si_r, height);
+ cairo_stroke (cr);
+
+ cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT);
- cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT);
+ const uint32_t outputs = _outputs.n_audio();
+ for (uint32_t i = 2; i < outputs; ++i) {
+ const float si_b = rintf(width * (.2f + .6f * (i - 1.f) / (outputs - 1.f))) + .5f;
+ cairo_move_to (cr, si_b, height);
+ cairo_line_to (cr, si_b, si_m);
+ cairo_stroke (cr);
+ }
- for (uint32_t i = 2; i < _branches; ++i) {
- const float si_b = rintf(width * (.2f + .6f * (i - 1.f) / (_branches - 1.f))) + .5f;
- cairo_move_to (cr, si_b, height);
- cairo_line_to (cr, si_b, si_m);
+ cairo_move_to (cr, si_c, si_m);
+ cairo_line_to (cr, si_c, 0);
cairo_stroke (cr);
+ } else {
+ cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND);
+ for (uint32_t i = 0 ; i < outputs; ++i) {
+ const float si_x = rintf(width * (.2f + .6f * i / (outputs - 1.f))) + .5f;
+ if (i < inputs) {
+ cairo_move_to (cr, si_x, height);
+ cairo_line_to (cr, si_x, 0);
+ cairo_stroke (cr);
+ } else {
+ cairo_move_to (cr, si_x, si_m);
+ cairo_line_to (cr, si_x, height);
+ cairo_stroke (cr);
+ cairo_move_to (cr, si_x+4, si_m);
+ cairo_line_to (cr, si_x-4, si_m);
+ cairo_stroke (cr);
+ }
+ }
}
- cairo_move_to (cr, si_c, si_m);
- cairo_line_to (cr, si_c, 0);
- cairo_stroke (cr);
-
return true;
}