X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fstreamview.cc;h=bcab05b9c81095eb3c1041f42274fef5669c4bb8;hb=921d2c5809a101995165ee05ad970d4a21adcdf8;hp=24c28d7957994eb603a4dcd3fe8891b719a78127;hpb=b5c9a92a584b70b2af172e7240d4a58b007e0608;p=ardour.git diff --git a/gtk2_ardour/streamview.cc b/gtk2_ardour/streamview.cc index 24c28d7957..bcab05b9c8 100644 --- a/gtk2_ardour/streamview.cc +++ b/gtk2_ardour/streamview.cc @@ -34,19 +34,18 @@ #include "canvas/debug.h" #include "streamview.h" -#include "global_signals.h" #include "region_view.h" #include "route_time_axis.h" #include "region_selection.h" #include "selection.h" #include "public_editor.h" -#include "ardour_ui.h" #include "timers.h" #include "rgb_macros.h" #include "gui_thread.h" +#include "ui_config.h" #include "utils.h" -#include "i18n.h" +#include "pbd/i18n.h" using namespace std; using namespace ARDOUR; @@ -67,7 +66,7 @@ StreamView::StreamView (RouteTimeAxisView& tv, ArdourCanvas::Container* canvas_g , last_rec_data_frame(0) { CANVAS_DEBUG_NAME (_canvas_group, string_compose ("SV canvas group %1", _trackview.name())); - + /* set_position() will position the group */ canvas_rect = new ArdourCanvas::Rectangle (_canvas_group); @@ -79,14 +78,14 @@ StreamView::StreamView (RouteTimeAxisView& tv, ArdourCanvas::Container* canvas_g if (_trackview.is_track()) { _trackview.track()->DiskstreamChanged.connect (*this, invalidator (*this), boost::bind (&StreamView::diskstream_changed, this), gui_context()); - _trackview.track()->RecordEnableChanged.connect (*this, invalidator (*this), boost::bind (&StreamView::rec_enable_changed, this), gui_context()); + _trackview.track()->rec_enable_control()->Changed.connect (*this, invalidator (*this), boost::bind (&StreamView::rec_enable_changed, this), gui_context()); _trackview.session()->TransportStateChange.connect (*this, invalidator (*this), boost::bind (&StreamView::transport_changed, this), gui_context()); _trackview.session()->TransportLooped.connect (*this, invalidator (*this), boost::bind (&StreamView::transport_looped, this), gui_context()); _trackview.session()->RecordStateChanged.connect (*this, invalidator (*this), boost::bind (&StreamView::sess_rec_enable_changed, this), gui_context()); } - ColorsChanged.connect (sigc::mem_fun (*this, &StreamView::color_handler)); + UIConfiguration::instance().ColorsChanged.connect (sigc::mem_fun (*this, &StreamView::color_handler)); } StreamView::~StreamView () @@ -120,7 +119,7 @@ StreamView::set_height (double h) return -1; } - if (canvas_rect->y1() == h) { + if (height == h) { return 0; } @@ -140,6 +139,10 @@ StreamView::set_samples_per_pixel (double fpp) return -1; } + if (fpp == _samples_per_pixel) { + return 0; + } + _samples_per_pixel = fpp; for (i = region_views.begin(); i != region_views.end(); ++i) { @@ -293,6 +296,7 @@ StreamView::playlist_layered (boost::weak_ptr wtr) if (_layer_display == Stacked) { update_contents_height (); + /* tricky. playlist_changed() does this as well, and its really inefficient. */ update_coverage_frames (); } else { /* layering has probably been modified. reflect this in the canvas. */ @@ -312,12 +316,12 @@ StreamView::playlist_switched (boost::weak_ptr wtr) /* disconnect from old playlist */ playlist_connections.drop_connections (); - undisplay_track (); + //undisplay_track (); /* draw it */ - + tr->playlist()->freeze(); redisplay_track (); - + tr->playlist()->thaw(); /* update layers count and the y positions and heights of our regions */ _layers = tr->playlist()->top_layer() + 1; update_contents_height (); @@ -410,15 +414,15 @@ StreamView::create_rec_box(framepos_t frame_pos, double width) { const double xstart = _trackview.editor().sample_to_pixel(frame_pos); const double xend = xstart + width; - const uint32_t fill_color = ARDOUR_UI::config()->color_mod("recording rect", "recording_rect"); + const uint32_t fill_color = UIConfiguration::instance().color_mod("recording rect", "recording_rect"); - ArdourCanvas::Rectangle* rec_rect = new ArdourCanvas::TimeRectangle(_canvas_group); + ArdourCanvas::Rectangle* rec_rect = new ArdourCanvas::Rectangle(_canvas_group); rec_rect->set_x0(xstart); rec_rect->set_y0(0); rec_rect->set_x1(xend); rec_rect->set_y1(child_height ()); rec_rect->set_outline_what(ArdourCanvas::Rectangle::What(0)); - rec_rect->set_outline_color(ARDOUR_UI::config()->color("recording rect")); + rec_rect->set_outline_color(UIConfiguration::instance().color("recording rect")); rec_rect->set_fill_color(fill_color); rec_rect->lower_to_bottom(); @@ -495,7 +499,7 @@ StreamView::num_selected_regionviews () const uint32_t cnt = 0; for (list::const_iterator i = region_views.begin(); i != region_views.end(); ++i) { - if ((*i)->get_selected()) { + if ((*i)->selected()) { ++cnt; } } @@ -514,7 +518,7 @@ void StreamView::foreach_selected_regionview (sigc::slot slot) { for (list::iterator i = region_views.begin(); i != region_views.end(); ++i) { - if ((*i)->get_selected()) { + if ((*i)->selected()) { slot (*i); } } @@ -540,7 +544,6 @@ StreamView::set_selected_regionviews (RegionSelection& regions) } } - /** Get selectable things within a given range. * @param start Start time in session frames. * @param end End time in session frames. @@ -548,10 +551,13 @@ StreamView::set_selected_regionviews (RegionSelection& regions) * @param bot Bottom y range, in trackview coordinates (ie 0 is the top of the track view) * @param result Filled in with selectable things. */ - void -StreamView::get_selectables (framepos_t start, framepos_t end, double top, double bottom, list& results) +StreamView::get_selectables (framepos_t start, framepos_t end, double top, double bottom, list& results, bool within) { + if (_trackview.editor().internal_editing()) { + return; // Don't select regions with an internal tool + } + layer_t min_layer = 0; layer_t max_layer = 0; @@ -583,9 +589,16 @@ StreamView::get_selectables (framepos_t start, framepos_t end, double top, doubl layer_ok = (min_layer <= l && l <= max_layer); } - if ((*i)->region()->coverage (start, end) != Evoral::OverlapNone && layer_ok) { - results.push_back (*i); + if (within) { + if ((*i)->region()->coverage (start, end) == Evoral::OverlapExternal && layer_ok) { + results.push_back (*i); + } + } else { + if ((*i)->region()->coverage (start, end) != Evoral::OverlapNone && layer_ok) { + results.push_back (*i); + } } + } } @@ -611,7 +624,7 @@ StreamView::child_height () const case Expanded: return height / (_layers * 2 + 1); } - + abort(); /* NOTREACHED */ return height; } @@ -662,7 +675,7 @@ StreamView::set_layer_display (LayerDisplay d) if (_layer_display == Overlaid) { layer_regions (); } - + update_contents_height (); update_coverage_frames (); }