_longest_port_name = 0;
_longest_bundle_name = 0;
- _height = 0;
/* Compute maximum dimensions using all port groups, so that we allow for the largest and hence
we can change between visible groups without the size of the labels jumping around.
PortGroup::BundleList const r = (*i)->bundles ();
for (PortGroup::BundleList::const_iterator j = r.begin(); j != r.end(); ++j) {
- for (uint32_t k = 0; k < j->bundle->nchannels(); ++k) {
+ for (uint32_t k = 0; k < (*j)->bundle->nchannels(); ++k) {
cairo_text_extents_t ext;
- cairo_text_extents (cr, j->bundle->channel_name(k).c_str(), &ext);
+ cairo_text_extents (cr, (*j)->bundle->channel_name(k).c_str(), &ext);
if (ext.width > _longest_port_name) {
_longest_port_name = ext.width;
}
}
cairo_text_extents_t ext;
- cairo_text_extents (cr, j->bundle->name().c_str(), &ext);
+ cairo_text_extents (cr, (*j)->bundle->name().c_str(), &ext);
if (ext.width > _longest_bundle_name) {
_longest_bundle_name = ext.width;
}
}
}
-
- _height += group_size (_matrix->visible_rows()) * grid_spacing ();
+
+ if (_matrix->visible_rows()) {
+ _height = group_size (_matrix->visible_rows()) * grid_spacing ();
+ } else {
+ _height = 0;
+ }
cairo_destroy (cr);
gdk_pixmap_unref (pm);
PortGroup::BundleList const & bundles = _matrix->visible_rows()->bundles ();
for (PortGroup::BundleList::const_iterator i = bundles.begin(); i != bundles.end(); ++i) {
- render_bundle_name (cr, background_colour (), i->has_colour ? i->colour : get_a_bundle_colour (N), 0, y, i->bundle);
+ render_bundle_name (cr, background_colour (), (*i)->has_colour ? (*i)->colour : get_a_bundle_colour (N), 0, y, (*i)->bundle);
if (!_matrix->show_only_bundles()) {
- for (uint32_t j = 0; j < i->bundle->nchannels(); ++j) {
- Gdk::Color c = i->has_colour ? i->colour : get_a_bundle_colour (M);
- render_channel_name (cr, background_colour (), c, 0, y, ARDOUR::BundleChannel (i->bundle, j));
+ for (uint32_t j = 0; j < (*i)->bundle->nchannels(); ++j) {
+ Gdk::Color c = (*i)->has_colour ? (*i)->colour : get_a_bundle_colour (M);
+ render_channel_name (cr, background_colour (), c, 0, y, ARDOUR::BundleChannel ((*i)->bundle, j));
y += grid_spacing();
++M;
}
}
void
-PortMatrixRowLabels::button_press (double x, double y, int b, uint32_t t)
+PortMatrixRowLabels::button_press (double x, double y, int b, uint32_t t, guint)
{
- ARDOUR::BundleChannel const w = position_to_channel (y, x, _matrix->visible_rows());
+ ARDOUR::BundleChannel w = position_to_channel (y, x, _matrix->visible_rows());
+
+ if (
+ (_matrix->arrangement() == PortMatrix::TOP_TO_RIGHT && x > (_longest_port_name + name_pad() * 2)) ||
+ (_matrix->arrangement() == PortMatrix::LEFT_TO_BOTTOM && x < (_longest_bundle_name + name_pad() * 2))
+
+ ) {
+ w.channel = -1;
+ }
if (b == 3) {
{
ARDOUR::BundleChannel const w = position_to_channel (y, x, _matrix->visible_rows());
- if (w.bundle == 0) {
- /* not over any bundle */
- _body->set_mouseover (PortMatrixNode ());
- return;
- }
-
uint32_t const bw = _longest_bundle_name + 2 * name_pad();
- if (
- (_matrix->arrangement() == PortMatrix::LEFT_TO_BOTTOM && x < bw) ||
- (_matrix->arrangement() == PortMatrix::TOP_TO_RIGHT && x > (_width - bw))
-
- ) {
+ bool done = false;
- /* if the mouse is over a bundle name, highlight all channels in the bundle */
+ if (w.bundle) {
- list<PortMatrixNode> n;
+ if (
+ (_matrix->arrangement() == PortMatrix::LEFT_TO_BOTTOM && x < bw) ||
+ (_matrix->arrangement() == PortMatrix::TOP_TO_RIGHT && x > (_width - bw) && x < _width)
+
+ ) {
- for (uint32_t i = 0; i < w.bundle->nchannels(); ++i) {
- ARDOUR::BundleChannel const bc (w.bundle, i);
- n.push_back (PortMatrixNode (bc, ARDOUR::BundleChannel ()));
+ /* if the mouse is over a bundle name, highlight all channels in the bundle */
+
+ list<PortMatrixNode> n;
+
+ for (uint32_t i = 0; i < w.bundle->nchannels(); ++i) {
+ ARDOUR::BundleChannel const bc (w.bundle, i);
+ n.push_back (PortMatrixNode (bc, ARDOUR::BundleChannel ()));
+ }
+
+ _body->set_mouseover (n);
+ done = true;
+
+ } else if (x < _width) {
+
+ _body->set_mouseover (PortMatrixNode (w, ARDOUR::BundleChannel ()));
+ done = true;
+
}
- _body->set_mouseover (n);
-
- } else {
-
- _body->set_mouseover (PortMatrixNode (w, ARDOUR::BundleChannel ()));
+ }
+ if (!done) {
+ /* not over any bundle */
+ _body->set_mouseover (PortMatrixNode ());
+ return;
}
}