From 67d545c0809522e8d32b919941f2be56d94c7ba3 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Thu, 5 Feb 2009 12:56:12 +0000 Subject: Small fixes to port matrix rendering, mostly visible when using the bundle manager. git-svn-id: svn://localhost/ardour2/branches/3.0@4491 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/port_group.cc | 1 - gtk2_ardour/port_matrix.cc | 3 +-- gtk2_ardour/port_matrix_body.cc | 21 ++++++++++++++++++--- gtk2_ardour/port_matrix_body.h | 3 ++- gtk2_ardour/port_matrix_component.cc | 5 ++++- gtk2_ardour/port_matrix_labels.cc | 2 +- 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::iterator i = _route_connections.begin(); i != _route_connections.end(); ++i) { i->disconnect (); } + _route_connections.clear (); boost::shared_ptr 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::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 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 #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::const_iterator i = _channel_highlights.begin(); i != _channel_highlights.end(); ++i) { - + render_channel_name ( cr, highlighted_channel_colour(), -- cgit v1.2.3