summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk2_ardour/port_matrix_body.cc20
-rw-r--r--gtk2_ardour/port_matrix_body.h1
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;