show plugin pin labels when hovering over them

This commit is contained in:
Robin Gareus 2016-04-13 23:37:09 +02:00
parent bf3719f63f
commit afca178e45
2 changed files with 26 additions and 8 deletions

View File

@ -280,13 +280,13 @@ PluginPinDialog::plugin_reconfigured ()
++_n_inputs;
}
CtrlWidget cw (CtrlWidget (Input, dt, id, 0, sidechain));
CtrlWidget cw (CtrlWidget ("", Input, dt, id, 0, sidechain));
_elements.push_back (cw);
}
for (uint32_t i = 0; i < _out.n_total (); ++i) {
int id = (i < _out.n_midi ()) ? i : i - _out.n_midi ();
_elements.push_back (CtrlWidget (Output, (i < _out.n_midi () ? DataType::MIDI : DataType::AUDIO), id));
_elements.push_back (CtrlWidget ("", Output, (i < _out.n_midi () ? DataType::MIDI : DataType::AUDIO), id));
}
for (uint32_t n = 0; n < _n_plugins; ++n) {
@ -295,13 +295,14 @@ PluginPinDialog::plugin_reconfigured ()
DataType dt (i < _sinks.n_midi () ? DataType::MIDI : DataType::AUDIO);
int idx = (dt == DataType::MIDI) ? i : i - _sinks.n_midi ();
const Plugin::IOPortDescription& iod (plugin->describe_io_port (dt, true, idx));
CtrlWidget cw (CtrlWidget (Sink, dt, idx, n, iod.is_sidechain));
CtrlWidget cw (CtrlWidget (iod.name, Sink, dt, idx, n, iod.is_sidechain));
_elements.push_back (cw);
}
for (uint32_t i = 0; i < _sources.n_total (); ++i) {
DataType dt (i < _sources.n_midi () ? DataType::MIDI : DataType::AUDIO);
int idx = (dt == DataType::MIDI) ? i : i - _sources.n_midi ();
_elements.push_back (CtrlWidget (Source, dt, idx, n));
const Plugin::IOPortDescription& iod (plugin->describe_io_port (dt, false, idx));
_elements.push_back (CtrlWidget (iod.name, Source, dt, idx, n));
}
}
@ -512,7 +513,6 @@ PluginPinDialog::set_color (cairo_t* cr, bool midi)
void
PluginPinDialog::draw_io_pin (cairo_t* cr, const CtrlWidget& w)
{
if (w.e->sc) {
const double dy = w.h * .5;
const double dx = w.w - dy;
@ -588,6 +588,23 @@ PluginPinDialog::draw_plugin_pin (cairo_t* cr, const CtrlWidget& w)
cairo_set_source_rgba (cr, 0.9, 0.9, 0.9, 0.3);
}
cairo_fill (cr);
if ((w.prelight || w.e == _selection) && !w.name.empty()) {
int text_width;
int text_height;
Glib::RefPtr<Pango::Layout> layout;
layout = Pango::Layout::create (get_pango_context ());
layout->set_text (w.name);
layout->get_pixel_size (text_width, text_height);
rounded_rectangle (cr, w.x + dx - .5 * text_width - 2, w.y - text_height - 2, text_width + 4, text_height + 2, 7);
cairo_set_source_rgba (cr, 0, 0, 0, .5);
cairo_fill (cr);
cairo_move_to (cr, w.x + dx - .5 * text_width, w.y - text_height - 1);
cairo_set_source_rgba (cr, 1., 1., 1., 1.);
pango_cairo_show_layout (cr, layout->gobj ());
}
}
double
@ -610,7 +627,7 @@ PluginPinDialog::get_io_ctrl (CtrlType ct, DataType dt, uint32_t id, uint32_t ip
X_("Invalid Plugin I/O Port."))
<< endmsg;
abort (); /*NOTREACHED*/
static CtrlWidget screw_old_compilers (Input, DataType::NIL, 0);
static CtrlWidget screw_old_compilers ("", Input, DataType::NIL, 0);
return screw_old_compilers;
}

View File

@ -58,11 +58,12 @@ private:
typedef boost::shared_ptr<_CtrlElem> CtrlElem;
struct CtrlWidget {
CtrlWidget (CtrlType ct, ARDOUR::DataType dt, uint32_t id, uint32_t ip = 0, bool sc = false)
: x(0), y(0), w (0), h (0), prelight (false)
CtrlWidget (const std::string& n, CtrlType ct, ARDOUR::DataType dt, uint32_t id, uint32_t ip = 0, bool sc = false)
: name (n), x(0), y(0), w (0), h (0), prelight (false)
{
e = CtrlElem (new _CtrlElem (ct, dt, id, ip, sc));
}
std::string name;
double x,y;
double w,h;
bool prelight;