summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2015-08-04 18:42:27 +0200
committerRobin Gareus <robin@gareus.org>2015-08-04 18:42:27 +0200
commit2e8e23fac37776ebcfac45563ad438a8227d9e05 (patch)
treead713da235ab2ac923a81c56c276c563dcf66d9a
parentca2d536a30cdf4e794eea97bb2e6399c920d3610 (diff)
update routing wires display
-rw-r--r--gtk2_ardour/processor_box.cc44
1 files changed, 37 insertions, 7 deletions
diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc
index d7175ff9e7..1079b30347 100644
--- a/gtk2_ardour/processor_box.cc
+++ b/gtk2_ardour/processor_box.cc
@@ -843,10 +843,12 @@ ProcessorEntry::RoutingIcon::on_expose_event (GdkEventExpose* ev)
const uint32_t sources = _sources.n_total();
const uint32_t sinks = _sinks.n_total();
- /* MIDI */
const uint32_t midi_sources = _sources.n_midi();
const uint32_t midi_sinks = _sinks.n_midi();
+ const uint32_t audio_sources = _sources.n_audio();
+ const uint32_t audio_sinks = _sinks.n_audio();
+ /* MIDI */
cairo_set_source_rgb (cr,
UINT_RGBA_R_FLT(midi_port_color),
UINT_RGBA_G_FLT(midi_port_color),
@@ -871,11 +873,24 @@ ProcessorEntry::RoutingIcon::on_expose_event (GdkEventExpose* ev)
cairo_move_to (cr, si_x, height);
cairo_curve_to (cr, si_x, 0, si_x0, height, si_x0, 0);
cairo_stroke (cr);
+ } else if (midi_sources == 0 && midi_sinks == 1) {
+ const double dx = 1 + rint(max(2., 2. * ARDOUR_UI::ui_scale));
+ // draw "T"
+ // TODO connect back to track-input of last midi-out if any, otherwise draw "X"
+ const float si_x = rintf(width * .2f) + .5f;
+ cairo_move_to (cr, si_x, height);
+ cairo_line_to (cr, si_x, height * .66);
+ cairo_move_to (cr, si_x - dx, height * .66);
+ cairo_line_to (cr, si_x + dx, height * .66);
+ cairo_stroke (cr);
+#ifndef NDEBUG
+ } else if (midi_sources != 0 && midi_sinks != 0) {
+ PBD::warning << string_compose("Programming error: midi routing display: A %1 -> %2 | M %3 -> %4 | T %5 -> %6",
+ audio_sources, audio_sinks, midi_sources, midi_sinks, sources, sinks) << endmsg;
+#endif
}
/* AUDIO */
- const uint32_t audio_sources = _sources.n_audio();
- const uint32_t audio_sinks = _sinks.n_audio();
cairo_set_source_rgb (cr,
UINT_RGBA_R_FLT(audio_port_color),
UINT_RGBA_G_FLT(audio_port_color),
@@ -892,7 +907,7 @@ ProcessorEntry::RoutingIcon::on_expose_event (GdkEventExpose* ev)
cairo_curve_to (cr, si_x, 0, si_x0, height, si_x0, 0);
cairo_stroke (cr);
}
- } else if (audio_sources > 1) {
+ } else if (audio_sources > 1 && sinks > 1) {
for (uint32_t i = 0 ; i < audio_sources; ++i) {
const float si_x = rintf(width * (.2f + .6f * (i + midi_sinks) / (sinks - 1.f))) + .5f;
const float si_x0 = rintf(width * (.2f + .6f * (i + midi_sources) / (sources - 1.f))) + .5f;
@@ -900,11 +915,26 @@ ProcessorEntry::RoutingIcon::on_expose_event (GdkEventExpose* ev)
cairo_curve_to (cr, si_x, 0, si_x0, height, si_x0, 0);
cairo_stroke (cr);
}
- } else if (audio_sources == 1 && audio_sinks == 1) {
- const float si_x = rintf(width * .5f) + .5f;
+ } else if (audio_sources == 1 && audio_sinks > 0) {
+ float si_x, si_x0;
+ if (sinks == 1) {
+ si_x = rintf(width * .5f) + .5f;
+ } else {
+ si_x = rintf(width * (.2f + .6f * midi_sinks / (sinks - 1.f))) + .5f;
+ }
+ if (sources == 1) {
+ si_x0 = rintf(width * .5f) + .5f;
+ } else {
+ si_x0 = rintf(width * (.2f + .6f * midi_sources / (sources - 1.f))) + .5f;
+ }
cairo_move_to (cr, si_x, height);
- cairo_line_to (cr, si_x, 0);
+ cairo_curve_to (cr, si_x, 0, si_x0, height, si_x0, 0);
cairo_stroke (cr);
+#ifndef NDEBUG
+ } else if (audio_sources != 0 && audio_sinks != 0) {
+ PBD::warning << string_compose("Programming error: audio routing display: A %1 -> %2 | M %3 -> %4 | T %5 -> %6",
+ audio_sources, audio_sinks, midi_sources, midi_sinks, sources, sinks) << endmsg;
+#endif
}
cairo_destroy(cr);
return true;