+ Gtk::Allocation a = get_allocation();
+ double const width = a.get_width();
+ double const height = a.get_height();
+
+ Gdk::Color const bg = get_style()->get_bg (STATE_NORMAL);
+ cairo_set_source_rgb (cr, bg.get_red_p (), bg.get_green_p (), bg.get_blue_p ());
+
+ cairo_rectangle (cr, 0, 0, width, height);
+ cairo_fill (cr);
+
+ if (_ports.n_total() > 1) {
+ for (uint32_t i = 0; i < _ports.n_total(); ++i) {
+ if (i < _ports.n_midi()) {
+ cairo_set_source_rgb (cr,
+ UINT_RGBA_R_FLT(midi_port_color),
+ UINT_RGBA_G_FLT(midi_port_color),
+ UINT_RGBA_B_FLT(midi_port_color));
+ } else {
+ cairo_set_source_rgb (cr,
+ UINT_RGBA_R_FLT(audio_port_color),
+ UINT_RGBA_G_FLT(audio_port_color),
+ UINT_RGBA_B_FLT(audio_port_color));
+ }
+ const float x = rintf(width * (.2f + .6f * i / (_ports.n_total() - 1.f)));
+ cairo_rectangle (cr, x-1, 0, 3, height);
+ cairo_fill(cr);
+ }
+ } else if (_ports.n_total() == 1) {
+ if (_ports.n_midi() == 1) {
+ cairo_set_source_rgb (cr,
+ UINT_RGBA_R_FLT(midi_port_color),
+ UINT_RGBA_G_FLT(midi_port_color),
+ UINT_RGBA_B_FLT(midi_port_color));
+ } else {
+ cairo_set_source_rgb (cr,
+ UINT_RGBA_R_FLT(audio_port_color),
+ UINT_RGBA_G_FLT(audio_port_color),
+ UINT_RGBA_B_FLT(audio_port_color));
+ }
+ const float x = rintf(width * .5);
+ cairo_rectangle (cr, x-1, 0, 3, height);
+ cairo_fill(cr);
+ cairo_stroke(cr);