X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Ftape_region_view.cc;h=2d71bdf5ab90c3020bb33a0fc9dbb6cc6a60b11d;hb=3dc322fa66589676e2ea4521e3e85bc494bc1667;hp=a10541ffc6a1955bf8e441a28fee4f252d114b2b;hpb=402cc384ced6cb152c8abe4294009fe0de0a6dea;p=ardour.git diff --git a/gtk2_ardour/tape_region_view.cc b/gtk2_ardour/tape_region_view.cc index a10541ffc6..2d71bdf5ab 100644 --- a/gtk2_ardour/tape_region_view.cc +++ b/gtk2_ardour/tape_region_view.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2006 Paul Davis + Copyright (C) 2006 Paul Davis This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -24,10 +24,8 @@ #include -#include "ardour/playlist.h" #include "ardour/audioregion.h" #include "ardour/audiosource.h" -#include "ardour/audio_diskstream.h" #include "tape_region_view.h" #include "audio_time_axis.h" @@ -35,7 +33,6 @@ #include "i18n.h" -using namespace sigc; using namespace ARDOUR; using namespace PBD; using namespace Editing; @@ -49,32 +46,32 @@ const TimeAxisViewItem::Visibility TapeAudioRegionView::default_tape_visibility TimeAxisViewItem::HideFrameRight | TimeAxisViewItem::FullWidthNameHighlight); -TapeAudioRegionView::TapeAudioRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView &tv, - boost::shared_ptr r, - double spu, - Gdk::Color const & basic_color) +TapeAudioRegionView::TapeAudioRegionView (ArdourCanvas::Container *parent, RouteTimeAxisView &tv, + boost::shared_ptr r, + double spu, + uint32_t basic_color) : AudioRegionView (parent, tv, r, spu, basic_color, false, - TimeAxisViewItem::Visibility ((r->position() != 0) ? default_tape_visibility : + TimeAxisViewItem::Visibility ((r->position() != 0) ? default_tape_visibility : TimeAxisViewItem::Visibility (default_tape_visibility|TimeAxisViewItem::HideFrameLeft))) { } void -TapeAudioRegionView::init (Gdk::Color const & basic_color, bool wfw) +TapeAudioRegionView::init (bool /*wfw*/) { /* never wait for data: always just create the waves, connect once and then we'll update whenever we need to. */ - AudioRegionView::init(basic_color, false); + AudioRegionView::init (false); /* every time the wave data changes and peaks are ready, redraw */ - + for (uint32_t n = 0; n < audio_region()->n_channels(); ++n) { - audio_region()->audio_source(n)->PeaksReady.connect (bind (mem_fun(*this, &TapeAudioRegionView::update), n)); + audio_region()->audio_source(n)->PeaksReady.connect (*this, invalidator (*this), boost::bind (&TapeAudioRegionView::update, this, n), gui_context()); } - + } TapeAudioRegionView::~TapeAudioRegionView() @@ -82,24 +79,26 @@ TapeAudioRegionView::~TapeAudioRegionView() } void -TapeAudioRegionView::update (uint32_t n) +TapeAudioRegionView::update (uint32_t /*n*/) { /* check that all waves are build and ready */ - if (!tmp_waves.empty()) { return; } - ENSURE_GUI_THREAD (bind (mem_fun(*this, &TapeAudioRegionView::update), n)); - - /* this triggers a cache invalidation and redraw in the waveview */ - - waves[n]->property_data_src() = _region.get(); -} - -void -TapeAudioRegionView::set_frame_color () -{ - fill_opacity = 255; - AudioRegionView::set_frame_color (); + ENSURE_GUI_THREAD (*this, &TapeAudioRegionView::update, n); + // CAIROCANVAS + + /* this is a quick hack to draw something (abuse gain_changed to force + * an image-cache invalidation. + * + * TODO: ArdourCanvas::WaveView needs an API to look up the specific channel "n" + * and a special case to not only invalidate the cache but re-expose the + * waveform. e.g. + * + * waves[m]->rebuild(); // where 'm' corresponds to channel 'n'. + */ + for (uint32_t i = 0; i < waves.size(); ++i) { + waves[i]->gain_changed (); + } }