X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Faudio_streamview.cc;h=85812b43d6d49ce90015b1f0cc21340932a8b6cf;hb=3705a2d6307cf443acbf8419b0e0f560591f2016;hp=c571cb1a7cc2a13bc909c75f5035fd9339658b34;hpb=cc862d31bd8c9005964dca94a9942f1b42847252;p=ardour.git diff --git a/gtk2_ardour/audio_streamview.cc b/gtk2_ardour/audio_streamview.cc index c571cb1a7c..85812b43d6 100644 --- a/gtk2_ardour/audio_streamview.cc +++ b/gtk2_ardour/audio_streamview.cc @@ -32,6 +32,7 @@ #include #include #include +#include #include "audio_streamview.h" #include "audio_region_view.h" @@ -61,20 +62,10 @@ AudioStreamView::AudioStreamView (AudioTimeAxisView& tv) crossfades_visible = true; _waveform_scale = LinearWaveform; _waveform_shape = Traditional; - - if (tv.is_track()) - stream_base_color = ARDOUR_UI::config()->canvasvar_AudioTrackBase.get(); - else - stream_base_color = ARDOUR_UI::config()->canvasvar_AudioBusBase.get(); - - canvas_rect->property_fill_color_rgba() = stream_base_color; - canvas_rect->property_outline_color_rgba() = RGBA_BLACK; - + color_handler (); _amplitude_above_axis = 1.0; - use_rec_regions = tv.editor.show_waveforms_recording (); - - + use_rec_regions = tv.editor().show_waveforms_recording (); } AudioStreamView::~AudioStreamView () @@ -114,7 +105,7 @@ AudioStreamView::set_amplitude_above_axis (gdouble app) } RegionView* -AudioStreamView::add_region_view_internal (boost::shared_ptr r, bool wait_for_waves) +AudioStreamView::add_region_view_internal (boost::shared_ptr r, bool wait_for_waves, bool recording) { AudioRegionView *region_view = 0; @@ -144,8 +135,13 @@ AudioStreamView::add_region_view_internal (boost::shared_ptr r, bool wai switch (_trackview.audio_track()->mode()) { case Normal: - region_view = new AudioRegionView (canvas_group, _trackview, region, - _samples_per_unit, region_color); + if (recording) { + region_view = new AudioRegionView (canvas_group, _trackview, region, + _samples_per_unit, region_color, recording, TimeAxisViewItem::Visibility(TimeAxisViewItem::ShowFrame | TimeAxisViewItem::HideFrameRight)); + } else { + region_view = new AudioRegionView (canvas_group, _trackview, region, + _samples_per_unit, region_color); + } break; case Destructive: region_view = new TapeAudioRegionView (canvas_group, _trackview, region, @@ -159,9 +155,9 @@ AudioStreamView::add_region_view_internal (boost::shared_ptr r, bool wai region_view->init (region_color, wait_for_waves); region_view->set_amplitude_above_axis(_amplitude_above_axis); + region_view->set_height (child_height ()); region_views.push_front (region_view); - /* if its the special single-sample length that we use for rec-regions, make it insensitive to events */ @@ -193,7 +189,7 @@ AudioStreamView::add_region_view_internal (boost::shared_ptr r, bool wai /* follow global waveform setting */ - region_view->set_waveform_visible(_trackview.editor.show_waveforms()); + region_view->set_waveform_visible(_trackview.editor().show_waveforms()); /* catch regionview going away */ region->GoingAway.connect (bind (mem_fun (*this, &AudioStreamView::remove_region_view), boost::weak_ptr (r))); @@ -312,7 +308,7 @@ AudioStreamView::add_crossfade (boost::shared_ptr crossfade) for (list::iterator i = crossfade_views.begin(); i != crossfade_views.end(); ++i) { if ((*i)->crossfade == crossfade) { - if (!crossfades_visible || layer_display == Stacked) { + if (!crossfades_visible || _layer_display == Stacked) { (*i)->hide(); } else { (*i)->show (); @@ -335,7 +331,7 @@ AudioStreamView::add_crossfade (boost::shared_ptr crossfade) } } - CrossfadeView *cv = new CrossfadeView (_trackview.canvas_display, + CrossfadeView *cv = new CrossfadeView (_trackview.canvas_display (), _trackview, crossfade, _samples_per_unit, @@ -344,7 +340,7 @@ AudioStreamView::add_crossfade (boost::shared_ptr crossfade) cv->set_valid (true); crossfade->Invalidated.connect (mem_fun (*this, &AudioStreamView::remove_crossfade)); crossfade_views.push_back (cv); - if (!Config->get_xfades_visible() || !crossfades_visible || layer_display == Stacked) { + if (!Config->get_xfades_visible() || !crossfades_visible || _layer_display == Stacked) { cv->hide (); } } @@ -377,7 +373,7 @@ AudioStreamView::redisplay_diskstream () for (xi = crossfade_views.begin(); xi != crossfade_views.end(); ++xi) { (*xi)->set_valid (false); - if ((*xi)->visible() && layer_display != Stacked) { + if ((*xi)->visible() && _layer_display != Stacked) { (*xi)->show (); } } @@ -390,8 +386,9 @@ AudioStreamView::redisplay_diskstream () apl->foreach_crossfade (this, &AudioStreamView::add_crossfade); } - RegionViewList copy; + RegionViewList copy; + /* Place regions */ for (i = region_views.begin(); i != region_views.end(); ) { tmp = i; tmp++; @@ -405,10 +402,8 @@ AudioStreamView::redisplay_diskstream () (*i)->enable_display(true); } - /* - sort regionviews by layer so that when we call region_layered () - the canvas layering works out (in non-stacked mode). - */ + /* Sort regionviews by layer so that when we call region_layered () + the canvas layering works out (in non-stacked mode). */ if (copy.size() == 0) { copy.push_front((*i)); @@ -431,7 +426,6 @@ AudioStreamView::redisplay_diskstream () } for (RegionViewList::iterator j = copy.begin(); j != copy.end(); ++j) { - if ((*j)->region()->layer() >= (*i)->region()->layer()) { copy.insert(j, (*i)); break; @@ -439,7 +433,6 @@ AudioStreamView::redisplay_diskstream () } i = tmp; - } for (xi = crossfade_views.begin(); xi != crossfade_views.end();) { @@ -453,13 +446,11 @@ AudioStreamView::redisplay_diskstream () xi = tmpx; } - - /* now fix canvas layering */ - for (RegionViewList::iterator j = copy.begin(); j != copy.end(); ++j) { - (*j)->enable_display(true); - (*j)->set_y_position_and_height(0, height); - region_layered (*j); + /* now fix layering */ + + for (RegionViewList::iterator i = copy.begin(); i != copy.end(); ++i) { + region_layered (*i); } } @@ -468,8 +459,9 @@ AudioStreamView::set_show_waveforms (bool yn) { for (list::iterator i = region_views.begin(); i != region_views.end(); ++i) { AudioRegionView* const arv = dynamic_cast(*i); - if (arv) + if (arv) { arv->set_waveform_visible (yn); + } } } @@ -498,7 +490,7 @@ AudioStreamView::set_waveform_scale (WaveformScale scale) void AudioStreamView::setup_rec_box () { - // cerr << _trackview.name() << " streamview SRB\n"; + //cerr << _trackview.name() << " streamview SRB region_views.size() = " << region_views.size() << endl; if (_trackview.session().transport_rolling()) { @@ -507,7 +499,6 @@ AudioStreamView::setup_rec_box () if (!rec_active && _trackview.session().record_status() == Session::Recording && _trackview.get_diskstream()->record_enabled()) { - if (_trackview.audio_track()->mode() == Normal && use_rec_regions && rec_regions.size() == rec_rects.size()) { /* add a new region, but don't bother if they set use_rec_regions mid-record */ @@ -544,7 +535,6 @@ AudioStreamView::setup_rec_box () (RegionFactory::create (sources, start, 1 , "", 0, (Region::Flag)(Region::DefaultFlags | Region::DoNotSaveState), false))); assert(region); region->set_position (_trackview.session().transport_frame(), this); - rec_regions.push_back (make_pair(region, (RegionView*)0)); } @@ -555,7 +545,7 @@ AudioStreamView::setup_rec_box () at = _trackview.audio_track(); /* we know what it is already */ boost::shared_ptr ds = at->audio_diskstream(); nframes_t frame_pos = ds->current_capture_start (); - gdouble xstart = _trackview.editor.frame_to_pixel (frame_pos); + gdouble xstart = _trackview.editor().frame_to_pixel (frame_pos); gdouble xend; uint32_t fill_color; @@ -579,8 +569,9 @@ AudioStreamView::setup_rec_box () rec_rect->property_x1() = xstart; rec_rect->property_y1() = 1.0; rec_rect->property_x2() = xend; - rec_rect->property_y2() = (double) _trackview.height - 1; - rec_rect->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_RecordingRect.get(); + rec_rect->property_y2() = child_height (); + rec_rect->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_TimeAxisFrame.get(); + rec_rect->property_outline_what() = 0x1 | 0x2 | 0x4 | 0x8; rec_rect->property_fill_color_rgba() = fill_color; rec_rect->lower_to_bottom(); @@ -599,11 +590,9 @@ AudioStreamView::setup_rec_box () } else if (rec_active && (_trackview.session().record_status() != Session::Recording || !_trackview.get_diskstream()->record_enabled())) { - screen_update_connection.disconnect(); rec_active = false; rec_updating = false; - } } else { @@ -689,7 +678,6 @@ void AudioStreamView::update_rec_regions () { if (use_rec_regions) { - uint32_t n = 0; for (list,RegionView*> >::iterator iter = rec_regions.begin(); iter != rec_regions.end(); n++) { @@ -727,12 +715,12 @@ AudioStreamView::update_rec_regions () if (origlen == 1) { /* our special initial length */ - add_region_view_internal (region, false); + add_region_view_internal (region, false, true); } /* also update rect */ ArdourCanvas::SimpleRect * rect = rec_rects[n].rectangle; - gdouble xend = _trackview.editor.frame_to_pixel (region->position() + region->length()); + gdouble xend = _trackview.editor().frame_to_pixel (region->position() + region->length()); rect->property_x2() = xend; } } @@ -752,7 +740,7 @@ AudioStreamView::update_rec_regions () if (origlen == 1) { /* our special initial length */ - add_region_view_internal (region, false); + add_region_view_internal (region, false, true); } /* also hide rect */ @@ -768,6 +756,28 @@ AudioStreamView::update_rec_regions () } } +void +AudioStreamView::show_all_fades () +{ + for (list::iterator i = region_views.begin(); i != region_views.end(); ++i) { + AudioRegionView* const arv = dynamic_cast(*i); + if (arv) { + arv->set_fade_visibility (true); + } + } +} + +void +AudioStreamView::hide_all_fades () +{ + for (list::iterator i = region_views.begin(); i != region_views.end(); ++i) { + AudioRegionView* const arv = dynamic_cast(*i); + if (arv) { + arv->set_fade_visibility (false); + } + } +} + void AudioStreamView::show_all_xfades () { @@ -796,7 +806,7 @@ void AudioStreamView::reveal_xfades_involving (AudioRegionView& rv) { for (list::iterator i = crossfade_views.begin(); i != crossfade_views.end(); ++i) { - if ((*i)->crossfade->involves (rv.audio_region()) && (*i)->visible() && layer_display != Stacked) { + if ((*i)->crossfade->involves (rv.audio_region()) && (*i)->visible() && _layer_display != Stacked) { (*i)->show (); } } @@ -812,20 +822,23 @@ AudioStreamView::color_handler () //case cAudioBusBase: if (!_trackview.is_track()) { - canvas_rect->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_AudioBusBase.get(); + if (Profile->get_sae() && _trackview.route()->is_master()) { + canvas_rect->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_AudioMasterBusBase.get(); + } else { + canvas_rect->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_AudioBusBase.get(); + } } - } void -AudioStreamView::update_contents_y_position_and_height () +AudioStreamView::update_contents_height () { - StreamView::update_contents_y_position_and_height (); + StreamView::update_contents_height (); for (CrossfadeViewList::iterator i = crossfade_views.begin(); i != crossfade_views.end(); ++i) { - if (layer_display == Overlaid) { + if (_layer_display == Overlaid) { (*i)->show (); - (*i)->set_y_position_and_height (0, height); + (*i)->set_height (height); } else { (*i)->hide (); }