diff options
-rw-r--r-- | gtk2_ardour/port_matrix_body.cc | 20 | ||||
-rw-r--r-- | gtk2_ardour/port_matrix_body.h | 1 |
2 files changed, 21 insertions, 0 deletions
diff --git a/gtk2_ardour/port_matrix_body.cc b/gtk2_ardour/port_matrix_body.cc index 8c75cac74b..de73adcaff 100644 --- a/gtk2_ardour/port_matrix_body.cc +++ b/gtk2_ardour/port_matrix_body.cc @@ -97,9 +97,22 @@ PortMatrixBody::on_expose_event (GdkEventExpose* event) } cairo_t* cr = gdk_cairo_create (get_window()->gobj()); + + cairo_save (cr); + set_cairo_clip (cr, _grid.parent_rectangle ()); _grid.draw_extra (cr); + cairo_restore (cr); + + cairo_save (cr); + set_cairo_clip (cr, _row_labels.parent_rectangle ()); _row_labels.draw_extra (cr); + cairo_restore (cr); + + cairo_save (cr); + set_cairo_clip (cr, _column_labels.parent_rectangle ()); _column_labels.draw_extra (cr); + cairo_restore (cr); + cairo_destroy (cr); return true; @@ -458,3 +471,10 @@ PortMatrixBody::highlight_associated_channels (int dim, uint32_t N) } } } + +void +PortMatrixBody::set_cairo_clip (cairo_t* cr, Gdk::Rectangle const & r) const +{ + cairo_rectangle (cr, r.get_x(), r.get_y(), r.get_width(), r.get_height()); + cairo_clip (cr); +} diff --git a/gtk2_ardour/port_matrix_body.h b/gtk2_ardour/port_matrix_body.h index 2320efe4f2..cbf985dd0b 100644 --- a/gtk2_ardour/port_matrix_body.h +++ b/gtk2_ardour/port_matrix_body.h @@ -75,6 +75,7 @@ private: void rebuild_and_draw_column_labels (); void rebuild_and_draw_row_labels (); void update_bundles (); + void set_cairo_clip (cairo_t *, Gdk::Rectangle const &) const; PortMatrix* _matrix; PortMatrixColumnLabels _column_labels; |