summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk2_ardour/port_group.cc1
-rw-r--r--gtk2_ardour/port_matrix.cc3
-rw-r--r--gtk2_ardour/port_matrix_body.cc21
-rw-r--r--gtk2_ardour/port_matrix_body.h3
-rw-r--r--gtk2_ardour/port_matrix_component.cc5
-rw-r--r--gtk2_ardour/port_matrix_labels.cc2
6 files changed, 26 insertions, 9 deletions
diff --git a/gtk2_ardour/port_group.cc b/gtk2_ardour/port_group.cc
index 05bd3153b7..52d6d6a089 100644
--- a/gtk2_ardour/port_group.cc
+++ b/gtk2_ardour/port_group.cc
@@ -110,7 +110,6 @@ PortGroup::total_ports () const
/** PortGroupList constructor.
*/
-
PortGroupList::PortGroupList ()
: _type (ARDOUR::DataType::AUDIO), _bundles_dirty (true)
{
diff --git a/gtk2_ardour/port_matrix.cc b/gtk2_ardour/port_matrix.cc
index 1963818203..6c04b8feb4 100644
--- a/gtk2_ardour/port_matrix.cc
+++ b/gtk2_ardour/port_matrix.cc
@@ -88,6 +88,7 @@ PortMatrix::reconnect_to_routes ()
for (std::vector<sigc::connection>::iterator i = _route_connections.begin(); i != _route_connections.end(); ++i) {
i->disconnect ();
}
+ _route_connections.clear ();
boost::shared_ptr<ARDOUR::RouteList> routes = _session.get_routes ();
for (ARDOUR::RouteList::iterator i = routes->begin(); i != routes->end(); ++i) {
@@ -119,7 +120,6 @@ PortMatrix::setup ()
/* we've set up before, so we need to clean up before re-setting-up */
/* XXX: we ought to be able to do this by just getting a list of children
from each container widget, but I couldn't make that work */
-
for (std::vector<Gtk::CheckButton*>::iterator i = _column_visibility_buttons.begin(); i != _column_visibility_buttons.end(); ++i) {
_column_visibility_box.remove (**i);
@@ -431,4 +431,3 @@ PortMatrix::rename_channel_proxy (boost::weak_ptr<ARDOUR::Bundle> b, uint32_t c)
rename_channel (ARDOUR::BundleChannel (sb, c));
}
-
diff --git a/gtk2_ardour/port_matrix_body.cc b/gtk2_ardour/port_matrix_body.cc
index 81c332da86..4d7720207b 100644
--- a/gtk2_ardour/port_matrix_body.cc
+++ b/gtk2_ardour/port_matrix_body.cc
@@ -56,14 +56,19 @@ PortMatrixBody::on_expose_event (GdkEventExpose* event)
);
bool intersects;
+
Gdk::Rectangle r = exposure;
+ /* the get_pixmap call may cause things to be rerendered and sizes to change,
+ so fetch the pixmaps before calculating where to put it */
+ GdkPixmap* p = _column_labels->get_pixmap (get_window()->gobj());
r.intersect (_column_labels->parent_rectangle(), intersects);
if (intersects) {
+
gdk_draw_drawable (
get_window()->gobj(),
get_style()->get_fg_gc (Gtk::STATE_NORMAL)->gobj(),
- _column_labels->get_pixmap (get_window()->gobj()),
+ p,
_column_labels->parent_to_component_x (r.get_x()),
_column_labels->parent_to_component_y (r.get_y()),
r.get_x(),
@@ -74,13 +79,14 @@ PortMatrixBody::on_expose_event (GdkEventExpose* event)
}
r = exposure;
+ p = _row_labels->get_pixmap (get_window()->gobj());
r.intersect (_row_labels->parent_rectangle(), intersects);
if (intersects) {
gdk_draw_drawable (
get_window()->gobj(),
get_style()->get_fg_gc (Gtk::STATE_NORMAL)->gobj(),
- _row_labels->get_pixmap (get_window()->gobj()),
+ p,
_row_labels->parent_to_component_x (r.get_x()),
_row_labels->parent_to_component_y (r.get_y()),
r.get_x(),
@@ -91,13 +97,14 @@ PortMatrixBody::on_expose_event (GdkEventExpose* event)
}
r = exposure;
+ p = _grid->get_pixmap (get_window()->gobj());
r.intersect (_grid->parent_rectangle(), intersects);
if (intersects) {
gdk_draw_drawable (
get_window()->gobj(),
get_style()->get_fg_gc (Gtk::STATE_NORMAL)->gobj(),
- _grid->get_pixmap (get_window()->gobj()),
+ p,
_grid->parent_to_component_x (r.get_x()),
_grid->parent_to_component_y (r.get_y()),
r.get_x(),
@@ -489,3 +496,11 @@ 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);
}
+
+void
+PortMatrixBody::component_size_changed ()
+{
+ compute_rectangles ();
+ _matrix->setup_scrollbars ();
+}
+
diff --git a/gtk2_ardour/port_matrix_body.h b/gtk2_ardour/port_matrix_body.h
index 50a656522a..c905a98dc4 100644
--- a/gtk2_ardour/port_matrix_body.h
+++ b/gtk2_ardour/port_matrix_body.h
@@ -62,6 +62,7 @@ public:
}
void highlight_associated_channels (int, uint32_t);
+ void component_size_changed ();
protected:
bool on_expose_event (GdkEventExpose *);
@@ -78,7 +79,7 @@ private:
void rebuild_and_draw_row_labels ();
void update_bundles ();
void set_cairo_clip (cairo_t *, Gdk::Rectangle const &) const;
-
+
PortMatrix* _matrix;
PortMatrixColumnLabels* _column_labels;
PortMatrixRowLabels* _row_labels;
diff --git a/gtk2_ardour/port_matrix_component.cc b/gtk2_ardour/port_matrix_component.cc
index 02d754f5ce..a68e21730d 100644
--- a/gtk2_ardour/port_matrix_component.cc
+++ b/gtk2_ardour/port_matrix_component.cc
@@ -17,8 +17,9 @@
*/
-#include <iostream>
#include "port_matrix_component.h"
+#include "port_matrix.h"
+#include "port_matrix_body.h"
/** Constructor.
* @param p Port matrix that we're in.
@@ -56,6 +57,7 @@ PortMatrixComponent::get_pixmap (GdkDrawable *drawable)
if (_dimension_computation_required) {
compute_dimensions ();
_dimension_computation_required = false;
+ _body->component_size_changed ();
}
/* we may be zero width or height; if so, just
@@ -102,6 +104,7 @@ PortMatrixComponent::dimensions ()
if (_dimension_computation_required) {
compute_dimensions ();
_dimension_computation_required = false;
+ _body->component_size_changed ();
}
return std::make_pair (_width, _height);
diff --git a/gtk2_ardour/port_matrix_labels.cc b/gtk2_ardour/port_matrix_labels.cc
index 3a50edb7c6..2734a193ef 100644
--- a/gtk2_ardour/port_matrix_labels.cc
+++ b/gtk2_ardour/port_matrix_labels.cc
@@ -24,7 +24,7 @@ void
PortMatrixLabels::draw_extra (cairo_t* cr)
{
for (std::vector<ARDOUR::BundleChannel>::const_iterator i = _channel_highlights.begin(); i != _channel_highlights.end(); ++i) {
-
+
render_channel_name (
cr,
highlighted_channel_colour(),