X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Faudio_streamview.cc;h=abfa767c9c473dfeec247de7b435e51840d52806;hb=7b155267505af3fedffc7972b08cb784c97b7e74;hp=65efd9654c39cce1199bcda758c37e973f7429dc;hpb=88f13bbe33f8cb24fc571eb65538ad8896d272e0;p=ardour.git diff --git a/gtk2_ardour/audio_streamview.cc b/gtk2_ardour/audio_streamview.cc index 65efd9654c..abfa767c9c 100644 --- a/gtk2_ardour/audio_streamview.cc +++ b/gtk2_ardour/audio_streamview.cc @@ -61,7 +61,7 @@ using namespace Editing; AudioStreamView::AudioStreamView (AudioTimeAxisView& tv) : StreamView (tv) { - crossfades_visible = true; + crossfades_visible = tv.session()->config.get_xfades_visible (); color_handler (); _amplitude_above_axis = 1.0; @@ -121,7 +121,10 @@ AudioStreamView::create_region_view (boost::shared_ptr r, bool wait_for_ if (recording) { region_view = new AudioRegionView (_canvas_group, _trackview, region, _samples_per_unit, region_color, recording, TimeAxisViewItem::Visibility( - TimeAxisViewItem::ShowFrame | TimeAxisViewItem::HideFrameRight)); + TimeAxisViewItem::ShowFrame | + TimeAxisViewItem::HideFrameRight | + TimeAxisViewItem::HideFrameLeft | + TimeAxisViewItem::HideFrameTB)); } else { region_view = new AudioRegionView (_canvas_group, _trackview, region, _samples_per_unit, region_color); @@ -160,6 +163,7 @@ RegionView* AudioStreamView::add_region_view_internal (boost::shared_ptr r, bool wait_for_waves, bool recording) { RegionView *region_view = create_region_view (r, wait_for_waves, recording); + if (region_view == 0) { return 0; } @@ -325,7 +329,7 @@ AudioStreamView::add_crossfade (boost::weak_ptr wc) cv->set_valid (true); crossfade->Invalidated.connect (*this, invalidator (*this), ui_bind (&AudioStreamView::remove_crossfade, this, _1), gui_context()); crossfade_views[cv->crossfade] = cv; - if (!_trackview.session()->config.get_xfades_visible() || !crossfades_visible) { + if (!crossfades_visible) { cv->hide (); } @@ -459,15 +463,15 @@ AudioStreamView::setup_rec_box () if (src) { sources.push_back (src); src->PeakRangeReady.connect (rec_data_ready_connections, - invalidator (*this), - ui_bind (&AudioStreamView::rec_peak_range_ready, this, _1, _2, boost::weak_ptr(src)), - gui_context()); + invalidator (*this), + ui_bind (&AudioStreamView::rec_peak_range_ready, this, _1, _2, boost::weak_ptr(src)), + gui_context()); } } // handle multi - nframes_t start = 0; + framepos_t start = 0; if (rec_regions.size() > 0) { start = rec_regions.back().first->start() + _trackview.track()->get_captured_frames(rec_regions.size()-1); @@ -484,9 +488,8 @@ AudioStreamView::setup_rec_box () boost::dynamic_pointer_cast(RegionFactory::create (sources, plist, false))); assert(region); - region->block_property_changes (); region->set_position (_trackview.session()->transport_frame(), this); - rec_regions.push_back (make_pair(region, (RegionView*)0)); + rec_regions.push_back (make_pair(region, (RegionView*) 0)); } /* start a new rec box */ @@ -494,7 +497,7 @@ AudioStreamView::setup_rec_box () boost::shared_ptr at; at = _trackview.audio_track(); /* we know what it is already */ - nframes_t frame_pos = at->current_capture_start (); + framepos_t const frame_pos = at->current_capture_start (); gdouble xstart = _trackview.editor().frame_to_pixel (frame_pos); gdouble xend; uint32_t fill_color; @@ -521,8 +524,8 @@ AudioStreamView::setup_rec_box () rec_rect->property_y1() = 1.0; rec_rect->property_x2() = xend; rec_rect->property_y2() = child_height (); + rec_rect->property_outline_what() = 0x0; 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(); @@ -597,7 +600,7 @@ AudioStreamView::foreach_crossfadeview (void (CrossfadeView::*pmf)(void)) } void -AudioStreamView::rec_peak_range_ready (nframes_t start, nframes_t cnt, boost::weak_ptr weak_src) +AudioStreamView::rec_peak_range_ready (framepos_t start, framecnt_t cnt, boost::weak_ptr weak_src) { ENSURE_GUI_THREAD (*this, &AudioStreamView::rec_peak_range_ready, start, cnt, weak_src) @@ -616,68 +619,75 @@ AudioStreamView::rec_peak_range_ready (nframes_t start, nframes_t cnt, boost::we rec_data_ready_map[src] = true; if (rec_data_ready_map.size() == _trackview.track()->n_channels().n_audio()) { - this->update_rec_regions (); + update_rec_regions (start, cnt); rec_data_ready_map.clear(); } } void -AudioStreamView::update_rec_regions () +AudioStreamView::update_rec_regions (framepos_t start, framecnt_t cnt) { - if (Config->get_show_waveforms_while_recording ()) { - uint32_t n = 0; - - for (list,RegionView*> >::iterator iter = rec_regions.begin(); - iter != rec_regions.end(); n++) { - - list,RegionView*> >::iterator tmp = iter; - ++tmp; - - if (!canvas_item_visible (rec_rects[n].rectangle)) { - /* rect already hidden, this region is done */ - iter = tmp; - continue; - } - - boost::shared_ptr region = boost::dynamic_pointer_cast(iter->first); - if (!region) { - iter = tmp; - continue; - } - - nframes_t origlen = region->length(); - - if (region == rec_regions.back().first && rec_active) { - - if (last_rec_data_frame > region->start()) { - - nframes_t nlen = last_rec_data_frame - region->start(); - - if (nlen != region->length()) { - - region->suspend_property_changes (); - region->set_position (_trackview.track()->get_capture_start_frame(n), this); - region->set_length (nlen, this); - region->resume_property_changes (); + if (!Config->get_show_waveforms_while_recording ()) { + return; + } + + uint32_t n = 0; + + for (list,RegionView*> >::iterator iter = rec_regions.begin(); iter != rec_regions.end(); n++) { + + list,RegionView*> >::iterator tmp = iter; + ++tmp; + + assert (n < rec_rects.size()); + + if (!canvas_item_visible (rec_rects[n].rectangle)) { + /* rect already hidden, this region is done */ + iter = tmp; + continue; + } + + boost::shared_ptr region = boost::dynamic_pointer_cast(iter->first); + + if (!region) { + iter = tmp; + continue; + } + + framecnt_t origlen = region->length(); - if (origlen == 1) { - /* our special initial length */ - add_region_view_internal (region, false, true); - } + if (region == rec_regions.back().first && rec_active) { + + if (last_rec_data_frame > region->start()) { + + framecnt_t nlen = last_rec_data_frame - region->start(); + + if (nlen != region->length()) { - /* also update rect */ - ArdourCanvas::SimpleRect * rect = rec_rects[n].rectangle; - gdouble xend = _trackview.editor().frame_to_pixel (region->position() + region->length()); - rect->property_x2() = xend; + region->suspend_property_changes (); + region->set_position (_trackview.track()->get_capture_start_frame(n), this); + region->set_length (nlen, this); + region->resume_property_changes (); + + if (origlen == 1) { + /* our special initial length */ + add_region_view_internal (region, false, true); + setup_new_rec_layer_time (region); } + + check_record_layers (region, (region->position() - region->start() + start + cnt)); + + /* also update rect */ + ArdourCanvas::SimpleRect * rect = rec_rects[n].rectangle; + gdouble xend = _trackview.editor().frame_to_pixel (region->position() + region->length()); + rect->property_x2() = xend; } } else { - - nframes_t nlen = _trackview.track()->get_captured_frames(n); - + + framecnt_t nlen = _trackview.track()->get_captured_frames(n); + if (nlen != region->length()) { - + if (region->source_length(0) >= region->start() + nlen) { region->suspend_property_changes (); @@ -697,9 +707,9 @@ AudioStreamView::update_rec_regions () } } } - - iter = tmp; } + + iter = tmp; } } @@ -790,8 +800,6 @@ AudioStreamView::update_contents_height () void AudioStreamView::update_content_height (CrossfadeView* cv) { - cv->show (); - if (_layer_display == Overlaid) { cv->set_y (0); @@ -824,3 +832,14 @@ AudioStreamView::parameter_changed (string const & p) set_waveform_shape (Config->get_waveform_shape ()); } } + +void +AudioStreamView::horizontal_position_changed () +{ + /* we only `draw' the bit of the curve that is visible, so we need to update here */ + + for (CrossfadeViewList::iterator i = crossfade_views.begin(); i != crossfade_views.end(); ++i) { + i->second->horizontal_position_changed (); + } +} +