Draw mouseover lines only between the target and the labels.
authorCarl Hetherington <carl@carlh.net>
Tue, 27 Jan 2009 18:56:06 +0000 (18:56 +0000)
committerCarl Hetherington <carl@carlh.net>
Tue, 27 Jan 2009 18:56:06 +0000 (18:56 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@4449 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/port_matrix_body.h
gtk2_ardour/port_matrix_grid.cc

index 2a68a251bf6221105cf104953fe5478fa3541001..b1ec6e2adad53cf2c39c93ae470cc066c4704cb5 100644 (file)
@@ -74,6 +74,10 @@ public:
        PortMatrixNode mouseover () const {
                return _mouseover;
        }
+
+       Arrangement arrangement () const {
+               return _arrangement;
+       }
        
 protected:
        bool on_expose_event (GdkEventExpose *);
index 2343cb4c08fa300c242dc9bc2ba9e37535cad157..eae8823af8af2487bdce5c1f586197ca6db1af12 100644 (file)
@@ -252,25 +252,33 @@ PortMatrixGrid::draw_extra (cairo_t* cr)
        set_source_rgba (cr, mouseover_line_colour(), 0.3);
        cairo_set_line_width (cr, mouseover_line_width());
 
+       double const x = component_to_parent_x (
+               channel_position (_body->mouseover().column, _body->column_ports().bundles(), column_width()) + column_width() / 2
+               );
+       
+       double const y = component_to_parent_y (
+               channel_position (_body->mouseover().row, _body->row_ports().bundles(), row_height()) + row_height() / 2
+               );
+       
        if (_body->mouseover().row.bundle) {
 
-               double const y = component_to_parent_y (
-                       channel_position (_body->mouseover().row, _body->row_ports().bundles(), row_height()) + row_height() / 2
-                       );
-               
-               cairo_move_to (cr, _parent_rectangle.get_x(), y);
-               cairo_line_to (cr, _parent_rectangle.get_x() + _parent_rectangle.get_width(), y);
+               cairo_move_to (cr, x, y);
+               if (_body->arrangement() == PortMatrixBody::BOTTOM_AND_LEFT) {
+                       cairo_line_to (cr, component_to_parent_x (0), y);
+               } else if (_body->arrangement() == PortMatrixBody::TOP_AND_RIGHT) {
+                       cairo_line_to (cr, _parent_rectangle.get_x() + _parent_rectangle.get_width(), y);
+               }
                cairo_stroke (cr);
        }
 
        if (_body->mouseover().column.bundle) {
 
-               double const x = component_to_parent_x (
-                       channel_position (_body->mouseover().column, _body->column_ports().bundles(), column_width()) + column_width() / 2
-                       );
-               
-               cairo_move_to (cr, x, _parent_rectangle.get_y());
-               cairo_line_to (cr, x, _parent_rectangle.get_y() + _parent_rectangle.get_height());
+               cairo_move_to (cr, x, y);
+               if (_body->arrangement() == PortMatrixBody::BOTTOM_AND_LEFT) {
+                       cairo_line_to (cr, x, _parent_rectangle.get_y() + _parent_rectangle.get_height());
+               } else if (_body->arrangement() == PortMatrixBody::TOP_AND_RIGHT) {
+                       cairo_line_to (cr, x, component_to_parent_y (0));
+               }
                cairo_stroke (cr);
        }
 }